Package: bricks.dispatch

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 BaseDispatch
def __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    = baseURL

def 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 _config

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)

Imports a module name from a specified path and returns that module

[show source]
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 CGIDispatch
def __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    = baseURL

def 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 _config

def 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)

Imports a module name from a specified path and returns that module

[show source]
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