#!/usr/bin/python # -*- coding: UTF-8 -*- import argparse import logging import os from flask import Flask from flask_apscheduler import APScheduler from stacosys.conf import config # configure logging def configure_logging(level): root_logger = logging.getLogger() root_logger.setLevel(level) ch = logging.StreamHandler() ch.setLevel(level) # create formatter formatter = logging.Formatter('[%(asctime)s] %(name)s %(levelname)s %(message)s') # add formatter to ch ch.setFormatter(formatter) # add ch to logger root_logger.addHandler(ch) class JobConfig(object): JOBS = [] SCHEDULER_EXECUTORS = {'default': {'type': 'threadpool', 'max_workers': 4}} def __init__(self, imap_polling_seconds, new_comment_polling_seconds): self.JOBS = [ { 'id': 'fetch_mail', 'func': 'stacosys.core.cron:fetch_mail_answers', 'trigger': 'interval', 'seconds': imap_polling_seconds, }, { 'id': 'submit_new_comment', 'func': 'stacosys.core.cron:submit_new_comment', 'trigger': 'interval', 'seconds': new_comment_polling_seconds, }, ] def stacosys_server(config_pathname): app = Flask(__name__) config.initialize(config_pathname, app) # configure logging logger = logging.getLogger(__name__) configure_logging(logging.INFO) logging.getLogger('werkzeug').level = logging.WARNING logging.getLogger('apscheduler.executors').level = logging.WARNING # initialize database from stacosys.core import database database.setup() database.dump_db() # cron email fetcher app.config.from_object( JobConfig( config.get_int(config.IMAP_POLLING), config.get_int(config.COMMENT_POLLING) ) ) scheduler = APScheduler() scheduler.init_app(app) scheduler.start() logger.info('Start Stacosys application') # generate RSS for all sites from stacosys.core import rss rss.generate_all() # start Flask from stacosys.interface import api logger.info('Load interface %s' % api) from stacosys.interface import form logger.info('Load interface %s' % form) app.run( host=config.get(config.HTTP_HOST), port=config.get(config.HTTP_PORT), debug=False, use_reloader=False, ) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('config', help='config path name') args = parser.parse_args() stacosys_server(args.config)