From c3b014d06e624993bee3036436e4b03fdcea6714 Mon Sep 17 00:00:00 2001 From: Joakim Soderlund Date: Wed, 25 Oct 2017 21:09:50 +0200 Subject: [PATCH] Add selector to update task arguments --- fimfarchive/tasks/update.py | 10 +++++++--- tests/tasks/test_update.py | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/fimfarchive/tasks/update.py b/fimfarchive/tasks/update.py index ed9d7b4..a93b570 100644 --- a/fimfarchive/tasks/update.py +++ b/fimfarchive/tasks/update.py @@ -30,7 +30,7 @@ from fimfarchive.exceptions import InvalidStoryError from fimfarchive.fetchers import Fetcher from fimfarchive.flavors import DataFormat, UpdateStatus from fimfarchive.mappers import StoryPathMapper -from fimfarchive.selectors import UpdateSelector +from fimfarchive.selectors import Selector, UpdateSelector from fimfarchive.signals import Signal, SignalSender from fimfarchive.stories import Story from fimfarchive.utils import PersistedDict @@ -74,6 +74,7 @@ class UpdateTask(SignalSender): self, fimfarchive: Fetcher, fimfiction: Fetcher, + selector: Selector = None, workdir: str = DEFAULT_WORKDIR, retries: int = DEFAULT_RETRIES, skips: int = DEFAULT_SKIPS, @@ -84,14 +85,19 @@ class UpdateTask(SignalSender): Args: fimfarchive: Fetcher for the old release. fimfiction: Fetcher for the new release. + selector: Selector for which story to save. workdir: Path for storage of state and stories. retries: Number of retries before giving up. skips: Number of skips before giving up. """ super().__init__() + if selector is None: + selector = UpdateSelector() + self.fimfarchive = fimfarchive self.fimfiction = fimfiction + self.select = selector self.workdir = workdir self.retries = retries self.skips = skips @@ -100,8 +106,6 @@ class UpdateTask(SignalSender): state_path = os.path.join(self.workdir, self.state_file) self.state = PersistedDict(state_path, self.state_vars) - self.select = UpdateSelector() - meta_mapper = self.get_mapper('meta') skip_mapper = self.get_mapper('skip') epub_mapper = self.get_mapper('epub') diff --git a/tests/tasks/test_update.py b/tests/tasks/test_update.py index 8939968..40a367f 100644 --- a/tests/tasks/test_update.py +++ b/tests/tasks/test_update.py @@ -29,6 +29,7 @@ import pytest from fimfarchive.exceptions import InvalidStoryError, StorySourceError from fimfarchive.fetchers import Fetcher from fimfarchive.flavors import DataFormat, UpdateStatus +from fimfarchive.selectors import RefetchSelector, UpdateSelector from fimfarchive.stories import Story from fimfarchive.tasks.update import ( UpdateTask, SUCCESS_DELAY, SKIPPED_DELAY, FAILURE_DELAY, @@ -97,13 +98,21 @@ class TestUpdateTask: return DummyFetcher() @pytest.fixture - def task(self, fimfarchive, fimfiction, tmpdir): + def selector(self): + """ + Returns an `UpdateSelector` instance. + """ + return UpdateSelector() + + @pytest.fixture + def task(self, fimfarchive, fimfiction, selector, tmpdir): """ Returns an `UpdateTask` instance. """ return UpdateTask( fimfiction=fimfiction, fimfarchive=fimfarchive, + selector=selector, workdir=str(tmpdir), retries=2, skips=2, @@ -267,3 +276,25 @@ class TestUpdateTask: with pytest.raises(ValueError): task.write(story) + + +class TestRefetchingUpdateTask(TestUpdateTask): + """ + Tests update task with a refetch selector. + """ + + @pytest.fixture + def selector(self): + """ + Returns a `RefetchSelector` instance. + """ + return RefetchSelector() + + def test_revived_story(self, task, fimfarchive, fimfiction): + """ + Tests updating for a revived story. + """ + fimfarchive.add(key=1, date=1) + target = fimfiction.add(key=1, date=1) + + self.verify_fetch(task, target, UpdateStatus.UPDATED)