Acessing "app" (Eve-Objekt) aus Hook-Callbacks

Ich benutze Hooks in meiner Eve App, um ein "Summary" Objekt jedes Mal zu aktualisieren, wenn ein neues Item meiner Sammlung hinzugefügt wird. Um die Dinge sauber zu halten, habe ich meine Rückrufe in eine separate Dir / Datei verschoben, die ich von run.py importiere, wo ich die Hooks einrichte.

Mein Problem ist, dass ich auf das Eve () – Objekt (das ich "app" genannt habe) von meiner Callback-Funktion (benannt on_inserted_expense) zugreifen muss. Ich konnte nicht den "Vorabend" Weg, es zu tun, so dass ich am Ende mit etwas wie dieser Dekorator-wie Trick, die funktioniert:

  • In Eve, wie können Sie das Passwort des Benutzers sicher speichern?
  • Authentifizierungs-Token-Problem EVE
  • In Eva, wie können Sie eine Sub-Ressource einer Sammlung und halten Sie die Eltern-Sammlungen Endpunkt?
  • Python-Vorabend - User-Restricted Resource Access-Funktion mit Item ID_FIELD als AUTH_FIELD
  • Python-Vorabend - wie bekomme ich den aktuellen Benutzer nach erfolgreicher Authentifizierung?
  • Wie man einen Endpunkt in einem anderen verweist?
  • from eve import Eve from eventhooks import posthooks from functools import wraps app = Eve() def passing_app(f): @wraps(f) def wrapper(*args, **kwargs): kwargs['app'] = app return f(*args, **kwargs) return wrapper app.on_inserted_expenses += passing_app(posthooks.on_inserted_expense) 

    Auf diese Weise von eventhooks / posthooks.py kann ich tun:

     def on_inserted_expense(items, **kwargs): app = kwargs['app'] for item in items: summaries = app.data.driver.db['summaries'] summary = summaries.find_one({'title': 'default'}) if not item_in_summary(item, summary): with app.test_request_context(): update = update_summary(summary, item) patch_internal(summary, payload=update, concurrency_check=True) 

    Meine Frage ist also: Gibt es eine Möglichkeit, das aktuelle "App" -Objekt von Eve in einer saubereren Weise von irgendwo innerhalb der Anwendung abzurufen? Wenn nicht, wäre das etwas wert hinzufügen, vielleicht in der Art eines Singletons? Vielen Dank!

  • Python script aus vb.net ausführen
  • Wie mache ich Pythons Reißverschluss in C #?
  • Mehrere IP-Adressen zum Testen simulieren
  • IronPython: Doppelwort nicht erkannt?
  • Wie kommt es, dass es kein C # Äquivalent von Python's Doctest Feature gibt?
  • Zufälliges Binäres Lesen / Schreiben in Python vs .NET
  • 2 Solutions collect form web for “Acessing "app" (Eve-Objekt) aus Hook-Callbacks”

    Wahrscheinlich möchten Sie dem größeren Flaschen-Anwendungsmuster folgen, also können Sie Ihr app Objekt in Ihrem __init__.py deklariert __init__.py und dann können Sie es überall importieren. Denken Sie daran, Eva ist nur eine Flasche Anwendung so was auch immer Sie mit Flasche tun können Sie in der Regel mit Eve tun können.

    Ich habe das getan:

     from flask import current_app 

    Und mit current_app als app.

    Referenz: http://flask.pocoo.org/docs/0.10/api/#flask.current_app

    Gibt es Fallstricke, die ich mir bewusst sein sollte? Es scheint zu funktionieren, wenn man Haken hinzufügt.

    Python ist die beste Programmiersprache der Welt.