@@ -117,7 +117,8 @@ def closelog():
117
117
# 0 ==> unlimited input
118
118
maxlen = 0
119
119
120
- def parse (fp = None , environ = os .environ , keep_blank_values = 0 , strict_parsing = 0 ):
120
+ def parse (fp = None , environ = os .environ , keep_blank_values = 0 ,
121
+ strict_parsing = 0 , separator = '&' ):
121
122
"""Parse a query in the environment or from a file (default stdin)
122
123
123
124
Arguments, all optional:
@@ -136,6 +137,9 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
136
137
strict_parsing: flag indicating what to do with parsing errors.
137
138
If false (the default), errors are silently ignored.
138
139
If true, errors raise a ValueError exception.
140
+
141
+ separator: str. The symbol to use for separating the query arguments.
142
+ Defaults to &.
139
143
"""
140
144
if fp is None :
141
145
fp = sys .stdin
@@ -180,7 +184,7 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
180
184
qs = ""
181
185
environ ['QUERY_STRING' ] = qs # XXX Shouldn't, really
182
186
return urllib .parse .parse_qs (qs , keep_blank_values , strict_parsing ,
183
- encoding = encoding )
187
+ encoding = encoding , separator = separator )
184
188
185
189
186
190
# parse query string function called from urlparse,
@@ -405,7 +409,7 @@ class FieldStorage:
405
409
def __init__ (self , fp = None , headers = None , outerboundary = b'' ,
406
410
environ = os .environ , keep_blank_values = 0 , strict_parsing = 0 ,
407
411
limit = None , encoding = 'utf-8' , errors = 'replace' ,
408
- max_num_fields = None ):
412
+ max_num_fields = None , separator = '&' ):
409
413
"""Constructor. Read multipart/* until last part.
410
414
411
415
Arguments, all optional:
@@ -453,6 +457,7 @@ def __init__(self, fp=None, headers=None, outerboundary=b'',
453
457
self .keep_blank_values = keep_blank_values
454
458
self .strict_parsing = strict_parsing
455
459
self .max_num_fields = max_num_fields
460
+ self .separator = separator
456
461
if 'REQUEST_METHOD' in environ :
457
462
method = environ ['REQUEST_METHOD' ].upper ()
458
463
self .qs_on_post = None
@@ -678,7 +683,7 @@ def read_urlencoded(self):
678
683
query = urllib .parse .parse_qsl (
679
684
qs , self .keep_blank_values , self .strict_parsing ,
680
685
encoding = self .encoding , errors = self .errors ,
681
- max_num_fields = self .max_num_fields )
686
+ max_num_fields = self .max_num_fields , separator = self . separator )
682
687
self .list = [MiniFieldStorage (key , value ) for key , value in query ]
683
688
self .skip_lines ()
684
689
@@ -694,7 +699,7 @@ def read_multi(self, environ, keep_blank_values, strict_parsing):
694
699
query = urllib .parse .parse_qsl (
695
700
self .qs_on_post , self .keep_blank_values , self .strict_parsing ,
696
701
encoding = self .encoding , errors = self .errors ,
697
- max_num_fields = self .max_num_fields )
702
+ max_num_fields = self .max_num_fields , separator = self . separator )
698
703
self .list .extend (MiniFieldStorage (key , value ) for key , value in query )
699
704
700
705
klass = self .FieldStorageClass or self .__class__
@@ -736,7 +741,7 @@ def read_multi(self, environ, keep_blank_values, strict_parsing):
736
741
737
742
part = klass (self .fp , headers , ib , environ , keep_blank_values ,
738
743
strict_parsing ,self .limit - self .bytes_read ,
739
- self .encoding , self .errors , max_num_fields )
744
+ self .encoding , self .errors , max_num_fields , self . separator )
740
745
741
746
if max_num_fields is not None :
742
747
max_num_fields -= 1
0 commit comments