Revert "Upgrade to quart 0.15"

This reverts commit 486596f89f.
It was discovered that multipart/form-data forms do not work
correctly with Quart 0.15. The upgrade to Quart 0.15 was rushed
and not tested correctly, which I apologize for.

See-Also: https://github.com/pgjones/quart/issues/126
This commit is contained in:
Jonas Schäfer
2021-05-22 11:10:42 +02:00
parent 7f02746f63
commit b007afc901
6 changed files with 17 additions and 21 deletions

View File

@@ -1,5 +1,5 @@
aiohttp~=3.6 aiohttp~=3.6
quart~=0.15 quart~=0.11
flask-wtf~=0.14 flask-wtf~=0.14
hsluv~=0.0.2 hsluv~=0.0.2
flask-babel~=1.0 flask-babel~=1.0

View File

@@ -17,7 +17,6 @@ from quart import (
redirect, redirect,
jsonify, jsonify,
) )
import werkzeug.exceptions
import environ import environ
@@ -41,7 +40,7 @@ async def proc() -> typing.Dict[str, typing.Any]:
try: try:
user_info = await infra.client.get_user_info() user_info = await infra.client.get_user_info()
except (aiohttp.ClientError, werkzeug.exceptions.HTTPException): except (aiohttp.ClientError, quart.exceptions.HTTPException):
user_info = {} user_info = {}
return { return {
@@ -106,16 +105,16 @@ async def backend_error_handler(exc: Exception) -> quart.Response:
async def generic_http_error( async def generic_http_error(
exc: werkzeug.exceptions.HTTPException, exc: quart.exceptions.HTTPException,
) -> quart.Response: ) -> quart.Response:
return quart.Response( return quart.Response(
await render_template( await render_template(
"generic_http_error.html", "generic_http_error.html",
status=exc.code, status=exc.status_code,
description=exc.description, description=exc.description,
name=exc.name, name=exc.name,
), ),
status=exc.code, status=exc.status_code,
) )
@@ -199,7 +198,7 @@ def create_app() -> quart.Quart:
backend_error_handler, backend_error_handler,
) )
app.register_error_handler( app.register_error_handler(
werkzeug.exceptions.HTTPException, quart.exceptions.HTTPException,
generic_http_error, generic_http_error,
) )
app.register_error_handler( app.register_error_handler(

View File

@@ -17,7 +17,6 @@ from quart import (
Response, Response,
flash, flash,
) )
import werkzeug.exceptions
import babel import babel
import wtforms import wtforms
@@ -77,7 +76,7 @@ async def login() -> typing.Union[str, quart.Response]:
password = form.password.data password = form.password.data
try: try:
await client.login(jid, password) await client.login(jid, password)
except werkzeug.exceptions.Unauthorized: except quart.exceptions.Unauthorized:
form.password.errors.append(ERR_CREDENTIALS_INVALID) form.password.errors.append(ERR_CREDENTIALS_INVALID)
else: else:
await flash( await flash(
@@ -103,7 +102,7 @@ async def about() -> str:
extra_versions["flask-wtf"] = flask_wtf.__version__ extra_versions["flask-wtf"] = flask_wtf.__version__
try: try:
extra_versions["Prosody"] = await client.get_server_version() extra_versions["Prosody"] = await client.get_server_version()
except werkzeug.exceptions.Unauthorized: except quart.exceptions.Unauthorized:
extra_versions["Prosody"] = "unknown" extra_versions["Prosody"] = "unknown"
return await render_template( return await render_template(

View File

@@ -19,8 +19,7 @@ from quart import (
current_app, _app_ctx_stack, session as http_session, abort, redirect, current_app, _app_ctx_stack, session as http_session, abort, redirect,
url_for, url_for,
) )
import werkzeug.exceptions import quart.exceptions
import quart
from . import xmpputil from . import xmpputil
from .xmpputil import split_jid from .xmpputil import split_jid
@@ -491,7 +490,7 @@ class ProsodyClient:
session=session, session=session,
) )
avatar_hash = avatar_info["sha1"] avatar_hash = avatar_info["sha1"]
except werkzeug.exceptions.HTTPException: except quart.exceptions.HTTPException:
avatar_hash = None avatar_hash = None
return { return {
@@ -643,7 +642,7 @@ class ProsodyClient:
new_access_model, new_access_model,
) )
)) ))
except werkzeug.exceptions.NotFound: except quart.exceptions.NotFound:
if ignore_not_found: if ignore_not_found:
return return
raise raise
@@ -773,7 +772,7 @@ class ProsodyClient:
session: aiohttp.ClientSession, session: aiohttp.ClientSession,
) -> str: ) -> str:
access_models = filter( access_models = filter(
lambda x: not isinstance(x, werkzeug.exceptions.NotFound), lambda x: not isinstance(x, quart.exceptions.NotFound),
await asyncio.gather( await asyncio.gather(
self.get_avatar_access_model(session=session), self.get_avatar_access_model(session=session),
self.get_nickname_access_model(session=session), self.get_nickname_access_model(session=session),

View File

@@ -1,7 +1,6 @@
import asyncio import asyncio
import typing import typing
import quart
import quart.flask_patch import quart.flask_patch
from quart import ( from quart import (
Blueprint, Blueprint,
@@ -12,7 +11,7 @@ from quart import (
flash, flash,
current_app, current_app,
) )
import werkzeug.exceptions import quart.exceptions
import wtforms import wtforms
@@ -93,8 +92,8 @@ async def change_pw() -> typing.Union[str, quart.Response]:
form.current_password.data, form.current_password.data,
form.new_password.data, form.new_password.data,
) )
except (werkzeug.exceptions.Unauthorized, except (quart.exceptions.Unauthorized,
werkzeug.exceptions.Forbidden): quart.exceptions.Forbidden):
# server refused current password, set an appropriate error # server refused current password, set an appropriate error
form.current_password.errors.append( form.current_password.errors.append(
_("Incorrect password."), _("Incorrect password."),

View File

@@ -4,7 +4,7 @@ import typing
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from quart import abort from quart import abort
import werkzeug.exceptions import quart.exceptions
TAG_XMPP_ERROR = "error" TAG_XMPP_ERROR = "error"
@@ -234,7 +234,7 @@ def extract_pubsub_item_get_reply(
) -> typing.Optional[ET.Element]: ) -> typing.Optional[ET.Element]:
try: try:
pubsub = extract_iq_reply(iq_tree, TAG_PUBSUB) pubsub = extract_iq_reply(iq_tree, TAG_PUBSUB)
except werkzeug.exceptions.NotFound: except quart.exceptions.NotFound:
return None return None
if pubsub is None: if pubsub is None: