@@ -130,7 +130,7 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
130130 """
131131 if fp is None :
132132 fp = sys .stdin
133- if not environ . has_key ( 'REQUEST_METHOD' ) :
133+ if not 'REQUEST_METHOD' in environ :
134134 environ ['REQUEST_METHOD' ] = 'GET' # For testing stand-alone
135135 if environ ['REQUEST_METHOD' ] == 'POST' :
136136 ctype , pdict = parse_header (environ ['CONTENT_TYPE' ])
@@ -143,14 +143,14 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0):
143143 qs = fp .read (clength )
144144 else :
145145 qs = '' # Unknown content-type
146- if environ . has_key ( 'QUERY_STRING' ) :
146+ if 'QUERY_STRING' in environ :
147147 if qs : qs = qs + '&'
148148 qs = qs + environ ['QUERY_STRING' ]
149149 elif sys .argv [1 :]:
150150 if qs : qs = qs + '&'
151151 qs = qs + sys .argv [1 ]
152152 environ ['QUERY_STRING' ] = qs # XXX Shouldn't, really
153- elif environ . has_key ( 'QUERY_STRING' ) :
153+ elif 'QUERY_STRING' in environ :
154154 qs = environ ['QUERY_STRING' ]
155155 else :
156156 if sys .argv [1 :]:
@@ -181,7 +181,7 @@ def parse_qs(qs, keep_blank_values=0, strict_parsing=0):
181181 """
182182 dict = {}
183183 for name , value in parse_qsl (qs , keep_blank_values , strict_parsing ):
184- if dict . has_key ( name ) :
184+ if name in dict :
185185 dict [name ].append (value )
186186 else :
187187 dict [name ] = [value ]
@@ -244,7 +244,7 @@ def parse_multipart(fp, pdict):
244244
245245 """
246246 boundary = ""
247- if pdict . has_key ( 'boundary' ) :
247+ if 'boundary' in pdict :
248248 boundary = pdict ['boundary' ]
249249 if not valid_boundary (boundary ):
250250 raise ValueError , ('Invalid boundary in multipart form: %s'
@@ -304,11 +304,11 @@ def parse_multipart(fp, pdict):
304304 key , params = parse_header (line )
305305 if key != 'form-data' :
306306 continue
307- if params . has_key ( 'name' ) :
307+ if 'name' in params :
308308 name = params ['name' ]
309309 else :
310310 continue
311- if partdict . has_key ( name ) :
311+ if name in partdict :
312312 partdict [name ].append (data )
313313 else :
314314 partdict [name ] = [data ]
@@ -440,10 +440,10 @@ def __init__(self, fp=None, headers=None, outerboundary="",
440440 method = 'GET'
441441 self .keep_blank_values = keep_blank_values
442442 self .strict_parsing = strict_parsing
443- if environ . has_key ( 'REQUEST_METHOD' ) :
443+ if 'REQUEST_METHOD' in environ :
444444 method = environ ['REQUEST_METHOD' ].upper ()
445445 if method == 'GET' or method == 'HEAD' :
446- if environ . has_key ( 'QUERY_STRING' ) :
446+ if 'QUERY_STRING' in environ :
447447 qs = environ ['QUERY_STRING' ]
448448 elif sys .argv [1 :]:
449449 qs = sys .argv [1 ]
@@ -458,25 +458,25 @@ def __init__(self, fp=None, headers=None, outerboundary="",
458458 if method == 'POST' :
459459 # Set default content-type for POST to what's traditional
460460 headers ['content-type' ] = "application/x-www-form-urlencoded"
461- if environ . has_key ( 'CONTENT_TYPE' ) :
461+ if 'CONTENT_TYPE' in environ :
462462 headers ['content-type' ] = environ ['CONTENT_TYPE' ]
463- if environ . has_key ( 'CONTENT_LENGTH' ) :
463+ if 'CONTENT_LENGTH' in environ :
464464 headers ['content-length' ] = environ ['CONTENT_LENGTH' ]
465465 self .fp = fp or sys .stdin
466466 self .headers = headers
467467 self .outerboundary = outerboundary
468468
469469 # Process content-disposition header
470470 cdisp , pdict = "" , {}
471- if self . headers . has_key ( 'content-disposition' ) :
471+ if 'content-disposition' in self . headers :
472472 cdisp , pdict = parse_header (self .headers ['content-disposition' ])
473473 self .disposition = cdisp
474474 self .disposition_options = pdict
475475 self .name = None
476- if pdict . has_key ( 'name' ) :
476+ if 'name' in pdict :
477477 self .name = pdict ['name' ]
478478 self .filename = None
479- if pdict . has_key ( 'filename' ) :
479+ if 'filename' in pdict :
480480 self .filename = pdict ['filename' ]
481481
482482 # Process content-type header
@@ -491,7 +491,7 @@ def __init__(self, fp=None, headers=None, outerboundary="",
491491 #
492492 # See below for what we do if there does exist a content-type header,
493493 # but it happens to be something we don't understand.
494- if self . headers . has_key ( 'content-type' ) :
494+ if 'content-type' in self . headers :
495495 ctype , pdict = parse_header (self .headers ['content-type' ])
496496 elif self .outerboundary or method != 'POST' :
497497 ctype , pdict = "text/plain" , {}
@@ -500,10 +500,10 @@ def __init__(self, fp=None, headers=None, outerboundary="",
500500 self .type = ctype
501501 self .type_options = pdict
502502 self .innerboundary = ""
503- if pdict . has_key ( 'boundary' ) :
503+ if 'boundary' in pdict :
504504 self .innerboundary = pdict ['boundary' ]
505505 clen = - 1
506- if self . headers . has_key ( 'content-length' ) :
506+ if 'content-length' in self . headers :
507507 try :
508508 clen = int (self .headers ['content-length' ])
509509 except ValueError :
@@ -555,7 +555,7 @@ def __getitem__(self, key):
555555
556556 def getvalue (self , key , default = None ):
557557 """Dictionary style get() method, including 'value' lookup."""
558- if self . has_key ( key ) :
558+ if key in self :
559559 value = self [key ]
560560 if type (value ) is type ([]):
561561 return map (lambda v : v .value , value )
@@ -566,7 +566,7 @@ def getvalue(self, key, default=None):
566566
567567 def getfirst (self , key , default = None ):
568568 """ Return the first value received."""
569- if self . has_key ( key ) :
569+ if key in self :
570570 value = self [key ]
571571 if type (value ) is type ([]):
572572 return value [0 ].value
@@ -577,7 +577,7 @@ def getfirst(self, key, default=None):
577577
578578 def getlist (self , key ):
579579 """ Return list of received values."""
580- if self . has_key ( key ) :
580+ if key in self :
581581 value = self [key ]
582582 if type (value ) is type ([]):
583583 return map (lambda v : v .value , value )
@@ -603,6 +603,14 @@ def has_key(self, key):
603603 if item .name == key : return True
604604 return False
605605
606+ def __contains__ (self , key ):
607+ """Dictionary style __contains__ method."""
608+ if self .list is None :
609+ raise TypeError , "not indexable"
610+ for item in self .list :
611+ if item .name == key : return True
612+ return False
613+
606614 def __len__ (self ):
607615 """Dictionary style len(x) support."""
608616 return len (self .keys ())
@@ -770,7 +778,7 @@ class FormContentDict(UserDict.UserDict):
770778 form = FormContentDict()
771779
772780 form[key] -> [value, value, ...]
773- form.has_key( key) -> Boolean
781+ key in form -> Boolean
774782 form.keys() -> [key, key, ...]
775783 form.values() -> [[val, val, ...], [val, val, ...], ...]
776784 form.items() -> [(key, [val, val, ...]), (key, [val, val, ...]), ...]
@@ -847,21 +855,21 @@ def items(self):
847855class FormContent (FormContentDict ):
848856 """This class is present for backwards compatibility only."""
849857 def values (self , key ):
850- if self .dict . has_key ( key ) :return self .dict [key ]
858+ if key in self .dict :return self .dict [key ]
851859 else : return None
852860 def indexed_value (self , key , location ):
853- if self .dict . has_key ( key ) :
861+ if key in self .dict :
854862 if len (self .dict [key ]) > location :
855863 return self .dict [key ][location ]
856864 else : return None
857865 else : return None
858866 def value (self , key ):
859- if self .dict . has_key ( key ) : return self .dict [key ][0 ]
867+ if key in self .dict : return self .dict [key ][0 ]
860868 else : return None
861869 def length (self , key ):
862870 return len (self .dict [key ])
863871 def stripped (self , key ):
864- if self .dict . has_key ( key ) : return self .dict [key ][0 ].strip ()
872+ if key in self .dict : return self .dict [key ][0 ].strip ()
865873 else : return None
866874 def pars (self ):
867875 return self .dict
0 commit comments