Changeset 32:0bd397459063

Show
Ignore:
Timestamp:
02/23/06 16:16:01 (2 years ago)
Author:
Allan Saddi <allan@saddi.com>
branch:
default
convert_revision:
svn:46762da8-4eb7-0310-94e9-d918b60927c8/flup/trunk@1839
Message:

Add paste.server_factory-compliant factories and respective
egg entry points. Add debug option to servers, which is True
by default.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ChangeLog

    r31 r32  
     12006-02-23  Allan Saddi  <asaddi@kalahari.flup.org> 
     2 
     3        * Add paste.server_factory-compliant factories and respective 
     4          egg entry points. Thanks to Luis Bruno for the code. 
     5 
     6          Add debug option to servers, which is True by default. 
     7          Currently, only server-level error handling is affected. 
     8         
    192006-01-15  Allan Saddi  <asaddi@ganymede.saddi.net> 
    210 
  • flup/server/ajp.py

    r16 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    104104                 multithreaded=True, multiprocess=False, 
    105105                 bindAddress=('localhost', 8009), allowedServers=None, 
    106                  loggingLevel=logging.INFO, **kw): 
     106                 loggingLevel=logging.INFO, debug=True, **kw): 
    107107        """ 
    108108        scriptName is the initial portion of the URL path that "belongs" 
     
    132132                               bindAddress=bindAddress, 
    133133                               allowedServers=allowedServers, 
    134                                loggingLevel=loggingLevel) 
     134                               loggingLevel=loggingLevel, 
     135                               debug=debug) 
    135136        for key in ('jobClass', 'jobArgs'): 
    136137            if kw.has_key(key): 
     
    161162 
    162163        return ret 
     164 
     165def factory(global_conf, host=None, port=None, **local): 
     166    import paste_factory 
     167    return paste_factory.helper(WSGIServer, global_conf, host, port, **local) 
    163168 
    164169if __name__ == '__main__': 
  • flup/server/ajp_base.py

    r17 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    755755                 multithreaded=True, multiprocess=False, 
    756756                 bindAddress=('localhost', 8009), allowedServers=NoDefault, 
    757                  loggingLevel=logging.INFO): 
     757                 loggingLevel=logging.INFO, debug=True): 
    758758        """ 
    759759        scriptName is the initial portion of the URL path that "belongs" 
     
    790790        self.multithreaded = multithreaded 
    791791        self.multiprocess = multiprocess 
     792        self.debug = debug 
    792793        self._bindAddress = bindAddress 
    793794        if allowedServers is NoDefault: 
     
    927928        all errors should be caught at the application level. 
    928929        """ 
    929         request.startResponse(200, 'OK', [('Content-Type', 'text/html')]) 
    930         import cgitb 
    931         request.write(cgitb.html(sys.exc_info())) 
     930        if self.debug: 
     931            request.startResponse(200, 'OK', [('Content-Type', 'text/html')]) 
     932            import cgitb 
     933            request.write(cgitb.html(sys.exc_info())) 
     934        else: 
     935            errorpage = """<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
     936<html><head> 
     937<title>Unhandled Exception</title> 
     938</head><body> 
     939<h1>Unhandled Exception</h1> 
     940<p>An unhandled exception was thrown by the application.</p> 
     941</body></html> 
     942""" 
     943            request.startResponse(200, 'OK', [('Content-Type', 'text/html')]) 
     944            request.write(errorpage) 
  • flup/server/ajp_fork.py

    r16 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    103103    def __init__(self, application, scriptName='', environ=None, 
    104104                 bindAddress=('localhost', 8009), allowedServers=None, 
    105                  loggingLevel=logging.INFO, **kw): 
     105                 loggingLevel=logging.INFO, debug=True, **kw): 
    106106        """ 
    107107        scriptName is the initial portion of the URL path that "belongs" 
     
    131131                               bindAddress=bindAddress, 
    132132                               allowedServers=allowedServers, 
    133                                loggingLevel=loggingLevel) 
     133                               loggingLevel=loggingLevel, 
     134                               debug=debug) 
    134135        for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): 
    135136            if kw.has_key(key): 
     
    159160 
    160161        return ret 
     162 
     163def factory(global_conf, host=None, port=None, **local): 
     164    import paste_factory 
     165    return paste_factory.helper(WSGIServer, global_conf, host, port, **local) 
    161166 
    162167if __name__ == '__main__': 
  • flup/server/fcgi.py

    r14 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    6464    def __init__(self, application, environ=None, 
    6565                 multithreaded=True, multiprocess=False, 
    66                  bindAddress=None, multiplexed=False, **kw): 
     66                 bindAddress=None, multiplexed=False, 
     67                 debug=True, **kw): 
    6768        """ 
    6869        environ, if present, must be a dictionary-like object. Its 
     
    8485                                multiprocess=multiprocess, 
    8586                                bindAddress=bindAddress, 
    86                                 multiplexed=multiplexed) 
     87                                multiplexed=multiplexed, 
     88                                debug=debug) 
    8789        for key in ('jobClass', 'jobArgs'): 
    8890            if kw.has_key(key): 
     
    112114 
    113115        return ret 
     116 
     117def factory(global_conf, host=None, port=None, **local): 
     118    import paste_factory 
     119    return paste_factory.helper(WSGIServer, global_conf, host, port, **local) 
    114120 
    115121if __name__ == '__main__': 
  • flup/server/fcgi_base.py

    r24 r32  
    1 # Copyright (c) 2002, 2003, 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2002, 2003, 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    900900    def __init__(self, application, environ=None, 
    901901                 multithreaded=True, multiprocess=False, 
    902                  bindAddress=None, multiplexed=False): 
     902                 bindAddress=None, multiplexed=False, 
     903                 debug=True): 
    903904        """ 
    904905        bindAddress, if present, must either be a string or a 2-tuple. If 
     
    925926        self.multithreaded = multithreaded 
    926927        self.multiprocess = multiprocess 
     928        self.debug = debug 
    927929 
    928930        self._bindAddress = bindAddress 
     
    11361138        should be overridden. 
    11371139        """ 
    1138         import cgitb 
    1139         req.stdout.write('Content-Type: text/html\r\n\r\n' + 
    1140                          cgitb.html(sys.exc_info())) 
     1140        if self.debug: 
     1141            import cgitb 
     1142            req.stdout.write('Content-Type: text/html\r\n\r\n' + 
     1143                             cgitb.html(sys.exc_info())) 
     1144        else: 
     1145            errorpage = """<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
     1146<html><head> 
     1147<title>Unhandled Exception</title> 
     1148</head><body> 
     1149<h1>Unhandled Exception</h1> 
     1150<p>An unhandled exception was thrown by the application.</p> 
     1151</body></html> 
     1152""" 
     1153            req.stdout.write('Content-Type: text/html\r\n\r\n' + 
     1154                             errorpage) 
  • flup/server/fcgi_fork.py

    r14 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    6464    """ 
    6565    def __init__(self, application, environ=None, 
    66                  bindAddress=None, multiplexed=False, **kw): 
     66                 bindAddress=None, multiplexed=False, 
     67                 debug=True, **kw): 
    6768        """ 
    6869        environ, if present, must be a dictionary-like object. Its 
     
    8485                                multiprocess=True, 
    8586                                bindAddress=bindAddress, 
    86                                 multiplexed=multiplexed) 
     87                                multiplexed=multiplexed, 
     88                                debug=debug) 
    8789        for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): 
    8890            if kw.has_key(key): 
     
    129131        return ret 
    130132 
     133def factory(global_conf, host=None, port=None, **local): 
     134    import paste_factory 
     135    return paste_factory.helper(WSGIServer, global_conf, host, port, **local) 
     136 
    131137if __name__ == '__main__': 
    132138    def test_app(environ, start_response): 
  • flup/server/scgi.py

    r14 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    9191                 multithreaded=True, multiprocess=False, 
    9292                 bindAddress=('localhost', 4000), allowedServers=None, 
    93                  loggingLevel=logging.INFO, **kw): 
     93                 loggingLevel=logging.INFO, debug=True, **kw): 
    9494        """ 
    9595        scriptName is the initial portion of the URL path that "belongs" 
     
    119119                                bindAddress=bindAddress, 
    120120                                allowedServers=allowedServers, 
    121                                 loggingLevel=loggingLevel) 
     121                                loggingLevel=loggingLevel, 
     122                                debug=debug) 
    122123        for key in ('jobClass', 'jobArgs'): 
    123124            if kw.has_key(key): 
     
    148149 
    149150        return ret 
     151 
     152def factory(global_conf, host=None, port=None, **local): 
     153    import paste_factory 
     154    return paste_factory.helper(WSGIServer, global_conf, host, port, **local) 
    150155 
    151156if __name__ == '__main__': 
  • flup/server/scgi_base.py

    r17 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    274274                 multithreaded=True, multiprocess=False, 
    275275                 bindAddress=('localhost', 4000), allowedServers=NoDefault, 
    276                  loggingLevel=logging.INFO): 
     276                 loggingLevel=logging.INFO, debug=True): 
    277277        """ 
    278278        scriptName is the initial portion of the URL path that "belongs" 
     
    309309        self.multithreaded = multithreaded 
    310310        self.multiprocess = multiprocess 
     311        self.debug = debug 
    311312        self._bindAddress = bindAddress 
    312313        if allowedServers is NoDefault: 
     
    469470        all errors should be caught at the application level. 
    470471        """ 
    471         import cgitb 
    472         request.stdout.write('Content-Type: text/html\r\n\r\n' + 
    473                              cgitb.html(sys.exc_info())) 
     472        if self.debug: 
     473            import cgitb 
     474            request.stdout.write('Content-Type: text/html\r\n\r\n' + 
     475                                 cgitb.html(sys.exc_info())) 
     476        else: 
     477            errorpage = """<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
     478<html><head> 
     479<title>Unhandled Exception</title> 
     480</head><body> 
     481<h1>Unhandled Exception</h1> 
     482<p>An unhandled exception was thrown by the application.</p> 
     483</body></html> 
     484""" 
     485            request.stdout.write('Content-Type: text/html\r\n\r\n' + 
     486                                 errorpage) 
  • flup/server/scgi_fork.py

    r14 r32  
    1 # Copyright (c) 2005 Allan Saddi <allan@saddi.com> 
     1# Copyright (c) 2005, 2006 Allan Saddi <allan@saddi.com> 
    22# All rights reserved. 
    33# 
     
    9090    def __init__(self, application, scriptName='', environ=None, 
    9191                 bindAddress=('localhost', 4000), allowedServers=None, 
    92                  loggingLevel=logging.INFO, **kw): 
     92                 loggingLevel=logging.INFO, debug=True, **kw): 
    9393        """ 
    9494        scriptName is the initial portion of the URL path that "belongs" 
     
    118118                                bindAddress=bindAddress, 
    119119                                allowedServers=allowedServers, 
    120                                 loggingLevel=loggingLevel) 
     120                                loggingLevel=loggingLevel, 
     121                                debug=debug) 
    121122        for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): 
    122123            if kw.has_key(key): 
     
    146147 
    147148        return ret 
     149 
     150def factory(global_conf, host=None, port=None, **local): 
     151    import paste_factory 
     152    return paste_factory.helper(WSGIServer, global_conf, host, port, **local) 
    148153 
    149154if __name__ == '__main__': 
  • setup.py

    r26 r32  
    11#!/usr/bin/env python 
     2 
     3setuptools_extras = {} 
    24 
    35try: 
    46    from setuptools import setup 
     7    setuptools_extras['entry_points'] = """ 
     8        [paste.server_factory] 
     9        ajp = flup.server.ajp:factory 
     10        fcgi = flup.server.fcgi:factory 
     11        scgi = flup.server.scgi:factory 
     12        ajp_fork = flup.server.ajp_fork:factory 
     13        fcgi_fork = flup.server.fcgi_fork:factory 
     14        scgi_fork = flup.server.scgi_fork:factory 
     15        """ 
    516except ImportError: 
    617    from distutils.core import setup 
     
    1223      author_email='allan@saddi.com', 
    1324      url='http://www.saddi.com/software/flup/', 
    14       packages=['flup', 'flup.middleware', 'flup.resolver', 'flup.server']) 
     25      packages=['flup', 'flup.middleware', 'flup.resolver', 'flup.server'], 
     26      **setuptools_extras)