home *** CD-ROM | disk | FTP | other *** search
Wrap
# Source Generated with Decompyle++ # File: in.pyc (Python 2.6) from BaseHTTPServer import BaseHTTPRequestHandler response_codes = BaseHTTPRequestHandler.responses.copy() response_codes[500] = ('Internal Server Error', 'The server encountered an unexpected condition which prevented it from fulfilling the request.') response_codes[503] = ('Service Unavailable', 'The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.') import cgi import re from rfc822 import formatdate as HTTPDate def urljoin(*atoms): url = [](_[1]) while '//' in url: url = url.replace('//', '/') continue [] if not url: pass return '/' def protocol_from_http(protocol_str): return (int(protocol_str[5]), int(protocol_str[7])) def get_ranges(headervalue, content_length): if not headervalue: return None result = [] (bytesunit, byteranges) = headervalue.split('=', 1) for brange in byteranges.split(','): (start, stop) = [ x.strip() for x in brange.split('-', 1) ] if start: (start, stop) = map(int, (start, stop)) if start >= content_length: continue if stop < start: return None result.append((start, stop + 1)) continue stop < start if not stop: return None result.append((content_length - int(stop), content_length)) return result class HeaderElement(object): def __init__(self, value, params = None): self.value = value if params is None: params = { } self.params = params def __unicode__(self): p = [ ';%s=%s' % (k, v) for k, v in self.params.iteritems() ] return u'%s%s' % (self.value, ''.join(p)) def __str__(self): return str(self.__unicode__()) def parse(elementstr): atoms = _[1] initial_value = atoms.pop(0).strip() params = { } for atom in atoms: atom = _[2] key = atom.pop(0) params[key] = val return (initial_value, params) parse = staticmethod(parse) def from_str(cls, elementstr): (ival, params) = cls.parse(elementstr) return cls(ival, params) from_str = classmethod(from_str) q_separator = re.compile('; *q *=') class AcceptElement(HeaderElement): def from_str(cls, elementstr): qvalue = None atoms = q_separator.split(elementstr, 1) media_range = atoms.pop(0).strip() if atoms: qvalue = HeaderElement.from_str(atoms[0].strip()) (media_type, params) = cls.parse(media_range) if qvalue is not None: params['q'] = qvalue return cls(media_type, params) from_str = classmethod(from_str) def qvalue(self): val = self.params.get('q', '1') if isinstance(val, HeaderElement): val = val.value return float(val) qvalue = property(qvalue, doc = 'The qvalue, or priority, of this value.') def __cmp__(self, other): diff = cmp(other.qvalue, self.qvalue) if diff == 0: diff = cmp(str(other), str(self)) return diff def header_elements(fieldname, fieldvalue): if not fieldvalue: return None headername = fieldname.lower() result = [] for element in fieldvalue.split(','): if headername.startswith('accept') or headername == 'te': hv = AcceptElement.from_str(element) else: hv = HeaderElement.from_str(element) result.append(hv) result.sort() return result def decode_TEXT(value): decode_header = decode_header import email.Header atoms = decode_header(value) decodedvalue = '' for atom, charset in atoms: if charset is not None: atom = atom.decode(charset) decodedvalue += atom return decodedvalue def valid_status(status): if not status: status = 200 status = str(status) parts = status.split(' ', 1) if len(parts) == 1: (code,) = parts reason = None else: (code, reason) = parts reason = reason.strip() try: code = int(code) except ValueError: raise ValueError('Illegal response status from server (%s is non-numeric).' % repr(code)) if code < 100 or code > 599: raise ValueError('Illegal response status from server (%s is out of range).' % repr(code)) code > 599 if code not in response_codes: (default_reason, message) = ('', '') else: (default_reason, message) = response_codes[code] if reason is None: reason = default_reason return (code, reason, message) image_map_pattern = re.compile('[0-9]+,[0-9]+') def parse_query_string(query_string, keep_blank_values = True): if image_map_pattern.match(query_string): pm = query_string.split(',') pm = { 'x': int(pm[0]), 'y': int(pm[1]) } else: pm = cgi.parse_qs(query_string, keep_blank_values) for key, val in pm.items(): if len(val) == 1: pm[key] = val[0] continue return pm def params_from_CGI_form(form): params = { } for key in form.keys(): value_list = form[key] if isinstance(value_list, list): params[key] = [] for item in value_list: if item.filename is not None: value = item else: value = item.value params[key].append(value) if value_list.filename is not None: value = value_list else: value = value_list.value params[key] = value return params class CaseInsensitiveDict(dict): def __getitem__(self, key): return dict.__getitem__(self, str(key).title()) def __setitem__(self, key, value): dict.__setitem__(self, str(key).title(), value) def __delitem__(self, key): dict.__delitem__(self, str(key).title()) def __contains__(self, key): return dict.__contains__(self, str(key).title()) def get(self, key, default = None): return dict.get(self, str(key).title(), default) def has_key(self, key): return dict.has_key(self, str(key).title()) def update(self, E): for k in E.keys(): self[str(k).title()] = E[k] def fromkeys(cls, seq, value = None): newdict = cls() for k in seq: newdict[str(k).title()] = value return newdict fromkeys = classmethod(fromkeys) def setdefault(self, key, x = None): key = str(key).title() try: return self[key] except KeyError: self[key] = x return x def pop(self, key, default): return dict.pop(self, str(key).title(), default) class HeaderMap(CaseInsensitiveDict): def elements(self, key): key = str(key).title() h = self.get(key) if h is None: return [] return header_elements(key, h) def output(self, protocol = (1, 1)): header_list = [] for key, v in self.iteritems(): if isinstance(v, unicode): try: v = v.encode('iso-8859-1') except UnicodeEncodeError: if protocol >= (1, 1): Header = Header import email.Header v = Header(v, 'utf-8').encode() else: raise protocol >= (1, 1) None<EXCEPTION MATCH>UnicodeEncodeError v = str(v) header_list.append((key, v)) return header_list class Host(object): ip = '0.0.0.0' port = 80 name = 'unknown.tld' def __init__(self, ip, port, name = None): self.ip = ip self.port = port if name is None: name = ip self.name = name def __repr__(self): return 'http.Host(%r, %r, %r)' % (self.ip, self.port, self.name)