def __init__(self): self.warpBasePath = config['warpDir'] self.warpStaticPath = self.warpBasePath.child('static') self.warpTemplatePath = self.warpBasePath.child("templates") siteTemplateDir = config['siteDir'].child("templates").path warpTemplateDir = self.warpTemplatePath.path nodeDir = config['siteDir'].child("nodes").path templateLookup.__init__(directories=[siteTemplateDir, warpTemplateDir, nodeDir], output_encoding="utf-8") handle_login = config.get('loginHandler', self.handle_login) handle_logout = config.get('logoutHandler', self.handle_logout) handle_comet = config.get('cometHandler', self.handle_comet) handle_warpstatic = config.get('warpstaticHandler', self.handle_warpstatic) handle_default = config.get('defaultHandler', self.handle_default) self.dispatch = { '__login__': handle_login, '__logout__': handle_logout, '_comet': handle_comet, '_warp': handle_warpstatic, '': handle_default, } self.caseInsensitiveUrl = False
def __init__(self): self.warpBasePath = config['warpDir'] self.warpStaticPath = self.warpBasePath.child('static') self.warpTemplatePath = self.warpBasePath.child("templates") siteTemplateDir = config['siteDir'].child("templates").path warpTemplateDir = self.warpTemplatePath.path nodeDir = config['siteDir'].child("nodes").path templateLookup.__init__( directories=[siteTemplateDir, warpTemplateDir, nodeDir], output_encoding="utf-8") handle_login = config.get('loginHandler', self.handle_login) handle_logout = config.get('logoutHandler', self.handle_logout) handle_comet = config.get('cometHandler', self.handle_comet) handle_warpstatic = config.get('warpstaticHandler', self.handle_warpstatic) handle_default = config.get('defaultHandler', self.handle_default) self.dispatch = { '__login__': handle_login, '__logout__': handle_logout, '_comet': handle_comet, '_warp': handle_warpstatic, '': handle_default, } self.caseInsensitiveUrl = False
def setupSession(): conn_str = config['db'].replace("postgres", "postgresql") # check if is there any option for storm conn_str = conn_str.split("?")[0] engine = create_engine(conn_str, isolation_level=config.get("isolation_level", "READ COMMITTED"), echo=config.get("trace")) Session = sessionmaker(bind=engine) Base = declarative_base() return Session(), Base
def getChildWithDefault(self, firstSegment, request): if firstSegment: fp = self.buildFilePath(request) if fp is not None: del request.postpath[:] return static.File(fp.path) # Init for everything except static files session = request.getSession() request.avatar = session.avatar getCurrentUser = config.get('getCurrentUser') if getCurrentUser and request.avatar: request.current_user = getCurrentUser(request.avatar.id) getRequestStore = config.get('getRequestStore') if getRequestStore is not None: request.store = getRequestStore(request) else: request.store = avatar_store if request.avatar is not None: getUser = config.get('getRequestUser') if getUser is not None: request.avatar.user = getUser(request) else: # Backward compatibility getUser = config.get('getAppUser') if getUser is not None: warnings.warn( "getAppUser is deprecated, use getRequestUser instead", DeprecationWarning) request.avatar.user = getUser(request.avatar) if config.get('reloadMessages'): translate.loadMessages() request.translateTerm = translate.getTranslator(session.language) segment = firstSegment if self.caseInsensitiveUrl: segment = firstSegment.lower() handler = self.dispatch.get(segment) if handler is not None: return handler(request) node = helpers.getNode(firstSegment) if node is not None: return NodeResource(node) return NoResource()
def getChildWithDefault(self, firstSegment, request): if firstSegment: fp = self.buildFilePath(request) if fp is not None: del request.postpath[:] return static.File(fp.path) # Init for everything except static files session = request.getSession() request.avatar = session.avatar getRequestStore = config.get('getRequestStore') if getRequestStore is not None: request.store = getRequestStore(request) else: request.store = avatar_store if request.avatar is not None: getUser = config.get('getRequestUser') if getUser is not None: request.avatar.user = getUser(request) else: # Backward compatibility getUser = config.get('getAppUser') if getUser is not None: warnings.warn("getAppUser is deprecated, use getRequestUser instead", DeprecationWarning) request.avatar.user = getUser(request.avatar) if config.get('reloadMessages'): translate.loadMessages() request.translateTerm = translate.getTranslator(session.language) segment = firstSegment if self.caseInsensitiveUrl: segment = firstSegment.lower() handler = self.dispatch.get(segment) if handler is not None: return handler(request) node = helpers.getNode(firstSegment) if node is not None: if not access.allowed(request.avatar, node): return AccessDenied() return NodeResource(node) return NoResource()
def addUser(): email = raw_input("Email: ").decode("utf-8").strip() if not email: print "You must give an email address." return addUser() password = _getPassword().decode("utf-8") hasher = config.get('hashPassword') if hasher is not None: password = hasher(password) roleNames = raw_input("Roles (space-separated):").split() av = avatar.Avatar() av.email = email av.password = password avatar_store.add(av) for (position, roleName) in enumerate(roleNames): role = avatar.AvatarRole() role.avatar = av role.role_name = roleName role.position = position avatar_store.add(role) avatar_store.commit()
def setupStore(): avatar_store.__init__(create_database(config['db'])) if config.get('trace'): import sys from storm.tracer import debug debug(True, stream=sys.stdout) # Only sqlite uses this now sqlBundle = getCreationSQL(avatar_store) if not sqlBundle: return tableExists = sql['tableExists'] = sqlBundle['tableExists'] for (table, creationSQL) in sqlBundle['creations']: if not tableExists(avatar_store, table): # Unlike log.message, this works during startup print "~~~ Creating Warp table '%s'" % table if not isinstance(creationSQL, tuple): creationSQL = [creationSQL] for sqlCmd in creationSQL: avatar_store.execute(sqlCmd) avatar_store.commit()
def getChildWithDefault(self, firstSegment, request): if firstSegment: fp = self.buildFilePath(request) if fp is not None: del request.postpath[:] return static.File(fp.path) # Init for everything except static files session = request.getSession() request.avatar = session.avatar if config.get("reloadMessages"): translate.loadMessages() request.translateTerm = translate.getTranslator(session.language) handler = self.dispatch.get(firstSegment) if handler is not None: return handler(request) node = helpers.getNode(firstSegment) if node is not None: if not access.allowed(request.avatar, node): return AccessDenied() return NodeResource(node) return NoResource()
def doIt(self, request): if request.method != 'POST': return False [email] = request.args.get('email', [None]) [password] = request.args.get('password', [None]) if not (email and password): request.session.addFlashMessage("Login failed: Email or password not given", _domain="_warp:login") return False avatar = avatar_store.find(Avatar, Avatar.email == email.decode("utf-8") ).one() checker = config.get('checkPassword', defaultCheckPassword) if avatar is None or not checker(avatar, password): request.session.addFlashMessage("Login failed: Email or password incorrect", _domain="_warp:login") return False request.session.setAvatarID(avatar.id) request.avatar = request.session.avatar return True
def url(node, facet="index", args=(), query=()): segments = nodeSegments(node) segments.append(facet) segments.extend(args) u = "%s/%s" % (config.get('baseURL', ''), "/".join(map(str, segments))) if query: u = "%s?%s" % (u, urllib.urlencode(query)) return u
def getConfig(config=config): schemaConfig = { # Directory storing site's DB migrations # (twisted.python.filepath.FilePath) "migrations_dir": config["siteDir"].child("migrations"), # Whether to check schema on startup "check": True, } schemaConfig.update(config.get("schema", {})) return schemaConfig
def getTinyTemplate(self): if not self.tinyTemplate: self.tinyTemplate = """ <html> <head> <link rel="stylesheet" href="%s/_warp/reset.css" type="text/css"></link> </head> <body> %%s </body> </html> """ % config.get("baseURL", '') return self.tinyTemplate
def getSession(self, uid): session = self.sessionManager.getSession(uid) if session is None: raise KeyError(uid) if session.hasAvatar(): maxAge = config.get("sessionMaxAge") if maxAge is not None and session.age() > maxAge: session.addFlashMessage("You were logged out due to inactivity", _domain="_warp:login") session.setAvatarID(None) return session
def getSession(self, uid): session = self.sessionManager.getSession(uid) if session is None: raise KeyError(uid) if session.isPersistent: return session if session.hasAvatar(): maxAge = config.get("sessionMaxAge") if maxAge is not None and session.age() > maxAge: session.addFlashMessage("You were logged out due to inactivity", _domain="_warp:login") session.setAvatarID(None) return session
def setupStore(): avatar_store.__init__(create_database(config['db'])) if config.get('trace'): import sys from storm.tracer import debug debug(True, stream=sys.stdout) sqlBundle = getCreationSQL(avatar_store) tableExists = sql['tableExists'] = sqlBundle['tableExists'] for (table, creationSQL) in sqlBundle['creations']: if not tableExists(avatar_store, table): # Unlike log.message, this works during startup print "~~~ Creating Warp table '%s'" % table if not isinstance(creationSQL, tuple): creationSQL = [creationSQL] for sqlCmd in creationSQL: avatar_store.execute(sqlCmd) avatar_store.commit()
def getTemplate(templatePath): return Template(filename=templatePath, lookup=templateLookup, format_exceptions=config.get('makoErrorPages', True), output_encoding="utf-8")
def with_base(url): base = config.get("baseUrl", "") return base + url
def loadMessages(): config.get("messageLoader", defaultLoader)()
def getTemplate(templatePath): return Template(filename=templatePath, lookup=templateLookup, format_exceptions=config.get('makoErrorPages', True), default_filters=['decode.utf8','h'], output_encoding="utf-8")