@@ -115,7 +115,8 @@ def closelog():
115
115
# 0 ==> unlimited input
116
116
maxlen = 0
117
117
118
-
def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
118
+
def parse(fp=None, environ=os.environ, keep_blank_values=0,
119
+
strict_parsing=0, separator='&'):
119
120
"""Parse a query in the environment or from a file (default stdin)
120
121
121
122
Arguments, all optional:
@@ -134,6 +135,9 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
134
135
strict_parsing: flag indicating what to do with parsing errors.
135
136
If false (the default), errors are silently ignored.
136
137
If true, errors raise a ValueError exception.
138
+
139
+
separator: str. The symbol to use for separating the query arguments.
140
+
Defaults to &.
137
141
"""
138
142
if fp is None:
139
143
fp = sys.stdin
@@ -154,7 +158,7 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
154
158
if environ['REQUEST_METHOD'] == 'POST':
155
159
ctype, pdict = parse_header(environ['CONTENT_TYPE'])
156
160
if ctype == 'multipart/form-data':
157
-
return parse_multipart(fp, pdict)
161
+
return parse_multipart(fp, pdict, separator=separator)
158
162
elif ctype == 'application/x-www-form-urlencoded':
159
163
clength = int(environ['CONTENT_LENGTH'])
160
164
if maxlen and clength > maxlen:
@@ -178,10 +182,10 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
178
182
qs = ""
179
183
environ['QUERY_STRING'] = qs # XXX Shouldn't, really
180
184
return urllib.parse.parse_qs(qs, keep_blank_values, strict_parsing,
181
-
encoding=encoding)
185
+
encoding=encoding, separator=separator)
182
186
183
187
184
-
def parse_multipart(fp, pdict, encoding="utf-8", errors="replace"):
188
+
def parse_multipart(fp, pdict, encoding="utf-8", errors="replace", separator='&'):
185
189
"""Parse multipart input.
186
190
187
191
Arguments:
@@ -205,7 +209,7 @@ def parse_multipart(fp, pdict, encoding="utf-8", errors="replace"):
205
209
except KeyError:
206
210
pass
207
211
fs = FieldStorage(fp, headers=headers, encoding=encoding, errors=errors,
208
-
environ={'REQUEST_METHOD': 'POST'})
212
+
environ={'REQUEST_METHOD': 'POST'}, separator=separator)
209
213
return {k: fs.getlist(k) for k in fs}
210
214
211
215
def _parseparam(s):
@@ -315,7 +319,7 @@ class FieldStorage:
315
319
def __init__(self, fp=None, headers=None, outerboundary=b'',
316
320
environ=os.environ, keep_blank_values=0, strict_parsing=0,
317
321
limit=None, encoding='utf-8', errors='replace',
318
-
max_num_fields=None):
322
+
max_num_fields=None, separator='&'):
319
323
"""Constructor. Read multipart/* until last part.
320
324
321
325
Arguments, all optional:
@@ -363,6 +367,7 @@ def __init__(self, fp=None, headers=None, outerboundary=b'',
363
367
self.keep_blank_values = keep_blank_values
364
368
self.strict_parsing = strict_parsing
365
369
self.max_num_fields = max_num_fields
370
+
self.separator = separator
366
371
if 'REQUEST_METHOD' in environ:
367
372
method = environ['REQUEST_METHOD'].upper()
368
373
self.qs_on_post = None
@@ -589,7 +594,7 @@ def read_urlencoded(self):
589
594
query = urllib.parse.parse_qsl(
590
595
qs, self.keep_blank_values, self.strict_parsing,
591
596
encoding=self.encoding, errors=self.errors,
592
-
max_num_fields=self.max_num_fields)
597
+
max_num_fields=self.max_num_fields, separator=self.separator)
593
598
self.list = [MiniFieldStorage(key, value) for key, value in query]
594
599
self.skip_lines()
595
600
@@ -605,7 +610,7 @@ def read_multi(self, environ, keep_blank_values, strict_parsing):
605
610
query = urllib.parse.parse_qsl(
606
611
self.qs_on_post, self.keep_blank_values, self.strict_parsing,
607
612
encoding=self.encoding, errors=self.errors,
608
-
max_num_fields=self.max_num_fields)
613
+
max_num_fields=self.max_num_fields, separator=self.separator)
609
614
self.list.extend(MiniFieldStorage(key, value) for key, value in query)
610
615
611
616
klass = self.FieldStorageClass or self.__class__
@@ -649,7 +654,7 @@ def read_multi(self, environ, keep_blank_values, strict_parsing):
649
654
else self.limit - self.bytes_read
650
655
part = klass(self.fp, headers, ib, environ, keep_blank_values,
651
656
strict_parsing, limit,
652
-
self.encoding, self.errors, max_num_fields)
657
+
self.encoding, self.errors, max_num_fields, self.separator)
653
658
654
659
if max_num_fields is not None:
655
660
max_num_fields -= 1
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4