Blob Blame Raw

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