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?

0
mjkrause 19 Apr. 2018 im 08:18

3 Antworten

Beste Antwort

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'})
0
mjkrause 19 Apr. 2018 im 17:02

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()
1
Raja Simon 19 Apr. 2018 im 05:35

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()
0
Mikhail Sidorov 19 Apr. 2018 im 05:36