swh.lister.gitlab: Make the lister's task instance parametric

Related T989
This commit is contained in:
Antoine R. Dumont (@ardumont) 2018-07-03 15:26:41 +02:00
parent 3760708897
commit b84db26bee
No known key found for this signature in database
GPG key ID: 52E2E9840D10C3B8
2 changed files with 15 additions and 13 deletions

View file

@ -1,4 +1,4 @@
# Copyright (C) 2017 the Software Heritage developers
# Copyright (C) 2017-2018 the Software Heritage developers
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@ -39,34 +39,35 @@ class ListerTaskBase(Task, metaclass=AbstractTaskMeta):
task_queue = AbstractAttribute('Celery Task queue name')
@abc.abstractmethod
def new_lister(self):
def new_lister(self, *args, **kwargs):
"""Return a new lister of the appropriate type.
"""
pass
@abc.abstractmethod
def run_task(self):
def run_task(self, *args, **kwargs):
pass
class IndexingDiscoveryListerTask(ListerTaskBase):
def run_task(self):
lister = self.new_lister()
def run_task(self, *args, **kwargs):
lister = self.new_lister(*args, **kwargs)
return lister.run(min_index=lister.db_last_index(), max_index=None)
class IndexingRangeListerTask(ListerTaskBase):
def run_task(self, start, end):
lister = self.new_lister()
def run_task(self, start, end, *args, **kwargs):
lister = self.new_lister(*args, **kwargs)
return lister.run(min_index=start, max_index=end)
class IndexingRefreshListerTask(ListerTaskBase):
GROUP_SPLIT = 10000
def run_task(self):
lister = self.new_lister()
def run_task(self, *args, **kwargs):
lister = self.new_lister(*args, **kwargs)
ranges = lister.db_partition_indices(self.GROUP_SPLIT)
random.shuffle(ranges)
range_task = IndexingRangeListerTask()
group(range_task.s(minv, maxv) for minv, maxv in ranges)()
group(range_task.s(minv, maxv, *args, **kwargs)
for minv, maxv in ranges)()

View file

@ -10,9 +10,10 @@ from .lister import GitLabLister
class GitLabDotComListerTask(ListerTaskBase):
def new_lister(self):
return GitLabLister(lister_name='gitlab.com',
api_baseurl='https://gitlab.com/api/v4')
def new_lister(self, lister_name='gitlab.com',
api_baseurl='https://gitlab.com/api/v4'):
return GitLabLister(
lister_name=lister_name, api_baseurl=api_baseurl)
class IncrementalGitLabDotComLister(GitLabDotComListerTask,