NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)))