Exemplo n.º 1
0
def create_app():
    """
    flask app생성
    pytest-flask 라이브러리로 테스트 진행시 사용하는 Flask객체를 반환함.
    """
    flask_app = Flask(__name__)

    # Config
    flask_app.config.from_object('config.Config')

    # SQLAlchemy init
    db.init_app(flask_app)

    # Bcrypt
    # bcrypt = Bcrypt(flask_app)
    try:
        import importlib
        with flask_app.app_context():
            for blueprint in flask_app.config['BLUEPRINTS']:
                module = importlib.import_module(blueprint)
                flask_app.register_blueprint(module.this)
    except Exception as e:
        logger.exception(e)
        raise

    # APScheduler
    from flask_apscheduler import APScheduler
    from app.module.scheduler.listener import stock_scraping, executed
    from apscheduler.events import EVENT_ALL, EVENT_JOB_EXECUTED
    scheduler = APScheduler()
    scheduler.init_app(flask_app)
    scheduler.add_listener(stock_scraping, EVENT_ALL)
    scheduler.add_listener(executed, EVENT_JOB_EXECUTED)

    # scheduler.start()

    return flask_app
Exemplo n.º 2
0
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR
from HuntGame import app  # goes into __init__ in HuntGame to grab app
from flask_apscheduler import APScheduler


def test_auto_jobs():
    with app.app_context():
        for job_id in scheduler.get_jobs():
            print(job_id)
            print(job_id.next_run_time)


def my_listener(event):
    if event.exception:
        print('The job crashed :(')
    else:
        print('The job worked :)')


if __name__ == "__main__":
    scheduler = APScheduler()
    scheduler.init_app(app)
    scheduler.start()

    scheduler.add_listener(my_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
    test_auto_jobs()
    app.run(debug=True)
Exemplo n.º 3
0
        os.system('python bot.py')
    except Exception as e:
        log.error('bot crash', exc_info=e)


def scheduler_event_listener(event: apscheduler.events.JobExecutionEvent):
    log.info('scheduler event', evt=event)
    if event.exception:
        log.error('The job crashed :(', exc_info=event.exception)

    else:
        log.info('The job worked :)')


scheduler.add_listener(
    scheduler_event_listener,
    apscheduler.events.EVENT_JOB_EXECUTED | apscheduler.events.EVENT_JOB_ERROR)


@scheduler.task(trigger='interval', seconds=60)
def tick():
    print('Tick! The time is: %s' % datetime.datetime.now())


log.info('jobs added', count=len(scheduler.get_jobs()))


@app.route('/')
def root():
    return "OK"
Exemplo n.º 4
0
                      {
                          'modelName': model_name,
                          'status':
                              'ready'
                              if os.listdir(f'{MODEL_DIR}/{model_name}')
                              else 'training'
                      }
                      for model_name in next(os.walk(MODEL_DIR))[1]
                      if model_name != 'pretrained'
                  ]
    }


def create_model(model_name, iterations):
    os.mkdir(f'{MODEL_DIR}/{model_name}')
    scheduler.add_job(
        id=f'train_{model_name}',
        func=train_model,
        args=[model_name, iterations],
        trigger='date'
    )


def job_failed(event):
    match = model_name_regex.match(event.job_id)
    if match:
        os.rmdir(f'{MODEL_DIR}/{match.groups()[0]}')


scheduler.add_listener(job_failed, EVENT_JOB_ERROR)
Exemplo n.º 5
0
class TestScheduler(TestCase):
    def setUp(self):
        self.app = Flask(__name__)
        self.scheduler = APScheduler()
        self.scheduler_two = APScheduler(app=self.app)

    def test_running(self):
        self.assertFalse(self.scheduler.running)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)

    def test_start_with_allowed_hosts(self):
        self.app.config['SCHEDULER_ALLOWED_HOSTS'] = ['any_server_name']
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertFalse(self.scheduler.running)

    def test_start_without_allowed_hosts(self):
        self.app.config['SCHEDULER_ALLOWED_HOSTS'] = []
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertFalse(self.scheduler.running)

    def test_shutdown(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_load_jobs_from_config(self):
        self.app.config['JOBS'] = [{
            'id': 'job1',
            'func': 'tests.test_api:job1',
            'trigger': 'interval',
            'seconds': 10,
        }]
        self.app.config['SCHEDULER_JOBSTORES'] = {
            "default": apscheduler.jobstores.memory.MemoryJobStore()
        }
        self.app.config['SCHEDULER_EXECUTORS'] = {
            "default": {
                "type": "threadpool"
            }
        }
        self.app.config['SCHEDULER_JOB_DEFAULTS'] = {"coalesce": True}
        self.app.config['SCHEDULER_TIMEZONE'] = utc

        self.scheduler.init_app(app=self.app)
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

    def test_task_decorator(self):
        @self.scheduler.task('interval', seconds=10, id='job1')
        def decorated_job():
            pass

        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

    def test_state_prop(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.state)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.state)

    def test_scheduler_prop(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertIsNotNone(self.scheduler.scheduler)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_pause_resume(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)
        self.scheduler.pause()
        self.assertTrue(self.scheduler.state == 2)
        self.scheduler.resume()
        self.assertTrue(self.scheduler.state == 1)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_listener(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)
        self.scheduler.add_listener(None)
        self.scheduler.remove_listener(None)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_remove_job(self):
        @self.scheduler.task('interval', seconds=10, id='job1')
        def decorated_job():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

        self.scheduler.remove_job('job1')
        self.assertFalse(self.scheduler.get_job('job1'))
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_delete_job(self):
        @self.scheduler.task('interval', seconds=10, id='job1')
        def decorated_job():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

        self.scheduler.delete_job('job1')
        self.assertFalse(self.scheduler.get_job('job1'))
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_remove_all_jobs(self):
        @self.scheduler.task('interval', hours=1, id='job1')
        def decorated_job():
            pass

        @self.scheduler.task('interval', hours=1, id='job2')
        def decorated_job2():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        jobs = self.scheduler.get_jobs()
        self.assertTrue(len(jobs) == 2)
        self.scheduler.remove_all_jobs()

        self.assertFalse(self.scheduler.get_job('job1'))
        self.assertFalse(self.scheduler.get_job('job2'))

        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_delete_all_jobs(self):
        @self.scheduler.task('interval', hours=1, id='job1')
        def decorated_job():
            pass

        @self.scheduler.task('interval', hours=1, id='job2')
        def decorated_job2():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        jobs = self.scheduler.get_jobs()
        self.assertTrue(len(jobs) == 2)
        self.scheduler.delete_all_jobs()

        self.assertFalse(self.scheduler.get_job('job1'))
        self.assertFalse(self.scheduler.get_job('job2'))

        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_job_to_dict(self):
        @self.scheduler.task('interval',
                             hours=1,
                             id='job1',
                             end_date=datetime.datetime.now(),
                             weeks=1,
                             days=1,
                             seconds=99)
        def decorated_job():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

        self.assertTrue(len(utils.job_to_dict(job)))
        self.scheduler.delete_job('job1')
        self.assertFalse(self.scheduler.get_job('job1'))
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)
Exemplo n.º 6
0
from templates.display_module import display_module as display_module_blueprint

app.register_blueprint(display_module_blueprint, url_prefix='/display_module')

from templates.statistic_module import statistic_module as statistic_module

app.register_blueprint(statistic_module, url_prefix='/statistic_module')

app.config.from_object(Config())
app.config['SECRET_KEY'] = 'MY_KEY'

scheduler = APScheduler()
scheduler.init_app(app)
scheduler._logger = custom_log.get_logger('root')
scheduler.add_listener(err_listener, EVENT_JOB_ERROR | EVENT_JOB_MISSED)

# @app.route('/job', methods=['GET', 'POST'])
# @login_required
# def apscheduler_jobs():
#     jobs_array = scheduler.get_jobs()
#     jobs_lists = []
#
#     for obj in jobs_array:
#         dic = {'id': obj.id, 'name': obj.name}
#         func_name = obj.id
#         if func_name in const.JOB_START_TIME_DICT:
#             dic['start_time'] = const.JOB_START_TIME_DICT[func_name]
#
#         if func_name in const.JOB_END_TIME_DICT:
#             dic['end_time'] = const.JOB_END_TIME_DICT[func_name]
Exemplo n.º 7
0
from templates.display_module import display_module as display_module_blueprint

app.register_blueprint(display_module_blueprint, url_prefix='/display_module')

from templates.statistic_module import statistic_module as statistic_module

app.register_blueprint(statistic_module, url_prefix='/statistic_module')

app.config.from_object(Config())
app.config['SECRET_KEY'] = 'MY_KEY'

scheduler = APScheduler()
scheduler.init_app(app)
scheduler._logger = custom_log.get_logger('root')
scheduler.add_listener(
    err_listener, EVENT_JOB_ERROR | EVENT_JOB_MISSED | EVENT_JOB_MAX_INSTANCES)

# @app.route('/job', methods=['GET', 'POST'])
# @login_required
# def apscheduler_jobs():
#     jobs_array = scheduler.get_jobs()
#     jobs_lists = []
#
#     for obj in jobs_array:
#         dic = {'id': obj.id, 'name': obj.name}
#         func_name = obj.id
#         if func_name in const.JOB_START_TIME_DICT:
#             dic['start_time'] = const.JOB_START_TIME_DICT[func_name]
#
#         if func_name in const.JOB_END_TIME_DICT:
#             dic['end_time'] = const.JOB_END_TIME_DICT[func_name]
Exemplo n.º 8
0
    Authority_Visitor = 2


pymysql.install_as_MySQLdb()
db = SQLAlchemy()

scheduler = APScheduler()


def event_handle(e):
    job = scheduler.get_job(e.job_id)
    bark_root("event_handle error/missed/max")


scheduler.add_listener(event_handle,
                       mask=(events.EVENT_JOB_ERROR | events.EVENT_JOB_MISSED
                             | events.EVENT_JOB_MAX_INSTANCES))


class MyLog(db.Model):
    __tablename__ = 'mylog'
    id = db.Column(db.Integer, primary_key=True)
    app_name = db.Column(db.Text, nullable=False)
    content = db.Column(db.Text, nullable=False)
    createTime = db.Column(db.DateTime, default=datetime.now)

    def __repr__(self):
        return '<log APP:%r>' % self.app_name


def my_log(name, content):
Exemplo n.º 9
0
# ====== 上面几行是开启 scheduler_api 的,选用


# 定时运行的任务
def now():
    print(datetime.datetime.now())


# 任务监控
def listener(event):
    if event.exception:
        print('got an exception', event.exception)


sched.add_listener(listener, EVENT_JOB_ERROR)
sched.init_app(app)
sched.add_job('job1', now, trigger='interval', seconds=5)
sched.start()


@app.route('/')
def index():
    return 'index'


@app.route('/jobs')
def show_job():
    return get_jobs()

Exemplo n.º 10
0
            {
                "id": "hourly",
                "func": get_posts,
                "kwargs": {
                    "url": url
                },
                "trigger": "interval",
                "hours": 1
            },
            # trigger to run immediately for initial state
            {
                "id": "immediate",
                "func": get_posts,
                "kwargs": {
                    "url": url
                }
            },
        ]
        SCHEDULER_API_ENABLED = True
        SCHEDULER_TIMEZONE = "UTC"

    app.config.from_object(Config())

    flask_scheduler = APScheduler()
    flask_scheduler.init_app(app)
    flask_scheduler.start()

    flask_scheduler.add_listener(update_posts_from_event, EVENT_JOB_EXECUTED)

    app.run(host="0.0.0.0", port=os.getenv("PORT", 5000))