def __init__(self, config={}, config_path=None): Application.__init__(self, template_path=template_path, autoescape=None) EventTarget.__init__(self) self.logger = getLogger('wall') self.bricks = {} self.post_types = {} self.clients = [] self.current_post = None self._init = True self._setup_logger() config_paths = [os.path.join(res_path, 'default.cfg')] if config_path: config_paths.append(config_path) try: parser = SafeConfigParser() parser.read(config_paths) except ConfigParserError as e: self.logger.error('failed to parse configuration file') self._init = False return self.config = {} for section in parser.sections(): prefix = section + '.' if section != 'wall' else '' for key, value in parser.items(section): self.config[prefix + key] = value self.config.update(config) self.db = ObjectRedis(StrictRedis(db=int(self.config['db'])), self._decode_redis_hash) self.posts = RedisContainer(self.db, 'posts') self.add_post_type(TextPost) self.add_post_type(ImagePost) self.msg_handlers = { 'post': self.post_msg, 'post_new': self.post_new_msg, 'get_history': self.get_history_msg } self.add_event_listener('posted', self._posted) # initialize bricks bricks = self.config['bricks'].split() for name in bricks: module = __import__(name, globals(), locals(), [b'foo']) brick = module.Brick(self) self.bricks[brick.id] = brick self.do_post_handlers = [] for handler in self.config['do_post_handlers'].split(): if handler not in ['note', 'history']: self.logger.warning('configuration: invalid item in do_post_handlers: "{}" unknown'.format(handler)); continue if handler in self.do_post_handlers: self.logger.warning('configuration: invalid item in do_post_handlers: "{}" non-unique'.format(handler)) continue self.do_post_handlers.append(handler) if self.config['debug'] == 'True': self.settings['debug'] = True tornado.autoreload.watch(os.path.join(res_path, 'default.cfg')) tornado.autoreload.start() # setup URL handlers urls = [ ('/$', ClientPage), ('/display$', DisplayPage), ('/display/post$', DisplayPostPage), ('/api/socket$', Socket), ] for brick in self.bricks.values(): urls.append(('/static/{0}/(.+)$'.format(brick.id), StaticFileHandler, {'path': brick.static_path})) urls.append(('/static/(.+)$', StaticFileHandler, {'path': static_path})) self.add_handlers('.*$', urls)
def __init__(self, config={}, config_path=None): super(WallApp, self).__init__('wall', self) EventTarget.__init__(self) Collection.__init__(self) Application.__init__(self, template_path=template_path, autoescape=None) self.logger = getLogger('wall') self.bricks = {} self.post_types = {} self.clients = [] self.current_post = None self._init = True self._setup_logger() config_paths = [os.path.join(res_path, 'default.cfg')] if config_path: config_paths.append(config_path) try: parser = SafeConfigParser() parser.read(config_paths) except ConfigParserError as e: self.logger.error('failed to parse configuration file') self._init = False return self.config = {} for section in parser.sections(): prefix = section + '.' if section != 'wall' else '' for key, value in parser.items(section): self.config[prefix + key] = value self.config.update(config) self.db = ObjectRedis(StrictRedis(db=int(self.config['db'])), self._decode_redis_hash) self.posts = RedisContainer(self.db, 'posts') self.add_post_type(TextPost) self.add_post_type(ImagePost) self.add_post_type(GridPost) self.msg_handlers = { 'get_history': self.get_history_msg, 'collection_get_items': self.collection_get_items_msg, 'collection_post': self.collection_post_msg, 'collection_post_new': self.collection_post_new_msg, 'collection_remove_item': self.collection_remove_item_msg } self.add_event_listener('collection_posted', self._collection_posted) self.add_event_listener('collection_item_removed', self._collection_item_removed) self.add_event_listener('collection_item_activated', self._collection_item_activated) self.add_event_listener('collection_item_deactivated', self._collection_item_deactivated) # initialize bricks bricks = self.config['bricks'].split() for name in bricks: module = __import__(name, globals(), locals(), [b'foo']) brick = module.Brick(self) self.bricks[brick.id] = brick if self.config['debug'] == 'True': self.settings['debug'] = True self.settings['autoreload'] = True self.settings['compiled_template_cache'] = False self.settings['static_hash_cache'] = False self.settings['serve_traceback'] = True tornado.autoreload.watch(os.path.join(res_path, 'default.cfg')) tornado.autoreload.start() # setup URL handlers urls = [ ('/$', ClientPage), ('/display$', DisplayPage), ('/display/post$', DisplayPostPage), ('/api/socket$', Socket), ] for brick in self.bricks.values(): urls.append(('/static/bricks/{0}/(.+)$'.format(brick.id), StaticFileHandler, {'path': brick.static_path})) urls.append(('/static/(.+)$', StaticFileHandler, {'path': static_path})) self.add_handlers('.*$', urls)