diff --git a/swh/scheduler/backend.py b/swh/scheduler/backend.py --- a/swh/scheduler/backend.py +++ b/swh/scheduler/backend.py @@ -137,6 +137,31 @@ cur.execute(query) return cur.fetchall() + @db_transaction() + def get_lister( + self, name: str, instance_name: Optional[str] = None, db=None, cur=None + ) -> Optional[Lister]: + """Retrieve information about the given instance of the lister from the + database. + """ + if instance_name is None: + instance_name = "" + + select_cols = ", ".join(Lister.select_columns()) + + query = f""" + select {select_cols} from listers + where (name, instance_name) = (%s, %s) + """ + + cur.execute(query, (name, instance_name)) + + ret = cur.fetchone() + if not ret: + return None + + return Lister(**ret) + @db_transaction() def get_or_create_lister( self, name: str, instance_name: Optional[str] = None, db=None, cur=None diff --git a/swh/scheduler/interface.py b/swh/scheduler/interface.py --- a/swh/scheduler/interface.py +++ b/swh/scheduler/interface.py @@ -262,6 +262,15 @@ """Search task run for a task id""" ... + @remote_api_endpoint("lister/get") + def get_lister( + self, name: str, instance_name: Optional[str] = None + ) -> Optional[Lister]: + """Retrieve information about the given instance of the lister from the + database. + """ + ... + @remote_api_endpoint("lister/get_or_create") def get_or_create_lister( self, name: str, instance_name: Optional[str] = None diff --git a/swh/scheduler/tests/test_api_client.py b/swh/scheduler/tests/test_api_client.py --- a/swh/scheduler/tests/test_api_client.py +++ b/swh/scheduler/tests/test_api_client.py @@ -42,6 +42,7 @@ expected_rules = set( "/" + rule for rule in ( + "lister/get", "lister/get_or_create", "lister/update", "origins/get", diff --git a/swh/scheduler/tests/test_scheduler.py b/swh/scheduler/tests/test_scheduler.py --- a/swh/scheduler/tests/test_scheduler.py +++ b/swh/scheduler/tests/test_scheduler.py @@ -646,6 +646,21 @@ assert lister == lister_get_again + def test_get_lister(self, swh_scheduler): + for lister_args in LISTERS: + assert swh_scheduler.get_lister(**lister_args) is None + + db_listers = [] + for lister_args in LISTERS: + db_listers.append(swh_scheduler.get_or_create_lister(**lister_args)) + + for lister, lister_args in zip(db_listers, LISTERS): + lister_get_again = swh_scheduler.get_lister( + lister.name, lister.instance_name + ) + + assert lister == lister_get_again + def test_update_lister(self, swh_scheduler, stored_lister): lister = attr.evolve(stored_lister, current_state={"updated": "now"})