Python Eve: TypeError при отправке запроса PATCH и DELETE - PullRequest
0 голосов
/ 06 июня 2018

Я создаю REST API, используя Eve.Eve работает на Nginx и uwsgi в контейнере Docker.

Версия Python : 3.6.5

Eve : 0.8

Eve-SQLAlchemy : 0.5.0

Когда я отправляю GET-запрос на ресурсы и элементы, проблем нет.Однако когда я отправляю запрос PATCH или DELETE, сервер API возвращает страницу 50xError Nginx по умолчанию.

Журналы выглядят так:

    [pid: 12|app: 0|req: 22/22] 192.168.99.1 () {46 vars in 691 bytes} [Wed Jun  6 22:55:26 2018] PATCH /maintenances/18 => generated 0 bytes in 11 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/eve/flaskapp.py", line 1043, in __call__
    return super(Eve, self).__call__(environ, start_response)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib64/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib64/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib64/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/lib/python3.6/site-packages/eve/endpoints.py", line 96, in item_endpoint
    response = patch(resource, **lookup)
  File "/usr/lib/python3.6/site-packages/eve/methods/common.py", line 297, in rate_limited
    return f(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/eve/auth.py", line 78, in decorated
    return f(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/eve/methods/common.py", line 1181, in decorated
    r = f(resource, **combined_args)
  File "/usr/lib/python3.6/site-packages/eve/methods/patch.py", line 41, in patch
    skip_validation=False, **lookup)
  File "/usr/lib/python3.6/site-packages/eve/methods/patch.py", line 134, in patch_internal
    original = get_document(resource, concurrency_check, **lookup)
  File "/usr/lib/python3.6/site-packages/eve/methods/common.py", line 80, in get_document
    **lookup)
TypeError: find_one() takes 3 positional arguments but 5 were given

Когда я удаляю аутентификацию из запроса,сервер возвращает «Пожалуйста, предоставьте правильные учетные данные», но когда я удаляю заголовок «If-Match» из запроса, сервер возвращает эту ошибку.(Таким образом, возможно, что какой-то процесс, существующий между аутентификацией и проверкой etag, является причиной этой ошибки.

1 Ответ

0 голосов
/ 08 июня 2018

Проблема

Это почти наверняка связано с несовместимостью версий между Eve и Eve-SQLAlchemy. Eve-SQLAlchemy 0.5 поддерживает только Eve 0.6 , и в настоящее время нет версии, поддерживающей более новые версии Eve.

Это также соответствует TypeError, который вы видите: find_one() - это метод вслой данных, который предоставляет Eve-SQLAlchemy.Возможно, интерфейс изменился в Eve 0.7 или 0.8.

Куда идти дальше

Если вы используете pip, тогда pip check должен сообщить об ошибке при вашей установке, как заявляет Eve-SQLAlchemyэто зависит от Eve>=0.6,<0.7 (см. https://github.com/pyeve/eve-sqlalchemy/blob/586cec403daabaeab8f7cbe133275d5fcc4e4bf3/setup.py#L35).

. Чтобы это исправить, удалите любое закрепление Eve на несовместимую версию в setup.py и / или requirements.txt, или если это ничего не изменитadd Eve<0.7. К сожалению, pip не всегда может определить набор не противоречащих друг другу версий для всех ваших зависимостей, поэтому для этого иногда требуется руководство.

...