import datetime
import db.types
import db.pool
import db.cache
import page.root
import page.error
import action.actions
import session
class Server:
def __init__(self, config):
urlprefix = str(config.get('urlprefix', ''))
while urlprefix[-1:] == '/':
urlprefix = urlprefix[:-1]
config_db = config.get('db', dict())
config_db_pool = config_db.get('pool', dict())
config_db_cache = config_db.get('cache', dict())
config_users = config.get('users', dict())
config_session = config.get('session', dict())
self.config = {
'urlprefix' : urlprefix,
'urldataprefix' : str(config.get('urldataprefix', urlprefix + '/data')),
'db': {
'connection' : dict(config_db.get('connection', dict())),
'prefix' : str(config_db.get('prefix', '')),
'retrytime' : float(config_db.get('retrytime', 0)),
'pool': {
'read' : int(config_db_pool.get('read' , 10)),
'write' : int(config_db_pool.get('write', 10)),
},
'cache': {
'maxcount' : int(config_db_cache.get('maxcount', 10000)),
},
},
'users': {
'salt' : str(config_users.get('salt', 'ndina82899nda90pn0al')),
'selfcreate' : bool(config_users.get('selfcreate', False)),
'selfdelete' : bool(config_users.get('selfdelete', False)),
'showlist' : bool(config_users.get('showlist', False)),
'showprofile' : bool(config_users.get('showprofile', True)),
},
'session': {
'time' : float(config_session.get('time', 30*60))
},
}
assert self.config['db']['retrytime'] >= 0
assert self.config['db']['prefix'] == '' \
or self.config['db']['prefix'].isidentifier()
assert self.config['db']['pool']['read'] > 0
assert self.config['db']['pool']['write'] > 0
assert self.config['db']['cache']['maxcount'] > 0
assert self.config['session']['time'] > 0
if self.config['urlprefix'] != '':
assert self.config['urlprefix'][0] == '/'
for i in self.config['urlprefix'][1:].split('/'):
assert i.isalnum()
self.dbtypebytype = db.types.bytype
self.dbtypebychar = db.types.bychar
self.dbpool = db.pool.Pool(self)
self.dbcache = db.cache.Cache(self)
self.sessions = session.SessionManager(self)
self.pageroot = page.root.RootPage()
self.pageforbidden = page.error.ErrorPage('403', 'Forbidden')
self.pagenotfound = page.error.ErrorPage('404', 'Page Not Found')
self.actions = action.actions.actions