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:

  • Authentifizierungs-Token-Problem EVE
  • Wie man einen Endpunkt in einem anderen verweist?
  • In Eve, wie können Sie das Passwort des Benutzers sicher speichern?
  • 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?
  • 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 für .NET: Verwenden der gleichen .NET-Assembly in mehreren Versionen
  • .NET Regex Unerkanntes Gruppierungskonstrukt
  • Gibt es einen besseren Weg (neben COM) zur Fernsteuerung von Excel?
  • Instantiieren einer Python-Klasse in C #
  • FOSS HTML zu PDF in Python, .Net oder Befehlszeile?
  • Wie bekomme ich lxml unter IronPython?
  • 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.