11from __future__ import annotations
22import logging
3+ from abc import ABC , abstractmethod
4+ from typing import Any , List
35import os
46#from celery.result import AsyncResult
57from celery import group , chain
@@ -157,84 +159,133 @@ def non_repo_domain_tasks(self):
157159 tasks .apply_async ()
158160
159161
160- def build_primary_repo_collect_request (session , logger , enabled_phase_names , days_until_collect_again = 15 ):
161- #Add all required tasks to a list and pass it to the CollectionRequest
162- primary_enabled_phases = []
163- primary_gitlab_enabled_phases = []
162+ class CollectionRequestBuilder (ABC ):
163+ """Base class for collection request builders.
164164
165- #Primary jobs
166- if prelim_phase . __name__ in enabled_phase_names :
167- primary_enabled_phases . append ( prelim_phase )
165+ Enforces the `build(session, logger, enabled_phase_names, days_until_collect_again)`
166+ signature so all builders accept the same arguments.
167+ """
168168
169- primary_enabled_phases .append (primary_repo_collect_phase )
170- primary_gitlab_enabled_phases .append (primary_repo_collect_phase_gitlab )
169+ @abstractmethod
170+ def build (self , session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int ) -> "CollectionRequest" :
171+ """Build and return a `CollectionRequest` configured for this builder."""
172+ pass
171173
172- #task success is scheduled no matter what the config says.
173- def core_task_success_util_gen (repo_git , full_collection ):
174- return core_task_success_util .si (repo_git )
175174
176- primary_enabled_phases .append (core_task_success_util_gen )
177- primary_gitlab_enabled_phases .append (core_task_success_util_gen )
175+ class PrimaryCollectionRequestBuilder (CollectionRequestBuilder ):
176+ def build (self , session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 15 ) -> "CollectionRequest" :
177+ """Return a `CollectionRequest` for primary collections.
178178
179- primary_request = CollectionRequest ("core" ,primary_enabled_phases ,max_repo = 40 , days_until_collect_again = days_until_collect_again , gitlab_phases = primary_gitlab_enabled_phases )
180- primary_request .get_valid_repos (session )
181- return primary_request
179+ Parameters mirror the runtime API used across task builders so callers can
180+ pass `enabled_phase_names` and an interval `days_until_collect_again`.
181+ """
182+ # Build enabled phases
183+ primary_enabled_phases : List = []
184+ primary_gitlab_enabled_phases : List = []
182185
183- def build_secondary_repo_collect_request ( session , logger , enabled_phase_names , days_until_collect_again = 1 ):
184- #Deal with secondary collection
185- secondary_enabled_phases = []
186+ # Primary jobs
187+ if prelim_phase . __name__ in enabled_phase_names :
188+ primary_enabled_phases . append ( prelim_phase )
186189
187- if prelim_phase . __name__ in enabled_phase_names :
188- secondary_enabled_phases .append (prelim_phase_secondary )
190+ primary_enabled_phases . append ( primary_repo_collect_phase )
191+ primary_gitlab_enabled_phases .append (primary_repo_collect_phase_gitlab )
189192
193+ # Add success task
194+ def core_task_success_util_gen (repo_git , full_collection ):
195+ return core_task_success_util .si (repo_git )
190196
191- secondary_enabled_phases .append (secondary_repo_collect_phase )
197+ primary_enabled_phases .append (core_task_success_util_gen )
198+ primary_gitlab_enabled_phases .append (core_task_success_util_gen )
192199
193- def secondary_task_success_util_gen (repo_git , full_collection ):
194- return secondary_task_success_util .si (repo_git )
200+ primary_request = CollectionRequest ("core" ,primary_enabled_phases ,max_repo = 40 , days_until_collect_again = days_until_collect_again , gitlab_phases = primary_gitlab_enabled_phases )
201+ primary_request .get_valid_repos (session )
202+ return primary_request
195203
196- secondary_enabled_phases .append (secondary_task_success_util_gen )
197-
198- request = CollectionRequest ("secondary" ,secondary_enabled_phases ,max_repo = 60 , days_until_collect_again = days_until_collect_again )
199204
200- request .get_valid_repos (session )
201- return request
205+ class SecondaryCollectionRequestBuilder (CollectionRequestBuilder ):
206+ def build (self , session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 1 ) -> "CollectionRequest" :
207+ """Return a `CollectionRequest` for secondary collections."""
208+ # Secondary collection
209+ secondary_enabled_phases : List = []
210+
211+ if prelim_phase .__name__ in enabled_phase_names :
212+ secondary_enabled_phases .append (prelim_phase_secondary )
213+
214+
215+ secondary_enabled_phases .append (secondary_repo_collect_phase )
216+
217+ def secondary_task_success_util_gen (repo_git , full_collection ):
218+ return secondary_task_success_util .si (repo_git )
219+
220+ secondary_enabled_phases .append (secondary_task_success_util_gen )
221+
222+ request = CollectionRequest ("secondary" ,secondary_enabled_phases ,max_repo = 60 , days_until_collect_again = days_until_collect_again )
223+
224+ request .get_valid_repos (session )
225+ return request
226+
227+
228+ class FacadeCollectionRequestBuilder (CollectionRequestBuilder ):
229+ def build (self , session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 10 ) -> "CollectionRequest" :
230+ """Return a `CollectionRequest` for facade (git) collections."""
231+ # Facade collection
232+ facade_enabled_phases : List = []
233+
234+ facade_enabled_phases .append (facade_phase )
235+
236+ def facade_task_success_util_gen (repo_git , full_collection ):
237+ return facade_task_success_util .si (repo_git )
238+
239+ facade_enabled_phases .append (facade_task_success_util_gen )
240+
241+ def facade_task_update_weight_util_gen (repo_git , full_collection ):
242+ return git_update_commit_count_weight .si (repo_git )
243+
244+ facade_enabled_phases .append (facade_task_update_weight_util_gen )
245+
246+ request = CollectionRequest ("facade" ,facade_enabled_phases ,max_repo = 30 , days_until_collect_again = days_until_collect_again )
247+
248+ request .get_valid_repos (session )
249+ return request
250+
202251
252+ class MLCollectionRequestBuilder (CollectionRequestBuilder ):
253+ def build (self , session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 40 ) -> "CollectionRequest" :
254+ """Return a `CollectionRequest` for machine-learning related collections."""
255+ ml_enabled_phases : List = []
203256
204- def build_facade_repo_collect_request (session , logger , enabled_phase_names , days_until_collect_again = 10 ):
205- #Deal with facade collection
206- facade_enabled_phases = []
257+ ml_enabled_phases .append (machine_learning_phase )
207258
208- facade_enabled_phases .append (facade_phase )
259+ def ml_task_success_util_gen (repo_git , full_collection ):
260+ return ml_task_success_util .si (repo_git )
209261
210- def facade_task_success_util_gen (repo_git , full_collection ):
211- return facade_task_success_util .si (repo_git )
262+ ml_enabled_phases .append (ml_task_success_util_gen )
212263
213- facade_enabled_phases .append (facade_task_success_util_gen )
264+ request = CollectionRequest ("ml" ,ml_enabled_phases ,max_repo = 5 , days_until_collect_again = days_until_collect_again )
265+ request .get_valid_repos (session )
266+ return request
214267
215- def facade_task_update_weight_util_gen (repo_git , full_collection ):
216- return git_update_commit_count_weight .si (repo_git )
217268
218- facade_enabled_phases . append ( facade_task_update_weight_util_gen )
269+ # Backwards-compatible thin wrappers (keep API stable )
219270
220- request = CollectionRequest ("facade" ,facade_enabled_phases ,max_repo = 30 , days_until_collect_again = days_until_collect_again )
271+ def build_primary_repo_collect_request (session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 15 ) -> "CollectionRequest" :
272+ """Thin wrapper around `PrimaryCollectionRequestBuilder.build` to preserve API compatibility."""
273+ return PrimaryCollectionRequestBuilder ().build (session , logger , enabled_phase_names , days_until_collect_again )
221274
222- request .get_valid_repos (session )
223- return request
224275
225- def build_ml_repo_collect_request (session , logger , enabled_phase_names , days_until_collect_again = 40 ):
226- ml_enabled_phases = []
276+ def build_secondary_repo_collect_request (session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 1 ) -> "CollectionRequest" :
277+ """Thin wrapper around `SecondaryCollectionRequestBuilder.build` to preserve API compatibility."""
278+ return SecondaryCollectionRequestBuilder ().build (session , logger , enabled_phase_names , days_until_collect_again )
227279
228- ml_enabled_phases .append (machine_learning_phase )
229280
230- def ml_task_success_util_gen (repo_git , full_collection ):
231- return ml_task_success_util .si (repo_git )
281+ def build_facade_repo_collect_request (session : Any , logger : logging .Logger , enabled_phase_names : List [str ], days_until_collect_again : int = 10 ) -> "CollectionRequest" :
282+ """Thin wrapper around `FacadeCollectionRequestBuilder.build` to preserve API compatibility."""
283+ return FacadeCollectionRequestBuilder ().build (session , logger , enabled_phase_names , days_until_collect_again )
232284
233- ml_enabled_phases .append (ml_task_success_util_gen )
234285
235- request = CollectionRequest ( "ml" , ml_enabled_phases , max_repo = 5 , days_until_collect_again = days_until_collect_again )
236- request . get_valid_repos ( session )
237- return request
286+ def build_ml_repo_collect_request ( session : Any , logger : logging . Logger , enabled_phase_names : List [ str ], days_until_collect_again : int = 40 ) -> "CollectionRequest" :
287+ """Thin wrapper around `MLCollectionRequestBuilder.build` to preserve API compatibility."""
288+ return MLCollectionRequestBuilder (). build ( session , logger , enabled_phase_names , days_until_collect_again )
238289
239290@celery .task (bind = True )
240291def augur_collection_monitor (self ):
@@ -246,7 +297,7 @@ def augur_collection_monitor(self):
246297 logger .info ("Checking for repos to collect" )
247298
248299
249- #Get list of enabled phases
300+ # Get enabled phases
250301 enabled_phase_names = get_enabled_phase_names_from_config (engine , logger )
251302
252303 enabled_collection_hooks = []
0 commit comments