37
37
)
38
38
39
39
TFunc = TypeVar ('TFunc' )
40
- TSubtask = TypeVar ('TSubtask ' , bound = Enum )
40
+ TPrerequisite = TypeVar ('TPrerequisite ' , bound = Enum )
41
41
TTask = TypeVar ('TTask' )
42
42
TTaskID = TypeVar ('TTaskID' )
43
43
@@ -272,63 +272,63 @@ def __contains__(self, task: TTask) -> bool:
272
272
return task in self ._tasks
273
273
274
274
275
- class BaseTaskPrerequisites (Generic [TTask , TSubtask ]):
275
+ class BaseTaskPrerequisites (Generic [TTask , TPrerequisite ]):
276
276
"""
277
277
Keep track of which prerequisites on a task are complete. It is used internally by
278
278
:class:`OrderedTaskPreparation`
279
279
"""
280
- _subtasks : Iterable [TSubtask ]
281
- _completed_subtasks : Set [TSubtask ]
280
+ _prereqs : Iterable [TPrerequisite ]
281
+ _completed_prereqs : Set [TPrerequisite ]
282
282
_task : TTask
283
283
284
284
@classmethod
285
- def from_enum (cls , subtasks : Type [TSubtask ]) -> 'Type[BaseTaskPrerequisites[Any, Any]]' :
285
+ def from_enum (cls , prereqs : Type [TPrerequisite ]) -> 'Type[BaseTaskPrerequisites[Any, Any]]' :
286
286
287
- if len (subtasks ) < 1 :
288
- raise ValidationError ("There must be at least one subtask to track completions" )
287
+ if len (prereqs ) < 1 :
288
+ raise ValidationError ("There must be at least one prerequisite to track completions" )
289
289
290
- return type ('CompletionFor' + subtasks .__name__ , (cls , ), dict (_subtasks = subtasks ))
290
+ return type ('CompletionFor' + prereqs .__name__ , (cls , ), dict (_prereqs = prereqs ))
291
291
292
292
def __init__ (self , task : TTask ) -> None :
293
293
self ._task = task
294
- self ._completed_subtasks = set ()
294
+ self ._completed_prereqs = set ()
295
295
296
296
@property
297
297
def task (self ) -> TTask :
298
298
return self ._task
299
299
300
300
@property
301
301
def is_complete (self ) -> bool :
302
- return len (self .remaining_subtasks ) == 0
302
+ return len (self .remaining_prereqs ) == 0
303
303
304
304
def set_complete (self ) -> None :
305
- for subtask in self .remaining_subtasks :
306
- self .finish (subtask )
305
+ for prereq in self .remaining_prereqs :
306
+ self .finish (prereq )
307
307
308
308
@property
309
- def remaining_subtasks (self ) -> Set [TSubtask ]:
310
- return set (self ._subtasks ).difference (self ._completed_subtasks )
309
+ def remaining_prereqs (self ) -> Set [TPrerequisite ]:
310
+ return set (self ._prereqs ).difference (self ._completed_prereqs )
311
311
312
- def finish (self , subtask : TSubtask ) -> None :
313
- if subtask not in self ._subtasks :
312
+ def finish (self , prereq : TPrerequisite ) -> None :
313
+ if prereq not in self ._prereqs :
314
314
raise ValidationError (
315
- "Subtask %r is not recognized by task %r" % (subtask , self ._task )
315
+ "Prerequisite %r is not recognized by task %r" % (prereq , self ._task )
316
316
)
317
- elif subtask in self ._completed_subtasks :
317
+ elif prereq in self ._completed_prereqs :
318
318
raise ValidationError (
319
- "Subtask %r is already complete in task %r" % (subtask , self ._task )
319
+ "Prerequisite %r is already complete in task %r" % (prereq , self ._task )
320
320
)
321
321
else :
322
- self ._completed_subtasks .add (subtask )
322
+ self ._completed_prereqs .add (prereq )
323
323
324
324
def __repr__ (self ) -> str :
325
325
return (
326
- f'<{ type (self ).__name__ } ({ self ._task !r} , done={ self ._completed_subtasks !r} , '
327
- f'remaining={ self .remaining_subtasks !r} )>'
326
+ f'<{ type (self ).__name__ } ({ self ._task !r} , done={ self ._completed_prereqs !r} , '
327
+ f'remaining={ self .remaining_prereqs !r} )>'
328
328
)
329
329
330
330
331
- class OrderedTaskPreparation (Generic [TTask , TTaskID , TSubtask ]):
331
+ class OrderedTaskPreparation (Generic [TTask , TTaskID , TPrerequisite ]):
332
332
"""
333
333
This class is useful when a series of tasks with prerequisites must be run
334
334
sequentially. The prerequisites may be finished in any order, but the
@@ -410,11 +410,11 @@ class BlockDownloads(Enum):
410
410
# by default, how long should the integrator wait before pruning?
411
411
_default_max_depth = 10000 # not sure how to pick a good default here
412
412
413
- _prereq_tracker : Type [BaseTaskPrerequisites [TTask , TSubtask ]]
413
+ _prereq_tracker : Type [BaseTaskPrerequisites [TTask , TPrerequisite ]]
414
414
415
415
def __init__ (
416
416
self ,
417
- prerequisites : Type [TSubtask ],
417
+ prerequisites : Type [TPrerequisite ],
418
418
id_extractor : Callable [[TTask ], TTaskID ],
419
419
dependency_extractor : Callable [[TTask ], TTaskID ],
420
420
max_depth : int = None ) -> None :
@@ -431,15 +431,15 @@ def __init__(
431
431
self ._max_depth = min ([self ._default_max_depth , max_depth ])
432
432
433
433
# all of the tasks that have been completed, and not pruned
434
- self ._tasks : Dict [TTaskID , BaseTaskPrerequisites [TTask , TSubtask ]] = {}
434
+ self ._tasks : Dict [TTaskID , BaseTaskPrerequisites [TTask , TPrerequisite ]] = {}
435
435
436
436
# In self._dependencies, when the key becomes ready, the task ids in the
437
437
# value set *might* also become ready
438
438
# (they only become ready if their prerequisites are complete)
439
439
self ._dependencies : Dict [TTaskID , Set [TTaskID ]] = defaultdict (set )
440
440
441
- # task ids are in this set if they either:
442
- # - are missing a prerequisite OR
441
+ # task ids are in this set if either:
442
+ # - one of their prerequisites is incomplete OR
443
443
# - their dependent task is not ready
444
444
self ._unready : Set [TTaskID ] = set ()
445
445
@@ -491,7 +491,7 @@ def register_tasks(self, tasks: Tuple[TTask]) -> None:
491
491
depth = self ._depths [dependency_id ] + 1
492
492
self ._depths [task_id ] = depth
493
493
494
- def finish_prereq (self , subtask : TSubtask , tasks : Tuple [TTask ]) -> None :
494
+ def finish_prereq (self , prereq : TPrerequisite , tasks : Tuple [TTask ]) -> None :
495
495
"""For every task in tasks, mark the given prerequisite as completed"""
496
496
if len (self ._tasks ) == 0 :
497
497
raise ValidationError ("Cannot finish a task until set_last_completion() is called" )
@@ -502,7 +502,7 @@ def finish_prereq(self, subtask: TSubtask, tasks: Tuple[TTask]) -> None:
502
502
raise ValidationError (f"Cannot finish task { task_id !r} before preparing it" )
503
503
504
504
task_completion = self ._tasks [task_id ]
505
- task_completion .finish (subtask )
505
+ task_completion .finish (prereq )
506
506
if task_completion .is_complete and self ._dependency_of (task ) not in self ._unready :
507
507
self ._mark_complete (task_id )
508
508
0 commit comments