1515from api .config import settings
1616from api .dependencies import DatabaseSession , require_api_key
1717from api .models .job import Job , JobStatus , ErrorResponse
18- from api .services .queue import QueueService
19- from api .services .storage import StorageService
2018from pydantic import BaseModel
2119
2220logger = structlog .get_logger ()
2321router = APIRouter ()
2422
25- queue_service = QueueService ()
26- storage_service = StorageService ()
23+ # Lazy import to avoid circular dependency
24+ def get_queue_service ():
25+ from api .main import queue_service
26+ return queue_service
27+
28+ def get_storage_service ():
29+ from api .main import storage_service
30+ return storage_service
2731
2832
2933# Response models for OpenAPI documentation
@@ -124,7 +128,7 @@ async def get_workers_status(
124128 Only accessible with admin API key.
125129 """
126130 try :
127- workers = await queue_service .get_workers_status ()
131+ workers = await get_queue_service () .get_workers_status ()
128132
129133 return WorkersStatusResponse (
130134 total_workers = len (workers ),
@@ -169,7 +173,7 @@ async def get_storage_status(
169173 try :
170174 storage_status = {}
171175
172- for name , backend in storage_service .backends .items ():
176+ for name , backend in get_storage_service () .backends .items ():
173177 try :
174178 # Get backend-specific status
175179 backend_status = await backend .get_status ()
@@ -186,8 +190,8 @@ async def get_storage_status(
186190
187191 return StorageStatusResponse (
188192 backends = storage_status ,
189- default_backend = storage_service .config .get ("default_backend" ),
190- policies = storage_service .config .get ("policies" , {}),
193+ default_backend = get_storage_service () .config .get ("default_backend" ),
194+ policies = get_storage_service () .config .get ("policies" , {}),
191195 )
192196 except Exception as e :
193197 logger .error ("Failed to get storage status" , error = str (e ))
@@ -267,8 +271,8 @@ async def get_system_stats(
267271 "avg_processing_time" : sum (row .avg_time or 0 for row in job_stats ) / len (job_stats ) if job_stats else 0 ,
268272 "avg_vmaf_score" : sum (row .avg_vmaf or 0 for row in job_stats if row .avg_vmaf ) / sum (1 for row in job_stats if row .avg_vmaf ) if any (row .avg_vmaf for row in job_stats ) else None ,
269273 },
270- queue = await queue_service .get_queue_stats (),
271- workers = await queue_service .get_workers_stats (),
274+ queue = await get_queue_service () .get_queue_stats (),
275+ workers = await get_queue_service () .get_workers_stats (),
272276 )
273277
274278 return stats
@@ -337,8 +341,8 @@ async def cleanup_old_jobs(
337341 try :
338342 # Delete output file if it exists
339343 if job .output_path :
340- backend_name , file_path = storage_service .parse_uri (job .output_path )
341- backend = storage_service .backends .get (backend_name )
344+ backend_name , file_path = get_storage_service () .parse_uri (job .output_path )
345+ backend = get_storage_service () .backends .get (backend_name )
342346 if backend :
343347 await backend .delete (file_path )
344348
0 commit comments