Изменение значений объекта запроса werkzeug

У меня есть объект запроса, который исходит от werkzeug. Я хочу изменить значение этого объекта запроса. Это невозможно, потому что объекты запроса werkzeug неизменяемы. Я понимаю это дизайнерское решение, но мне нужно изменить значение. Как мне это сделать?

>>> request
<Request 'http://localhost:5000/new' [POST]>
>>> request.method
'POST'
>>> request.method = 'GET'
*** AttributeError: read only property

Я попытался сделать deepcopy, но полученная копия также неизменяема. Думаю, я мог бы просто создать свой собственный фиктивный объект и заполнить значения вручную, но это мое последнее решение. Есть ли способ лучше?


person priestc    schedule 09.12.2012    source источник


Ответы (1)


Вот что я придумал:

def make_duplicate_request(request):
    """
    Since werkzeug request objects are immutable, this is needed to create an
    identical request object with mutable values
    """
    class Req(object):
        method = 'GET'
        path = ''
        headers = []
        args = []
    r = Req()
    r.path = request.path
    r.headers = request.headers
    r.is_xhr = request.is_xhr
    r.args = request.args
    return r

Возможно, это не самое элегантное решение, но оно работает.

person priestc    schedule 09.12.2012