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

util.py (3764B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\wsgiref\util.py
      2 import posixpath
      3 __all__ = ['FileWrapper',
      4  'guess_scheme',
      5  'application_uri',
      6  'request_uri',
      7  'shift_path_info',
      8  'setup_testing_defaults']
      9 
     10 class FileWrapper:
     11 
     12     def __init__(self, filelike, blksize = 8192):
     13         self.filelike = filelike
     14         self.blksize = blksize
     15         if hasattr(filelike, 'close'):
     16             self.close = filelike.close
     17 
     18     def __getitem__(self, key):
     19         data = self.filelike.read(self.blksize)
     20         if data:
     21             return data
     22         raise IndexError
     23 
     24     def __iter__(self):
     25         return self
     26 
     27     def next(self):
     28         data = self.filelike.read(self.blksize)
     29         if data:
     30             return data
     31         raise StopIteration
     32 
     33 
     34 def guess_scheme(environ):
     35     if environ.get('HTTPS') in ('yes', 'on', '1'):
     36         return 'https'
     37     else:
     38         return 'http'
     39 
     40 
     41 def application_uri(environ):
     42     url = environ['wsgi.url_scheme'] + '://'
     43     from urllib import quote
     44     if environ.get('HTTP_HOST'):
     45         url += environ['HTTP_HOST']
     46     else:
     47         url += environ['SERVER_NAME']
     48         if environ['wsgi.url_scheme'] == 'https':
     49             if environ['SERVER_PORT'] != '443':
     50                 url += ':' + environ['SERVER_PORT']
     51         elif environ['SERVER_PORT'] != '80':
     52             url += ':' + environ['SERVER_PORT']
     53     url += quote(environ.get('SCRIPT_NAME') or '/')
     54     return url
     55 
     56 
     57 def request_uri(environ, include_query = 1):
     58     url = application_uri(environ)
     59     from urllib import quote
     60     path_info = quote(environ.get('PATH_INFO', ''))
     61     if not environ.get('SCRIPT_NAME'):
     62         url += path_info[1:]
     63     else:
     64         url += path_info
     65     if include_query and environ.get('QUERY_STRING'):
     66         url += '?' + environ['QUERY_STRING']
     67     return url
     68 
     69 
     70 def shift_path_info(environ):
     71     path_info = environ.get('PATH_INFO', '')
     72     if not path_info:
     73         return
     74     path_parts = path_info.split('/')
     75     path_parts[1:-1] = [ p for p in path_parts[1:-1] if p and p != '.' ]
     76     name = path_parts[1]
     77     del path_parts[1]
     78     script_name = environ.get('SCRIPT_NAME', '')
     79     script_name = posixpath.normpath(script_name + '/' + name)
     80     if script_name.endswith('/'):
     81         script_name = script_name[:-1]
     82     if not name and not script_name.endswith('/'):
     83         script_name += '/'
     84     environ['SCRIPT_NAME'] = script_name
     85     environ['PATH_INFO'] = '/'.join(path_parts)
     86     if name == '.':
     87         name = None
     88     return name
     89 
     90 
     91 def setup_testing_defaults(environ):
     92     environ.setdefault('SERVER_NAME', '127.0.0.1')
     93     environ.setdefault('SERVER_PROTOCOL', 'HTTP/1.0')
     94     environ.setdefault('HTTP_HOST', environ['SERVER_NAME'])
     95     environ.setdefault('REQUEST_METHOD', 'GET')
     96     if 'SCRIPT_NAME' not in environ and 'PATH_INFO' not in environ:
     97         environ.setdefault('SCRIPT_NAME', '')
     98         environ.setdefault('PATH_INFO', '/')
     99     environ.setdefault('wsgi.version', (1, 0))
    100     environ.setdefault('wsgi.run_once', 0)
    101     environ.setdefault('wsgi.multithread', 0)
    102     environ.setdefault('wsgi.multiprocess', 0)
    103     from StringIO import StringIO
    104     environ.setdefault('wsgi.input', StringIO(''))
    105     environ.setdefault('wsgi.errors', StringIO())
    106     environ.setdefault('wsgi.url_scheme', guess_scheme(environ))
    107     if environ['wsgi.url_scheme'] == 'http':
    108         environ.setdefault('SERVER_PORT', '80')
    109     elif environ['wsgi.url_scheme'] == 'https':
    110         environ.setdefault('SERVER_PORT', '443')
    111 
    112 
    113 _hoppish = {'connection': 1,
    114  'keep-alive': 1,
    115  'proxy-authenticate': 1,
    116  'proxy-authorization': 1,
    117  'te': 1,
    118  'trailers': 1,
    119  'transfer-encoding': 1,
    120  'upgrade': 1}.__contains__
    121 
    122 def is_hop_by_hop(header_name):
    123     return _hoppish(header_name.lower())