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

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 

7 

8class AutoAssignEditorGroupDataTask(BackgroundTask): 

9 

10 __action__ = "auto_assign_editor_group_data" 

11 

12 def run(self): 

13 """ 

14 Execute the task as specified by the background_job  

15 :return: 

16 """ 

17 

18 params = self.background_job.params 

19 prune = self.get_param(params, "prune", True) 

20 

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 

35 

36 self.background_job.add_audit_message("Latest mapping sheets retrieved and loaded; {x} rules loaded".format(x=len(routers))) 

37 

38 def cleanup(self): 

39 """ 

40 Cleanup after a successful OR failed run of the task 

41 :return: 

42 """ 

43 pass 

44 

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 

50 

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) 

57 

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 

61 

62 @classmethod 

63 def submit(cls, background_job): 

64 """ 

65 Submit the specified BackgroundJob to the background queue 

66 

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) 

72 

73 

74huey_helper = AutoAssignEditorGroupDataTask.create_huey_helper(queue) 

75 

76 

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) 

82 

83 

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)