Verwenden Sie AWS Chalice und nehmen Sie an, dass app.py
folgendermaßen aussieht:
from chalice import Chalice, Response
from chalicelib.utils import some_class
app = Chalice(app_name='myApp')
app.debug = True
@app.route('/myRoute',
methods=['POST'],
content_types=['application/octet-stream'])
def myRoute():
some_class_instance = some_class()
some_class_instance.some_def()
return Response(
body={'hello': 'world'},
headers={'Content-Type': 'application/json'})
Und in utils.py
:
import requests
from chalice import Response
class some_class:
def some_def():
return Response(
body={'key1': 'val1'},
headers={'Content-Type': 'application/json'})
Die return-Anweisung von some_class.some_def
wird nicht an den Client zurückgegeben, wenn sie wie gezeigt geschrieben wurde. Aber wenn ich some_def
von app.py
aus starte, wird es zurückgegeben. Warum?
Wie kann ich Objekte von außerhalb von app.py
an den Client zurückgeben?
3 Antworten
Die Antwort ist trivial einfach (Hinweis eines Kollegen). Sie geben den von some_def
zurückgegebenen Wert in der Aufruferfunktion (myRoute
) aus. Wenn es nicht leer ist, geben Sie dieses zurück. Anhand des Beispiels aus der Frage sieht app.py
folgendermaßen aus:
from chalice import Chalice, Response
from chalicelib.utils import some_class
app = Chalice(app_name='myApp')
app.debug = True
@app.route('/myRoute',
methods=['POST'],
content_types=['application/octet-stream'])
def myRoute():
some_class_instance = some_class()
r = some_class_instance.some_def()
if r:
return r
else:
return Response(
body={'hello': 'world'},
headers={'Content-Type': 'application/json'})
Wenn Sie den Anwendungscode nicht in app.py
behalten möchten, dient diese Lösung der Unterstützung von multifile
.
Sie können ein Chalicelib / -Verzeichnis erstellen, und alles in diesem Verzeichnis ist rekursiv im Bereitstellungspaket enthalten
├── app.py
├── chalicelib
│ └── __init__.py
| └── utils.py
└── requirements.txt
Und dann in deine app.py so importieren
from chalicelib.utils import SomeClass
some_class = SomeClass()
some_class.some_def()
Ich kann nicht sehen, dass Sie some_class.some_def in utils.py aufrufen. Sie müssen die Funktion wie in app.py aufrufen:
some_class.some_def()
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.