headers.py (2524B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\wsgiref\headers.py 2 from types import ListType, TupleType 3 import re 4 tspecials = re.compile('[ \\(\\)<>@,;:\\\\"/\\[\\]\\?=]') 5 6 def _formatparam(param, value = None, quote = 1): 7 if value is not None and len(value) > 0: 8 if quote or tspecials.search(value): 9 value = value.replace('\\', '\\\\').replace('"', '\\"') 10 return '%s="%s"' % (param, value) 11 else: 12 return '%s=%s' % (param, value) 13 else: 14 return param 15 16 17 class Headers: 18 19 def __init__(self, headers): 20 if type(headers) is not ListType: 21 raise TypeError('Headers must be a list of name/value tuples') 22 self._headers = headers 23 24 def __len__(self): 25 return len(self._headers) 26 27 def __setitem__(self, name, val): 28 del self[name] 29 self._headers.append((name, val)) 30 31 def __delitem__(self, name): 32 name = name.lower() 33 self._headers[:] = [ kv for kv in self._headers if kv[0].lower() != name ] 34 35 def __getitem__(self, name): 36 return self.get(name) 37 38 def has_key(self, name): 39 return self.get(name) is not None 40 41 __contains__ = has_key 42 43 def get_all(self, name): 44 name = name.lower() 45 return [ kv[1] for kv in self._headers if kv[0].lower() == name ] 46 47 def get(self, name, default = None): 48 name = name.lower() 49 for k, v in self._headers: 50 if k.lower() == name: 51 return v 52 53 return default 54 55 def keys(self): 56 return [ k for k, v in self._headers ] 57 58 def values(self): 59 return [ v for k, v in self._headers ] 60 61 def items(self): 62 return self._headers[:] 63 64 def __repr__(self): 65 return 'Headers(%r)' % self._headers 66 67 def __str__(self): 68 return '\r\n'.join([ '%s: %s' % kv for kv in self._headers ] + ['', '']) 69 70 def setdefault(self, name, value): 71 result = self.get(name) 72 if result is None: 73 self._headers.append((name, value)) 74 return value 75 else: 76 return result 77 78 def add_header(self, _name, _value, **_params): 79 parts = [] 80 if _value is not None: 81 parts.append(_value) 82 for k, v in _params.items(): 83 if v is None: 84 parts.append(k.replace('_', '-')) 85 else: 86 parts.append(_formatparam(k.replace('_', '-'), v)) 87 88 self._headers.append((_name, '; '.join(parts)))