You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
stacosys/run.py

107 lines
2.6 KiB
Python

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