From 6bf0300daaffdcd7df4391a1427e939efdacfccf Mon Sep 17 00:00:00 2001 From: yashlamba Date: Thu, 28 Nov 2024 14:56:20 +0100 Subject: [PATCH] curation: add EURecordCuration job --- site/setup.cfg | 2 ++ site/zenodo_rdm/curation/jobs.py | 47 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 site/zenodo_rdm/curation/jobs.py diff --git a/site/setup.cfg b/site/setup.cfg index e0cec983..37894d46 100644 --- a/site/setup.cfg +++ b/site/setup.cfg @@ -93,6 +93,8 @@ invenio_search.index_templates = zenodo_rdm = zenodo_rdm.index_templates idutils.custom_schemes = edmo = zenodo_rdm.custom_schemes:get_scheme_config_func +invenio_jobs.jobs = + eu_records_curation = zenodo_rdm.curation.jobs:EURecordCuration [bdist_wheel] universal = 1 diff --git a/site/zenodo_rdm/curation/jobs.py b/site/zenodo_rdm/curation/jobs.py new file mode 100644 index 00000000..0afbf809 --- /dev/null +++ b/site/zenodo_rdm/curation/jobs.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2021-2024 CERN. +# +# Invenio-Vocabularies is free software; you can redistribute it and/or +# modify it under the terms of the MIT License; see LICENSE file for more +# details. +"""Jobs module.""" + +from datetime import datetime, timezone + +from invenio_jobs.jobs import JobType +from marshmallow import Schema, fields +from marshmallow_utils.fields import ISODateString + +from zenodo_rdm.curation.tasks import run_eu_record_curation + + +class ArgsSchema(Schema): + """Schema of task input arguments.""" + + since = ISODateString() + job_arg_schema = fields.String( + metadata={"type": "hidden"}, + dump_default="ArgsSchema", + load_default="ArgsSchema", + ) + + +class EURecordCuration(JobType): + """EU Record Curation Job.""" + + arguments_schema = ArgsSchema + task = run_eu_record_curation + description = "Curate published records for EU community" + title = "EU Record Curation" + id = "eu_record_curation" + + @classmethod + def default_args(cls, job_obj, since=None, **kwargs): + """Generate default job arguments here.""" + if since is None and job_obj.last_runs["success"]: + since = job_obj.last_runs["success"].started_at + else: + since = since or datetime.now(timezone.utc) + + return {"since": str(since)}