home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2848 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.9 KB  |  144 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
  5. import urllib
  6. import sys
  7. from wsgiref.handlers import SimpleHandler
  8. __version__ = '0.1'
  9. __all__ = [
  10.     'WSGIServer',
  11.     'WSGIRequestHandler',
  12.     'demo_app',
  13.     'make_server']
  14. server_version = 'WSGIServer/' + __version__
  15. sys_version = 'Python/' + sys.version.split()[0]
  16. software_version = server_version + ' ' + sys_version
  17.  
  18. class ServerHandler(SimpleHandler):
  19.     server_software = software_version
  20.     
  21.     def close(self):
  22.         
  23.         try:
  24.             self.request_handler.log_request(self.status.split(' ', 1)[0], self.bytes_sent)
  25.         finally:
  26.             SimpleHandler.close(self)
  27.  
  28.  
  29.  
  30.  
  31. class WSGIServer(HTTPServer):
  32.     application = None
  33.     
  34.     def server_bind(self):
  35.         HTTPServer.server_bind(self)
  36.         self.setup_environ()
  37.  
  38.     
  39.     def setup_environ(self):
  40.         env = self.base_environ = { }
  41.         env['SERVER_NAME'] = self.server_name
  42.         env['GATEWAY_INTERFACE'] = 'CGI/1.1'
  43.         env['SERVER_PORT'] = str(self.server_port)
  44.         env['REMOTE_HOST'] = ''
  45.         env['CONTENT_LENGTH'] = ''
  46.         env['SCRIPT_NAME'] = ''
  47.  
  48.     
  49.     def get_app(self):
  50.         return self.application
  51.  
  52.     
  53.     def set_app(self, application):
  54.         self.application = application
  55.  
  56.  
  57.  
  58. class WSGIRequestHandler(BaseHTTPRequestHandler):
  59.     server_version = 'WSGIServer/' + __version__
  60.     
  61.     def get_environ(self):
  62.         env = self.server.base_environ.copy()
  63.         env['SERVER_PROTOCOL'] = self.request_version
  64.         env['REQUEST_METHOD'] = self.command
  65.         if '?' in self.path:
  66.             (path, query) = self.path.split('?', 1)
  67.         else:
  68.             path = self.path
  69.             query = ''
  70.         env['PATH_INFO'] = urllib.unquote(path)
  71.         env['QUERY_STRING'] = query
  72.         host = self.address_string()
  73.         if host != self.client_address[0]:
  74.             env['REMOTE_HOST'] = host
  75.         
  76.         env['REMOTE_ADDR'] = self.client_address[0]
  77.         if self.headers.typeheader is None:
  78.             env['CONTENT_TYPE'] = self.headers.type
  79.         else:
  80.             env['CONTENT_TYPE'] = self.headers.typeheader
  81.         length = self.headers.getheader('content-length')
  82.         if length:
  83.             env['CONTENT_LENGTH'] = length
  84.         
  85.         for h in self.headers.headers:
  86.             (k, v) = h.split(':', 1)
  87.             k = k.replace('-', '_').upper()
  88.             v = v.strip()
  89.             if k in env:
  90.                 continue
  91.             
  92.             if 'HTTP_' + k in env:
  93.                 env['HTTP_' + k] += ',' + v
  94.                 continue
  95.             env['HTTP_' + k] = v
  96.         
  97.         return env
  98.  
  99.     
  100.     def get_stderr(self):
  101.         return sys.stderr
  102.  
  103.     
  104.     def handle(self):
  105.         self.raw_requestline = self.rfile.readline()
  106.         if not self.parse_request():
  107.             return None
  108.         handler = ServerHandler(self.rfile, self.wfile, self.get_stderr(), self.get_environ())
  109.         handler.request_handler = self
  110.         handler.run(self.server.get_app())
  111.  
  112.  
  113.  
  114. def demo_app(environ, start_response):
  115.     StringIO = StringIO
  116.     import StringIO
  117.     stdout = StringIO()
  118.     print >>stdout, 'Hello world!'
  119.     print >>stdout
  120.     h = environ.items()
  121.     h.sort()
  122.     for k, v in h:
  123.         print >>stdout, k, '=', repr(v)
  124.     
  125.     start_response('200 OK', [
  126.         ('Content-Type', 'text/plain')])
  127.     return [
  128.         stdout.getvalue()]
  129.  
  130.  
  131. def make_server(host, port, app, server_class = WSGIServer, handler_class = WSGIRequestHandler):
  132.     server = server_class((host, port), handler_class)
  133.     server.set_app(app)
  134.     return server
  135.  
  136. if __name__ == '__main__':
  137.     httpd = make_server('', 8000, demo_app)
  138.     sa = httpd.socket.getsockname()
  139.     print 'Serving HTTP on', sa[0], 'port', sa[1], '...'
  140.     import webbrowser
  141.     webbrowser.open('http://localhost:8000/xyz?abc')
  142.     httpd.handle_request()
  143.  
  144.