API Reference
Modules
Module Attributes
__file__ =
'C:\\Documents and Settings\\James\\Desktop\\PythonWeb\\bricks\\bricks\\dispatch\\__init__.pyc'
__name__ =
'bricks.dispatch'
__path__ =
['C:\\Documents and Settings\\James\\Desktop\\PythonWeb\\bricks\\bricks\\dispatch']
Classes
class BaseDispatchdef __init__(self, private, app, baseURL=None)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 6: def __init__(self, private, app, 7: #reload=0, 8: baseURL=None): 9: if app[0] == '_': 10: raise web.wsgi.exception.HTTPError401("You cannot access private code begining with an '_' character.") 11: self.private = private 12: self.app = app 13: #self.reload = reload 14: self.baseURL = baseURLdef configBricks(self, private, application, app)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 123: def configBricks(self, private, application, app):#, controller, action): 124: def _config(environ, start_response): 125: #raise Exception( environ.values()) 126: _app = self.app 127: #_controller = self.controller 128: #_action = self.action 129: #environ["bricks.app"] = self.app 130: #environ["bricks.controller"] = self.controller 131: #environ["bricks.action"] = self.action 132: 133: base = os.path.join(private,'app',self.app) 134: 135: from urllib import quote 136: baseurl = environ['wsgi.url_scheme']+'://' 137: 138: if environ.get('HTTP_HOST'): 139: baseurl += environ['HTTP_HOST'] 140: else: 141: baseurl += environ['SERVER_NAME'] 142: if environ['wsgi.url_scheme'] == 'https': 143: if environ['SERVER_PORT'] != '443': 144: baseurl += ':' + environ['SERVER_PORT'] 145: else: 146: if environ['SERVER_PORT'] != '80': 147: baseurl += ':' + environ['SERVER_PORT'] 148: 149: 150: url = baseurl + quote(environ.get('SCRIPT_NAME','')) 151: #url += quote(environ.get('PATH_INFO','')) 152: #if environ.get('QUERY_STRING'): 153: # url += '?' + environ['QUERY_STRING'] 154: 155: if quote(environ.get('PATH_INFO','')): 156: path = quote(environ.get('PATH_INFO','')) 157: else: 158: path = quote(environ.get('SCRIPT_NAME','')) 159: 160: def specialImport(path): 161: if path[-3:] == '.py': 162: path = path[:-3] 163: p = path.replace('\\','/') 164: p = p.split('/') 165: if not len(path) > 0: 166: raise ImportError('No path specified') 167: else: 168: name = p[-1] 169: base = os.sep.join(p[:-1]) 170: 171: import imp 172: fp, pathname, description = imp.find_module(name, [base]) 173: try: 174: mod = imp.load_module(name, fp, pathname, description) 175: finally: 176: # Since we may exit via an exception, close fp explicitly. 177: if fp: 178: fp.close() 179: 180: #if self.reload: 181: # mod = reload(mod) 182: return mod 183: def log(string): 184: sys.stderr.write('-> '+str(string)+'\n') 185: environ['bricks.log'] = log 186: environ["bricks.url"] = url 187: environ["bricks.app.url"] = url +'/'+self.app 188: environ["bricks.app.public.url"] = baseurl +'/app/'+self.app 189: 190: environ["bricks.app"] = self.app 191: #environ["bricks.url.build"] = urlBuild 192: environ["bricks.import"] = specialImport 193: environ["bricks.path"] = '/'.join(path.split('/')[2:]) 194: #environ["bricks.url.public"] = '/'.join([url, 'public', app]) 195: #environ["bricks.public"] = '/'.join([url, 'public', app]) 196: environ["bricks.private"] = self.private 197: environ["bricks.folder"] = os.path.join(environ["bricks.private"],'app',environ["bricks.app"]) 198: 199: return application(environ, start_response) 200: return _configdef loadApplication(self, private, app)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 19: def loadApplication(self, private, app): 20: def chain(app): 21: return app 22: 23: # check application exists 24: if not os.path.exists(os.path.join(private, 'app', app)): 25: raise web.wsgi.exception.HTTPError404('No such application %s %s'%(app, os.path.join(private, 'app', app, 'application.py'))) 26: 27: # Add the application's lib directory to the path 28: path = os.path.join(private, 'app', app, 'lib') 29: if not path in sys.path: 30: sys.path.append(path) 31: 32: # check the application has a local application.py file 33: try: 34: local = self.specialImport(os.path.join(private,'app',app,'application')) 35: except ImportError: 36: raise Exception('Could not import application.py') 37: try: 38: application = local.application 39: except AttributeError: 40: raise Exception('No application object found in application.py') 41: 42: if os.path.exists(os.path.join(private, 'app', 'global.py')): 43: try: 44: globalMiddleware = self.specialImport(os.path.join(private,'app','global')).middleware 45: except AttributeError: 46: raise Exception('No object named middleware was found in \'global.py\' for %s'%app) 47: 48: if os.path.exists(os.path.join(private, 'app', app, 'local.py')): 49: try: 50: localMiddleware = self.specialImport(os.path.join(private,'app',app, 'local')).middleware 51: except AttributeError: 52: raise Exception('No object named middleware was found in \'local.py\' for %s'%app) 53: else: 54: return web.wsgi.cgi.CGI(globalMiddleware(localMiddleware(application))) 55: else: 56: return web.wsgi.cgi.CGI(globalMiddleware(application))def specialImport(self, path)[show source]Imports a module name from a specified path and returns that module
C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 78: def specialImport(self, path): 79: "Imports a module name from a specified path and returns that module" 80: if path[-3:] == '.py': 81: path = path[:-3] 82: path = path.replace('\\','/') 83: path = path.split('/') 84: if not len(path) > 0: 85: raise ImportError('No path specified') 86: else: 87: name = path[-1] 88: path = '/'.join(path[:-1]) 89: try: 90: path2 = os.path.join(self.private, 'app', self.app, path) 91: removeFromSys = 0 92: if path2 not in sys.path: 93: removeFromSys = 1 94: sys.path.append(path2) 95: mod = __import__(name) 96: reload(mod) 97: path = path2 98: except ImportError: 99: removeFromSys = 0 100: if path not in sys.path: 101: removeFromSys = 1 102: sys.path.append(path) 103: mod = __import__(name) 104: #if self.reload: 105: # mod = reload(mod) 106: if removeFromSys: 107: sys.path = sys.path[:-1] 108: return mod
class CGIDispatchdef __init__(self, private, app, baseURL=None)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 6: def __init__(self, private, app, 7: #reload=0, 8: baseURL=None): 9: if app[0] == '_': 10: raise web.wsgi.exception.HTTPError401("You cannot access private code begining with an '_' character.") 11: self.private = private 12: self.app = app 13: #self.reload = reload 14: self.baseURL = baseURLdef configBricks(self, private, application, app)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 123: def configBricks(self, private, application, app):#, controller, action): 124: def _config(environ, start_response): 125: #raise Exception( environ.values()) 126: _app = self.app 127: #_controller = self.controller 128: #_action = self.action 129: #environ["bricks.app"] = self.app 130: #environ["bricks.controller"] = self.controller 131: #environ["bricks.action"] = self.action 132: 133: base = os.path.join(private,'app',self.app) 134: 135: from urllib import quote 136: baseurl = environ['wsgi.url_scheme']+'://' 137: 138: if environ.get('HTTP_HOST'): 139: baseurl += environ['HTTP_HOST'] 140: else: 141: baseurl += environ['SERVER_NAME'] 142: if environ['wsgi.url_scheme'] == 'https': 143: if environ['SERVER_PORT'] != '443': 144: baseurl += ':' + environ['SERVER_PORT'] 145: else: 146: if environ['SERVER_PORT'] != '80': 147: baseurl += ':' + environ['SERVER_PORT'] 148: 149: 150: url = baseurl + quote(environ.get('SCRIPT_NAME','')) 151: #url += quote(environ.get('PATH_INFO','')) 152: #if environ.get('QUERY_STRING'): 153: # url += '?' + environ['QUERY_STRING'] 154: 155: if quote(environ.get('PATH_INFO','')): 156: path = quote(environ.get('PATH_INFO','')) 157: else: 158: path = quote(environ.get('SCRIPT_NAME','')) 159: 160: def specialImport(path): 161: if path[-3:] == '.py': 162: path = path[:-3] 163: p = path.replace('\\','/') 164: p = p.split('/') 165: if not len(path) > 0: 166: raise ImportError('No path specified') 167: else: 168: name = p[-1] 169: base = os.sep.join(p[:-1]) 170: 171: import imp 172: fp, pathname, description = imp.find_module(name, [base]) 173: try: 174: mod = imp.load_module(name, fp, pathname, description) 175: finally: 176: # Since we may exit via an exception, close fp explicitly. 177: if fp: 178: fp.close() 179: 180: #if self.reload: 181: # mod = reload(mod) 182: return mod 183: def log(string): 184: sys.stderr.write('-> '+str(string)+'\n') 185: environ['bricks.log'] = log 186: environ["bricks.url"] = url 187: environ["bricks.app.url"] = url +'/'+self.app 188: environ["bricks.app.public.url"] = baseurl +'/app/'+self.app 189: 190: environ["bricks.app"] = self.app 191: #environ["bricks.url.build"] = urlBuild 192: environ["bricks.import"] = specialImport 193: environ["bricks.path"] = '/'.join(path.split('/')[2:]) 194: #environ["bricks.url.public"] = '/'.join([url, 'public', app]) 195: #environ["bricks.public"] = '/'.join([url, 'public', app]) 196: environ["bricks.private"] = self.private 197: environ["bricks.folder"] = os.path.join(environ["bricks.private"],'app',environ["bricks.app"]) 198: 199: return application(environ, start_response) 200: return _configdef configWSGI(self, application, req)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 226: def configWSGI(self, application, req): # XXX Change values 227: # Start PEP 333 228: environ = dict(os.environ.items()) 229: 230: environ['wsgi.input'] = sys.stdin 231: environ['wsgi.errors'] = sys.stderr 232: environ['wsgi.version'] = (1,0) 233: environ['wsgi.multithread'] = False 234: environ['wsgi.multiprocess'] = True 235: environ['wsgi.run_once'] = True 236: if environ.get('HTTPS','off') in ('on','1'): 237: environ['wsgi.url_scheme'] = 'https' 238: else: 239: environ['wsgi.url_scheme'] = 'http' 240: headers_set = [] 241: headers_sent = [] 242: # End PEP 333 243: 244: def write(data): 245: if not headers_set: 246: raise AssertionError("write() before start_response()") 247: elif not headers_sent: 248: # Before the first output, send the stored headers 249: status, response_headers = headers_sent[:] = headers_set 250: #sys.stdout.write('Status: %s\r\n' % status) # PEP 333 251: req.set_header('Status',status) 252: for header in response_headers: 253: #sys.stdout.write('%s: %s\r\n' % header) # PEP 333 254: req.set_header('Status',status) # JG 255: #sys.stdout.write('\r\n') # PEP 333 256: req.write('\r\n') 257: #sys.stdout.write(data) # PEP 333 258: #sys.stdout.flush() # PEP 333 259: req.write(data) # JG 260: req.flush() # JG 261: 262: # Start PEP 333 263: def start_response(status,response_headers,exc_info=None): 264: if exc_info: 265: try: 266: if headers_sent: 267: # Re-raise original exception if headers sent 268: raise exc_info[0], exc_info[1], exc_info[2] 269: finally: 270: exc_info = None # avoid dangling circular ref 271: elif headers_set: 272: raise AssertionError("Headers already set!") 273: 274: headers_set[:] = [status,response_headers] 275: return write 276: 277: result = application(environ, start_response) 278: try: 279: for data in result: 280: if data: # don't send headers until body appears 281: write(data) 282: if not headers_sent: 283: write('') # send headers now if body was empty 284: finally: 285: if hasattr(result,'close'): 286: result.close()def get(self)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 222: def get(self): 223: app = self.loadApplication(self.private, self.app) 224: return self.configBricks(self.private, app, self.app)def loadApplication(self, private, app)[show source]C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 19: def loadApplication(self, private, app): 20: def chain(app): 21: return app 22: 23: # check application exists 24: if not os.path.exists(os.path.join(private, 'app', app)): 25: raise web.wsgi.exception.HTTPError404('No such application %s %s'%(app, os.path.join(private, 'app', app, 'application.py'))) 26: 27: # Add the application's lib directory to the path 28: path = os.path.join(private, 'app', app, 'lib') 29: if not path in sys.path: 30: sys.path.append(path) 31: 32: # check the application has a local application.py file 33: try: 34: local = self.specialImport(os.path.join(private,'app',app,'application')) 35: except ImportError: 36: raise Exception('Could not import application.py') 37: try: 38: application = local.application 39: except AttributeError: 40: raise Exception('No application object found in application.py') 41: 42: if os.path.exists(os.path.join(private, 'app', 'global.py')): 43: try: 44: globalMiddleware = self.specialImport(os.path.join(private,'app','global')).middleware 45: except AttributeError: 46: raise Exception('No object named middleware was found in \'global.py\' for %s'%app) 47: 48: if os.path.exists(os.path.join(private, 'app', app, 'local.py')): 49: try: 50: localMiddleware = self.specialImport(os.path.join(private,'app',app, 'local')).middleware 51: except AttributeError: 52: raise Exception('No object named middleware was found in \'local.py\' for %s'%app) 53: else: 54: return web.wsgi.cgi.CGI(globalMiddleware(localMiddleware(application))) 55: else: 56: return web.wsgi.cgi.CGI(globalMiddleware(application))def specialImport(self, path)[show source]Imports a module name from a specified path and returns that module
C:\Documents and Settings\James\Desktop\PythonWeb\bricks\bricks\dispatch\__init__.py 78: def specialImport(self, path): 79: "Imports a module name from a specified path and returns that module" 80: if path[-3:] == '.py': 81: path = path[:-3] 82: path = path.replace('\\','/') 83: path = path.split('/') 84: if not len(path) > 0: 85: raise ImportError('No path specified') 86: else: 87: name = path[-1] 88: path = '/'.join(path[:-1]) 89: try: 90: path2 = os.path.join(self.private, 'app', self.app, path) 91: removeFromSys = 0 92: if path2 not in sys.path: 93: removeFromSys = 1 94: sys.path.append(path2) 95: mod = __import__(name) 96: reload(mod) 97: path = path2 98: except ImportError: 99: removeFromSys = 0 100: if path not in sys.path: 101: removeFromSys = 1 102: sys.path.append(path) 103: mod = __import__(name) 104: #if self.reload: 105: # mod = reload(mod) 106: if removeFromSys: 107: sys.path = sys.path[:-1] 108: return mod