Вернуть объект ответа из chalicelib/utils.py
Используя AWS Chalice, и предположим, app.py
выглядит так:
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'})
И в utils.py
:
import requests
from chalice import Response
class some_class:
def some_def():
return Response(
body={'key1': 'val1'},
headers={'Content-Type': 'application/json'})
Заявление о возврате от some_class.some_def
не возвращается клиенту, если написано, как показано. Но если я бегу some_def
изнутри app.py
это возвращается. Зачем?
Как я могу вернуть объекты клиенту извне app.py
?
3 ответа
Ответ тривиально прост (подсказка коллеги). Вы оцениваете возвращаемое значение из some_def
в функции звонилки (myRoute
). Если он не пуст, вы возвращаете его. Используя пример из вопроса, app.py
выглядит так:
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'})
Если вы не хотите хранить код приложения в app.py
это решение для multifile
служба поддержки.
Вы можете создать каталог chalicelib/, и все, что в этом каталоге, будет рекурсивно включено в пакет развертывания.
├── app.py
├── chalicelib
│ └── __init__.py
| └── utils.py
└── requirements.txt
И тогда в вашем app.py импорт, как это
from chalicelib.utils import SomeClass
some_class = SomeClass()
some_class.some_def()
Я не вижу, чтобы вы вызывали some_class.some_def в utils.py. Вам нужно вызвать функцию, как вы это сделали в app.py:
some_class.some_def()