-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Description
- werkzeug 2.3.4
- flask 2.3.2
- python 3.10.11
When calling add_etag on a Response, my application throws an AttributeError.
compose-web-1 | Traceback (most recent call last):
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/flask/app.py", line 2213, in __call__
compose-web-1 | return self.wsgi_app(environ, start_response)
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/flask/app.py", line 2193, in wsgi_app
compose-web-1 | response = self.handle_exception(e)
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
compose-web-1 | response = self.full_dispatch_request()
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/flask/app.py", line 1487, in full_dispatch_request
compose-web-1 | return self.finalize_request(rv)
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/flask/app.py", line 1508, in finalize_request
compose-web-1 | response = self.process_response(response)
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/flask/app.py", line 2002, in process_response
compose-web-1 | response = self.ensure_sync(func)(response)
compose-web-1 | File "/var/www/---/./app/__init__.py", line 95, in add_etag_to_response
compose-web-1 | response.add_etag()
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/werkzeug/wrappers/response.py", line 790, in add_etag
compose-web-1 | self.set_etag(generate_etag(self.get_data()), weak)
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/werkzeug/wrappers/response.py", line 284, in get_data
compose-web-1 | rv = b"".join(self.iter_encoded())
compose-web-1 | File "/var/www/---/venv/lib/python3.10/site-packages/werkzeug/wrappers/response.py", line 369, in iter_encoded
compose-web-1 | return _iter_encoded(self.response, self._charset)
compose-web-1 | AttributeError: 'Response' object has no attribute '_charset'. Did you mean: 'charset'?
Response is simply the flask Response object. Weirdly this only happens in a production environment (docker container). When running locally in a development environment (same versions), _charset is set to "utf-8".
We don't override any of the Response classes, or any of the fields on there everything is from flask or werkzeug.
Downgrading to werkzeug 2.2.3 and flask 2.2.5 fixes the issue.
We call add_etag in an app.after_request callback.
Metadata
Metadata
Assignees
Labels
No labels