Initial commit: AuroraMusic monorepo
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
from typing import List
|
||||
|
||||
from redis.client import Pipeline
|
||||
from redis.exceptions import WatchError
|
||||
|
||||
from .job import Job
|
||||
|
||||
|
||||
class Dependency:
|
||||
@classmethod
|
||||
def get_jobs_with_met_dependencies(cls, jobs: List['Job'], pipeline: Pipeline):
|
||||
jobs_with_met_dependencies = []
|
||||
jobs_with_unmet_dependencies = []
|
||||
for job in jobs:
|
||||
while True:
|
||||
try:
|
||||
pipeline.watch(*[Job.key_for(dependency_id) for dependency_id in job._dependency_ids])
|
||||
job.register_dependency(pipeline=pipeline)
|
||||
if job.dependencies_are_met(pipeline=pipeline):
|
||||
jobs_with_met_dependencies.append(job)
|
||||
else:
|
||||
jobs_with_unmet_dependencies.append(job)
|
||||
pipeline.execute()
|
||||
except WatchError:
|
||||
continue
|
||||
break
|
||||
return jobs_with_met_dependencies, jobs_with_unmet_dependencies
|
||||
Reference in New Issue
Block a user