11import collections
22import contextlib
3- import dataclasses
43import datetime
54import json
65import logging
2524from urllib3 .util import Retry
2625
2726from openeo import BatchJob , Connection
27+ from openeo .extra .job_management ._df_schema import _normalize
28+ from openeo .extra .job_management ._interface import JobDatabaseInterface
29+ from openeo .extra .job_management ._job_db import get_job_db
2830from openeo .extra .job_management ._thread_worker import (
2931 _JobManagerWorkerThreadPool ,
3032 _JobStartTask ,
3133)
32- from openeo .extra .job_management ._interface import JobDatabaseInterface
33- from openeo .extra .job_management ._job_db import get_job_db
34- from openeo .extra .job_management ._df_schema import _normalize
35-
3634from openeo .rest import OpenEoApiError
3735from openeo .rest .auth .auth import BearerAuth
3836from openeo .util import deep_get , rfc3339
3937
40-
4138_log = logging .getLogger (__name__ )
4239
40+
4341MAX_RETRIES = 50
42+
43+
4444# Sentinel value to indicate that a parameter was not set
4545_UNSET = object ()
4646
47+
4748def _start_job_default (row : pd .Series , connection : Connection , * args , ** kwargs ):
4849 raise NotImplementedError ("No 'start_job' callable provided" )
4950
51+
5052class _Backend (NamedTuple ):
5153 """Container for backend info/settings"""
5254
@@ -56,8 +58,6 @@ class _Backend(NamedTuple):
5658 parallel_jobs : int
5759
5860
59-
60-
6161class MultiBackendJobManager :
6262 """
6363 Tracker for multiple jobs on multiple backends.
@@ -125,7 +125,6 @@ def start_job(
125125 Added ``cancel_running_job_after`` parameter.
126126 """
127127
128-
129128 def __init__ (
130129 self ,
131130 poll_sleep : int = 60 ,
@@ -409,7 +408,7 @@ def run_jobs(
409408 assert not kwargs , f"Unexpected keyword arguments: { kwargs !r} "
410409
411410 if isinstance (job_db , (str , Path )):
412- job_db = get_job_db (path = job_db ) # TODO circular import
411+ job_db = get_job_db (path = job_db ) # TODO circular import
413412
414413 if not isinstance (job_db , JobDatabaseInterface ):
415414 raise ValueError (f"Unsupported job_db { job_db !r} " )
@@ -806,7 +805,7 @@ def _track_statuses(self, job_db: JobDatabaseInterface, stats: Optional[dict] =
806805 job_db .persist (active )
807806
808807 return jobs_done , jobs_error , jobs_cancel
809-
808+
810809
811810def _format_usage_stat (job_metadata : dict , field : str ) -> str :
812811 value = deep_get (job_metadata , "usage" , field , "value" , default = 0 )
0 commit comments