Implement a base pattern for listers with no state storage
This commit is contained in:
parent
b63aa83b41
commit
734901747b
2 changed files with 60 additions and 0 deletions
|
@ -258,3 +258,13 @@ class Lister(Generic[StateType, PageType]):
|
|||
"""
|
||||
config = load_from_envvar()
|
||||
return cls.from_config(**config, **kwargs)
|
||||
|
||||
|
||||
class StatelessLister(Lister[None, PageType], Generic[PageType]):
|
||||
def state_from_dict(self, d: BackendStateType) -> None:
|
||||
"""Always return empty state"""
|
||||
return None
|
||||
|
||||
def state_to_dict(self, state: None) -> BackendStateType:
|
||||
"""Always set empty state"""
|
||||
return {}
|
||||
|
|
|
@ -111,3 +111,53 @@ def test_run(swh_scheduler):
|
|||
assert stored_lister.current_state["updated"] == "yes"
|
||||
|
||||
check_listed_origins(swh_scheduler, lister, stored_lister)
|
||||
|
||||
|
||||
class InstantiableStatelessLister(pattern.StatelessLister[PageType]):
|
||||
LISTER_NAME = "test-stateless-lister"
|
||||
|
||||
|
||||
def test_stateless_instantiation(swh_scheduler):
|
||||
lister = InstantiableStatelessLister(
|
||||
scheduler=swh_scheduler, url="https://example.com", instance="example.com",
|
||||
)
|
||||
|
||||
# check the lister was registered in the scheduler backend
|
||||
stored_lister = swh_scheduler.get_or_create_lister(
|
||||
name="test-stateless-lister", instance_name="example.com"
|
||||
)
|
||||
assert stored_lister == lister.lister_obj
|
||||
assert stored_lister.current_state == {}
|
||||
assert lister.state is None
|
||||
|
||||
with pytest.raises(NotImplementedError):
|
||||
lister.run()
|
||||
|
||||
|
||||
class RunnableStatelessLister(ListerMixin, InstantiableStatelessLister):
|
||||
def finalize(self):
|
||||
self.updated = True
|
||||
|
||||
|
||||
def test_stateless_run(swh_scheduler):
|
||||
lister = RunnableStatelessLister(
|
||||
scheduler=swh_scheduler, url="https://example.com", instance="example.com"
|
||||
)
|
||||
|
||||
update_date = lister.lister_obj.updated
|
||||
|
||||
run_result = lister.run()
|
||||
|
||||
assert run_result.pages == 2
|
||||
assert run_result.origins == 20
|
||||
|
||||
stored_lister = swh_scheduler.get_or_create_lister(
|
||||
name="test-stateless-lister", instance_name="example.com"
|
||||
)
|
||||
|
||||
# Check that the finalize operation happened
|
||||
assert stored_lister.updated > update_date
|
||||
assert stored_lister.current_state == {}
|
||||
|
||||
# And that all origins are stored
|
||||
check_listed_origins(swh_scheduler, lister, stored_lister)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue