Как передать аргументы методу webargs напрямую из кода без http-вызова?
У меня есть метод Flask, который отлично работает через HTTP:
class PricePerPeriod(Resource):
args = {'period': fields.Int(required=True, validate=lambda val: val > 0),
'duration': fields.Int(required=True, validate=lambda val: val > 0)}
@use_kwargs(args)
def get(self, identifier_id, period, duration):
api.add_resource(PricePerPeriod, '/price/<int:identifier_id>/')
с такими звонками http://localhost:8080/price/21/?period=1&duration=60
Однако если я попытаюсь вызвать такой метод из кода:
price_per_period = PricePerPeriod()
result = price_per_period.get(identifier_id, period, duration)
Сбой при проверке аргументов webargs.
{"errors": {
"period": [
"Missing data for required field."
]
}}
Я могу только предположить, что @use_kwargs (args) ожидает заполнения аргументов, которые в случае прямого вызова являются пустыми, поскольку параметры передаются в функцию напрямую.
Как я могу вызвать метод, украшенный @use_kwargs(args)
из кода и передать ему аргументы правильно?
1 ответ
Целесообразно хранить привязку колбы отдельно от бизнес-логики. Это касается любой привязки к любой сторонней платформе или библиотеке. Из вас нет, вы всегда будете в конечном итоге с помощью ряда методов, которые "загрязнены" материалами третьих сторон.
Поэтому я предлагаю вам реализовать свой метод get без использования декоратора @use_kwargs и создать класс, независимый от flask.
Затем объект этого класса van будет помещен в объект привязки фляги, имеющий методы Same, но оформленные.
Таким образом, вы можете гибко использовать собственную логику так, как вы ее разработали, и четкое разделение проблем.
class FlaskBinding:
def _init_(self):
self.obj = PricePerPeriod()
@use_kwargs
def get(self,...):
return self.obj.get()