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

104 lines
2.7 KiB
Python

#!/usr/bin/python
# -*- coding: UTF-8 -*-
6 years ago
import argparse
import logging
import os
import sys
6 years ago
from flask import Flask
from flask_apscheduler import APScheduler
import stacosys.conf.config as config
from stacosys.core import database
from stacosys.core import rss
#from stacosys.interface import api
#from stacosys.interface import form
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__)
conf = config.Config.load(config_pathname)
6 years ago
# 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
db = database.Database()
db.setup(conf.get(config.DB_URL))
6 years ago
# cron email fetcher
app.config.from_object(
JobConfig(
conf.get_int(config.IMAP_POLLING), conf.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
rss_manager = rss.Rss(conf.get(config.LANG), conf.get(config.RSS_FILE), conf.get(config.RSS_PROTO))
rss_manager.generate_all()
6 years ago
6 years ago
# start Flask
#logger.info("Load interface %s" % api)
#logger.info("Load interface %s" % form)
6 years ago
6 years ago
app.run(
host=conf.get(config.HTTP_HOST),
port=conf.get(config.HTTP_PORT),
6 years ago
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)