Coverage for portality / tasks / auto_assign_editor_group_data.py: 84%
50 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
1from portality import models
2from portality.background import BackgroundTask, BackgroundApi
3from portality.bll import DOAJ, exceptions
4from portality.core import app
5from portality.tasks.helpers import background_helper
6from portality.tasks.redis_huey import scheduled_short_queue as queue
8class AutoAssignEditorGroupDataTask(BackgroundTask):
10 __action__ = "auto_assign_editor_group_data"
12 def run(self):
13 """
14 Execute the task as specified by the background_job
15 :return:
16 """
18 params = self.background_job.params
19 prune = self.get_param(params, "prune", True)
21 try:
22 routers = DOAJ.applicationService().retrieve_ur_editor_group_sheets(keep_history=2 if prune else -1)
23 except exceptions.RemoteServiceException as e:
24 msg = "Failed to retrieve data from google sheets: " + str(e)
25 self.background_job.add_audit_message(msg)
26 self.background_job.fail()
27 DOAJ.adminAlertsService().alert("bg." + self.__action__, msg)
28 return
29 except ValueError as e:
30 msg = "At least some of the data was invalid: " + str(e)
31 self.background_job.add_audit_message(msg)
32 self.background_job.fail()
33 DOAJ.adminAlertsService().alert("bg." + self.__action__, msg)
34 return
36 self.background_job.add_audit_message("Latest mapping sheets retrieved and loaded; {x} rules loaded".format(x=len(routers)))
38 def cleanup(self):
39 """
40 Cleanup after a successful OR failed run of the task
41 :return:
42 """
43 pass
45 @classmethod
46 def prepare(cls, username, **kwargs):
47 """
48 Take an arbitrary set of keyword arguments and return an instance of a BackgroundJob,
49 or fail with a suitable exception
51 :param kwargs: arbitrary keyword arguments pertaining to this task type
52 :return: a BackgroundJob instance representing this task
53 """
54 prune = kwargs.get("prune", True)
55 params = {}
56 cls.set_param(params, "prune", prune)
58 # prepare a job record
59 job = background_helper.create_job(username, cls.__action__, queue_id=huey_helper.queue_id, params=params)
60 return job
62 @classmethod
63 def submit(cls, background_job):
64 """
65 Submit the specified BackgroundJob to the background queue
67 :param background_job: the BackgroundJob instance
68 :return:
69 """
70 background_job.save()
71 auto_assign_editor_group_data.schedule(args=(background_job.id,), delay=10)
74huey_helper = AutoAssignEditorGroupDataTask.create_huey_helper(queue)
77@huey_helper.register_schedule
78def scheduled_auto_assign_editor_group_data():
79 user = app.config.get("SYSTEM_USERNAME")
80 job = AutoAssignEditorGroupDataTask.prepare(user)
81 AutoAssignEditorGroupDataTask.submit(job)
84@huey_helper.register_execute(is_load_config=False)
85def auto_assign_editor_group_data(job_id):
86 job = models.BackgroundJob.pull(job_id)
87 task = AutoAssignEditorGroupDataTask(job)
88 BackgroundApi.execute(task)