Я строию controller
между системой управления источниками и Odoo таким образом, что определенная интегрированная система управления исходным кодом (как битбакет, github) сможет обрабатывать данные с помощью json. Чтение реальных полезных данных работает, но то, что я борюсь, составляет headers
данных внутри controller
.Python - Прочитайте заголовки внутри контроллера?
Мне нужны данные headers
, чтобы я мог определить, из какой системы получен этот полезный груз (например, структура данных может быть разной в битбакете и github). Теперь, если бы я прочитал это header
, я бы знал, какая система загружает данные и как правильно их анализировать.
Так мой controller
выглядит следующим образом:
from odoo import http
from odoo.http import request
class GitData(http.Controller):
"""Controller responsible for receiving git data."""
@http.route(['/web/git.data'], type='json', auth="public")
def get_git_data(self, **kwargs):
"""Get git data."""
# How to read headers inside here??
data = request.jsonrequest
# do something with data
return '{"response": "OK"}'
Сейчас, например, я могу назвать этот маршрут с:
import requests
import json
url = 'http://some_url/web/git.data'
headers = {
'Accept': 'text/plain',
'Content-Type': 'application/json',
'type': 'bitbucket'}
data = {'some': 'thing'}
r = requests.post(url, data=json.dumps(data), headers=headers)
Теперь он выглядит, что контроллер считывает заголовки автоматически, потому что он понимает, что это json. Но что делать, если мне нужно вручную проверять данные конкретного заголовка, например headers['type']
(в моем примере это было bitbucket
)?
Я пробовал смотреть в dir(self)
и dir(request)
, но ничего не видел связанных с заголовками. Также **kwargs
пуст, поэтому нет заголовков.
Примечание.: request
объект на самом деле:
# Thread local global request object
_request_stack = werkzeug.local.LocalStack()
request = _request_stack()
"""
A global proxy that always redirect to the current request object.
"""
# (This is taken from Odoo 10 source)
Так в основном это часть Werkzeug.
Возможно, у кого-то есть больше опыта работы с werkzeug
или controllers
в целом, так может указать на меня в правильном направлении?
P.S. Также в Odoo я не нашел никакого примера, который бы читал заголовки, как я хочу. Похоже, что используются только заголовки заголовков (фактически устанавливающие их вместо чтения), после того, как они были созданы, когда вы возвращаете ответ.
Вы взглянули здесь http://werkzeug.pocoo.org/docs/0.11/quickstart/#header-parsing? –