Unverified Commit c32cdd75 authored by Peter Stanko's avatar Peter Stanko
Browse files

Archive submissions for the archived project

parent bc1ff7d9
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -13,6 +13,11 @@ def setup_periodic_tasks(sender, **kwargs):
                             delete_cancelled_submissions.s(),
                             name="Delete all cancelled tasks after one day")

    sender.add_periodic_task(24 * 60 * 60,
                             archive_submissions_in_arch_project.s(),
                             name="Archive all submissions in archived project")
    


@celery_app.task
def abort_non_proc_submissions(**kwargs):
@@ -28,3 +33,9 @@ def abort_non_proc_submissions(**kwargs):
def delete_cancelled_submissions():
    subm_service = RestService().submissions
    subm_service.delete_cancelled_submissions()


@celery_app.task
def archive_submissions_in_arch_project():
    subm_service = RestService().submissions
    subm_service.archive_submissions()
+4 −0
Original line number Diff line number Diff line
@@ -486,6 +486,10 @@ class Project(db.Model, EntityBase, NamedMixin):
            return ProjectState.ARCHIVED
        return ProjectState.INACTIVE

    @hybrid_property
    def is_archived(self) -> bool:
        return self.state() == ProjectState.ARCHIVED

    def set_config(self, **kwargs):
        """Sets project configuration
        Keyword Args:
+22 −2
Original line number Diff line number Diff line
@@ -258,11 +258,31 @@ class SubmissionsService(GeneralService):
    def delete_cancelled_submissions(self):
        one_day = datetime.timedelta(hours=24)
        one_day_ago = datetime.datetime.now() - one_day
        query_filter = Submission.query.filter(Submission.state == SubmissionState.CANCELLED &
        query_filter = Submission.query.filter(
            Submission.state.in_(SubmissionState.CANCELLED, SubmissionState.ABORTED) &
            Submission.created_at > one_day_ago)
        
        for subm in query_filter.all():
            SubmissionsService(subm).delete()

    def archive_submissions(self):
        query_filter = Submission.query.join(Submission.project).filter(
            Submission.state == SubmissionState.FINISHED &
            Project.is_archived)

        for subm in query_filter.all():
            SubmissionsService(subm).archive()

    def archive(self):
        log.info(f"[ARCHIVE] Submission archive submission files: {self.submission.log_name}")
        st_entity = storage.submissions.get(self.submission.id)
        if st_entity:
            st_entity.clean()
        log.info(f"[ARCHIVE] Submission archive result files: {self.submission.log_name}")
        st_entity = storage.results.get(self.submission.id)
        if st_entity:
            st_entity.clean()


def nonempty_intersection(provided: list, required: list):
    if not required: