Blame server.py

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