summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/requirements.txt1
-rw-r--r--server/szurubooru/rest/app.py16
2 files changed, 7 insertions, 10 deletions
diff --git a/server/requirements.txt b/server/requirements.txt
index 4dd6e7b..9edee1c 100644
--- a/server/requirements.txt
+++ b/server/requirements.txt
@@ -2,6 +2,7 @@ alembic>=0.8.5
certifi>=2017.11.5
coloredlogs==5.0
heif-image-plugin==0.7.0
+multipart>=1.3.0
numpy>=1.8.2
pillow-avif-plugin~=1.5.2
pillow>=4.3.0
diff --git a/server/szurubooru/rest/app.py b/server/szurubooru/rest/app.py
index c098bd0..26bbc44 100644
--- a/server/szurubooru/rest/app.py
+++ b/server/szurubooru/rest/app.py
@@ -1,4 +1,4 @@
-import cgi
+from multipart import parse_form_data, is_form_request
import json
import re
import urllib.parse
@@ -40,15 +40,11 @@ def _create_context(env: Dict[str, Any]) -> context.Context:
files = {}
params = dict(urllib.parse.parse_qsl(env.get("QUERY_STRING", "")))
- if "multipart" in env.get("CONTENT_TYPE", ""):
- form = cgi.FieldStorage(fp=env["wsgi.input"], environ=env)
- if not form.list:
- raise errors.HttpBadRequest(
- "ValidationError", "No files attached."
- )
- body = form.getvalue("metadata")
- for key in form:
- files[key] = form.getvalue(key)
+ if is_form_request(env):
+ _, files = parse_form_data(env)
+ files = {n: f.raw for (n, f) in files.items()}
+ body = files["metadata"]
+ print(files)
else:
body = env["wsgi.input"].read()