Blame pagure/lib/tasks_utils.py
|
Pierre-Yves Chibon |
1aac43 |
# -*- coding: utf-8 -*-
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
"""
|
|
Pierre-Yves Chibon |
1aac43 |
(c) 2018 - Copyright Red Hat Inc
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
Authors:
|
|
Pierre-Yves Chibon |
1aac43 |
Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
"""
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
67d1cc |
from __future__ import unicode_literals, absolute_import
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
import gc
|
|
Pierre-Yves Chibon |
1aac43 |
from functools import wraps
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
cf98be |
import pagure.lib.model_base
|
|
Pierre-Yves Chibon |
1aac43 |
from pagure.config import config as pagure_config
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
def pagure_task(function):
|
|
Pierre-Yves Chibon |
1aac43 |
""" Simple decorator that is responsible for:
|
|
Pierre-Yves Chibon |
1aac43 |
* Adjusting the status of the task when it starts
|
|
Pierre-Yves Chibon |
1aac43 |
* Creating and cleaning up a SQLAlchemy session
|
|
Pierre-Yves Chibon |
1aac43 |
"""
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
@wraps(function)
|
|
Pierre-Yves Chibon |
1aac43 |
def decorated_function(self, *args, **kwargs):
|
|
Pierre-Yves Chibon |
1aac43 |
""" Decorated function, actually does the work. """
|
|
Pierre-Yves Chibon |
1aac43 |
if self is not None:
|
|
Pierre-Yves Chibon |
1aac43 |
try:
|
|
Pierre-Yves Chibon |
1aac43 |
self.update_state(state="RUNNING")
|
|
Pierre-Yves Chibon |
1aac43 |
except TypeError:
|
|
Pierre-Yves Chibon |
1aac43 |
pass
|
|
Pierre-Yves Chibon |
8e9b7f |
session = pagure.lib.model_base.create_session(pagure_config["DB_URL"])
|
|
Pierre-Yves Chibon |
1aac43 |
try:
|
|
Pierre-Yves Chibon |
1aac43 |
return function(self, session, *args, **kwargs)
|
|
Pierre-Yves Chibon |
1aac43 |
except: # noqa: E722
|
|
Pierre-Yves Chibon |
1aac43 |
# if the task has raised for any reason, we need to rollback the
|
|
Pierre-Yves Chibon |
1aac43 |
# session first to not leave open uncomitted transaction hanging
|
|
Pierre-Yves Chibon |
1aac43 |
session.rollback()
|
|
Pierre-Yves Chibon |
1aac43 |
raise
|
|
Pierre-Yves Chibon |
1aac43 |
finally:
|
|
Pierre-Yves Chibon |
1aac43 |
session.remove()
|
|
Pierre-Yves Chibon |
1aac43 |
gc_clean()
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
return decorated_function
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
|
|
Pierre-Yves Chibon |
1aac43 |
def gc_clean():
|
|
Pierre-Yves Chibon |
1aac43 |
""" Force a run of the garbage collector. """
|
|
Pierre-Yves Chibon |
1aac43 |
# https://pagure.io/pagure/issue/2302
|
|
Pierre-Yves Chibon |
1aac43 |
gc.collect()
|