]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
pytests: Use python3-multipart lib.
authorYann Ylavic <ylavic@apache.org>
Mon, 20 Mar 2023 15:02:13 +0000 (15:02 +0000)
committerYann Ylavic <ylavic@apache.org>
Mon, 20 Mar 2023 15:02:13 +0000 (15:02 +0000)
Use the API of https://github.com/andrew-d/python-multipart, available as
package python3-multipart on Debian/Ubuntu.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1908574 13f79535-47bb-0310-9956-ffa450edef68

test/modules/http1/htdocs/cgi/upload.py
test/modules/http2/htdocs/cgi/echohd.py
test/modules/http2/htdocs/cgi/env.py
test/modules/http2/htdocs/cgi/hecho.py
test/modules/http2/htdocs/cgi/mnot164.py
test/modules/http2/htdocs/cgi/necho.py
test/modules/http2/htdocs/cgi/upload.py
test/modules/tls/htdocs/a.mod-tls.test/vars.py
test/modules/tls/htdocs/b.mod-tls.test/vars.py

index 7dfc8eabbafcf782937fa36888fbba88fdb6763c..0bdcbb8a6aa179fe365e82f4138210115ee0119b 100755 (executable)
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 import os
 import sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 try:  # Windows needs stdio set for binary mode.
@@ -16,15 +16,23 @@ except ImportError:
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index 2a138cd844b4c585afa5cd49b0a766fadde0bb19..591d30795a09d33016cb7aab8d27d88718c4aa59 100644 (file)
@@ -1,20 +1,28 @@
 #!/usr/bin/env python3
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index 3af576496a4440d9bb16f3597ee5c2b258d5ed10..f07079d746fb753ab7832f2e04efa0a6bc115baf 100644 (file)
@@ -1,20 +1,28 @@
 #!/usr/bin/env python3
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index fb9e330b600f2c792b902d039b4e919d919bbdb9..1c11e87bda7518fcded7d3d9dd6bacec636bbf0e 100644 (file)
@@ -1,20 +1,28 @@
 #!/usr/bin/env python3
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index c29ccc185b106dcfb821528d0d76772f6542e64d..b365f1f5c9ef179274c7816080d28158873822ec 100644 (file)
@@ -1,20 +1,28 @@
 #!/usr/bin/env python3
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index 78e2aad302960e8379653c02ec47cb8ae11a6264..c32106a952ef62d5abd014258dea9b45a0843764 100644 (file)
@@ -1,21 +1,29 @@
 #!/usr/bin/env python3
 import time
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index 59fbb5866d18f2041f66dcdb1d0b4b72ecf7017c..e7b8f8b1e86a761b6b597d7ce501fd1ad0cf8488 100644 (file)
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 import os
 import sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 try:  # Windows needs stdio set for binary mode.
@@ -15,15 +15,23 @@ except ImportError:
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index f41ec6a5e8aaa960c075087ccd312a370d36a62e..bd520e27bb760853fd0d6401cf21a1a4f3b25b54 100755 (executable)
@@ -1,21 +1,29 @@
 #!/usr/bin/env python3
 import json
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles
 
 
index f41ec6a5e8aaa960c075087ccd312a370d36a62e..bd520e27bb760853fd0d6401cf21a1a4f3b25b54 100755 (executable)
@@ -1,21 +1,29 @@
 #!/usr/bin/env python3
 import json
 import os, sys
-import multipart
 from urllib import parse
+import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
 
 
 def get_request_params():
     oforms = {}
+    ofiles = {}
     if "REQUEST_URI" in os.environ:
         qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
         for name, values in qforms.items():
             oforms[name] = values[0]
-    myenv = os.environ.copy()
-    myenv['wsgi.input'] = sys.stdin.buffer
-    mforms, ofiles = multipart.parse_form_data(environ=myenv)
-    for name, item in mforms.items():
-        oforms[name] = item
+    if "HTTP_CONTENT_TYPE" in os.environ:
+        ctype = os.environ["HTTP_CONTENT_TYPE"]
+        if ctype == "application/x-www-form-urlencoded":
+            qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
+            for name, values in qforms.items():
+                oforms[name] = values[0]
+        elif ctype.startswith("multipart/"):
+            def on_field(field):
+                oforms[field.field_name] = field.value
+            def on_file(file):
+                ofiles[field.field_name] = field.value
+            multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
     return oforms, ofiles