Проблема, связанная с python Falcon с валидатором схемы json и автокрудом - PullRequest
0 голосов
/ 25 января 2020

Я создаю HTTP API с использованием платформы сокола (https://falconframework.org/), сокола-autocrud (https://pypi.org/project/falcon-autocrud/) и аутентификации сокола (https://falcon-auth.readthedocs.io/en/latest/readme.html). В качестве сервера WSGI я использую gunicorn.

Когда я использую auto-crud , библиотека , кажется, полностью отклоняет тело пользовательских ресурсов для запросов POST (Это отлично работает с GET-запросами).

Я понял, что этого следует избегать, когда установлен декоратор jsonschema, как после просмотра исходного кода библиотеки я обнаружил источник "Invalid JSON body 'сообщение, которое я получаю при вызове моей конечной точки.

Примечание. Мой код запускается, когда я закомментирую каждую ссылку на autocrud

Мой ресурс:

class XYZResource(object):
    @jsonschema.validate({})
    def on_post(self, req, resp):
        print(req.media)
        resp.media = {}

Моя конфигурация сокола:

import falcon
from falcon_autocrud.middleware import Middleware
from falcon_auth import FalconAuthMiddleware, JWTAuthBackend
import falcon_jsonify
from sqlalchemy.orm import aliased
import jwt

import resources
from models import db_engine, User, Session

#auth_backend = JWTAuthBackend(user_loader=user_loader_jwt, secret_key="super secret key", auth_header_prefix="Bearer")
#auth_middleware = FalconAuthMiddleware(auth_backend)

app = falcon.API(
    middleware=[
        #Middleware(),  # autocrud
        #auth_middleware,
    ],
)

# app.add_route('/user', resources.UserCollectionResource(db_engine))
# app.add_route('/user/{username}', resources.UserResource(db_engine))

app.add_route('/xyz', resources.XYZResource)

Трассировка:

[2020-01-23 22:43:15 +0100] [63994] [INFO] Starting gunicorn 20.0.4
[2020-01-23 22:43:15 +0100] [63994] [INFO] Listening at: http://127.0.0.1:8000 (63994)
[2020-01-23 22:43:15 +0100] [63994] [INFO] Using worker: sync
[2020-01-23 22:43:15 +0100] [63998] [INFO] Booting worker with pid: 63998
[2020-01-23 22:43:16 +0100] [63998] [ERROR] Error handling request /xyz
Traceback (most recent call last):
  File "/[2020-01-23 22:43:15 +0100] [63994] [INFO] Starting gunicorn 20.0.4
[2020-01-23 22:43:15 +0100] [63994] [INFO] Listening at: http://127.0.0.1:8000 (63994)
[2020-01-23 22:43:15 +0100] [63994] [INFO] Using worker: sync
[2020-01-23 22:43:15 +0100] [63998] [INFO] Booting worker with pid: 63998
[2020-01-23 22:43:16 +0100] [63998] [ERROR] Error handling request /xyz
Traceback (most recent call last):
  File "/Users/fb/repositories/lister_backend_api/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/repository/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/repository/venv/lib/python3.7/site-packages/falcon/api.py", line 244, in __call__
    responder(req, resp, **params)
TypeError: wrapper() missing 1 required positional argument: 'resp'
/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/repository/venv/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/repository/venv/lib/python3.7/site-packages/falcon/api.py", line 244, in __call__
    responder(req, resp, **params)
TypeError: wrapper() missing 1 required positional argument: 'resp'

После того, как я потратил последние две недели на эту помощь, любая помощь будет просто потрясающей! : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...