11
11
FUTURE_TIMEOUT = 120 # seconds
12
12
13
13
14
- class Future :
14
+ class BaseFuture (abc .ABC ):
15
+ @abc .abstractmethod
16
+ def wait (self , timeout = FUTURE_TIMEOUT , raises = True ):
17
+ raise NotImplementedError
18
+
19
+ @abc .abstractmethod
20
+ def get (self ):
21
+ raise NotImplementedError
22
+
23
+
24
+ class Future (BaseFuture ):
15
25
"""Future asset."""
16
26
# mapper from asset class name to client getter method
17
27
_methods = {
@@ -50,43 +60,25 @@ def get(self):
50
60
return self ._asset
51
61
52
62
53
- class ComputePlanFuture (Future ):
54
- _keys_properties = {
55
- 'ComputePlan' : {
56
- 'traintuple_keys' : 'traintuples' ,
57
- 'composite_traintuple_keys' : 'composite_traintuples' ,
58
- 'aggregatetuple_keys' : 'aggregatetuples' ,
59
- 'testtuple_keys' : 'testtuples' ,
60
- },
61
- 'ComputePlanCreated' : {
62
- 'traintuple_keys' : 'traintuple_keys' ,
63
- 'composite_traintuple_keys' : 'composite_traintuple_keys' ,
64
- 'aggregatetuple_keys' : 'aggregatetuple_keys' ,
65
- 'testtuple_keys' : 'testtuple_keys' ,
66
-
67
- },
68
- }
69
-
63
+ class ComputePlanFuture (BaseFuture ):
70
64
def __init__ (self , asset , session ):
71
65
self ._asset = asset
72
66
self ._getter = session .get_compute_plan
73
- for k , v in enumerate (self ._keys_properties [asset .__class__ .name ]):
74
- setattr (self , f'_{ k } ' , getattr (asset , v ))
75
67
self ._get_traintuple = session .get_traintuple
76
68
self ._get_composite_traintuple = session .get_composite_traintuple
77
69
self ._get_aggregatetuple = session .get_aggregatetuple
78
70
self ._get_testtuple = session .get_testtuple
79
71
80
- def wait (self , timeout = FUTURE_TIMEOUT , raises = True ):
72
+ def wait (self , timeout = FUTURE_TIMEOUT ):
81
73
"""wait until all tuples are completed (done or failed)."""
82
- for key in self ._traintuple_keys :
83
- self ._get_traintuple (key ).future ().wait (timeout , raises )
84
- for key in self ._composite_traintuple_keys :
85
- self ._get_composite_traintuple (key ).future ().wait (timeout , raises )
86
- for key in self ._aggregatetuple_keys :
87
- self ._get_aggregatetuple (key ).future ().wait (timeout , raises )
88
- for key in self ._testtuple_keys :
89
- self ._get_testtuple (key ).future ().wait (timeout , raises )
74
+ for key in self ._asset . traintuple_keys :
75
+ self ._get_traintuple (key ).future ().wait (timeout , raises = False )
76
+ for key in self ._asset . composite_traintuple_keys :
77
+ self ._get_composite_traintuple (key ).future ().wait (timeout , raises = False )
78
+ for key in self ._asset . aggregatetuple_keys :
79
+ self ._get_aggregatetuple (key ).future ().wait (timeout , raises = False )
80
+ for key in self ._asset . testtuple_keys :
81
+ self ._get_testtuple (key ).future ().wait (timeout , raises = False )
90
82
91
83
return self .get ()
92
84
@@ -95,6 +87,8 @@ def get(self):
95
87
96
88
97
89
class _FutureMixin (abc .ABC ):
90
+ _future_cls = Future
91
+
98
92
def attach (self , session ):
99
93
"""Attach session to asset."""
100
94
self ._session = session
@@ -104,11 +98,11 @@ def future(self):
104
98
"""Returns future from asset."""
105
99
assert hasattr (self , 'status' )
106
100
assert hasattr (self , 'key' )
101
+ return self ._future_cls (self , self ._session )
107
102
108
- try :
109
- return self .Meta .FutureCls (self , self ._session )
110
- except AttributeError :
111
- return Future (self , self ._session )
103
+
104
+ class _ComputePlanFutureMixin (abc .ABC ):
105
+ _future_cls = ComputePlanFuture
112
106
113
107
114
108
def _convert (name ):
@@ -376,27 +370,36 @@ class ComputePlanCreated(_Asset, _FutureMixin):
376
370
aggregatetuple_keys : typing .List [str ]
377
371
testtuple_keys : typing .List [str ]
378
372
379
- class Meta :
380
- FutureCls = ComputePlanFuture
381
-
382
373
383
374
@dataclasses .dataclass
384
375
class ComputePlan (_Asset ):
385
376
compute_plan_id : str
386
- algo_key : str
387
377
objective_key : str
388
378
traintuples : typing .List [str ]
389
379
composite_traintuples : typing .List [str ]
390
380
aggregatetuples : typing .List [str ]
391
381
testtuples : typing .List [str ]
392
382
393
- class Meta :
394
- FutureCls = ComputePlanFuture
395
-
396
383
def __post_init__ (self ):
397
384
if self .testtuples is None :
398
385
self .testtuples = []
399
386
387
+ @property
388
+ def traintuple_keys (self ):
389
+ return self .traintuples
390
+
391
+ @property
392
+ def composite_traintuple_keys (self ):
393
+ return self .composite_traintuples
394
+
395
+ @property
396
+ def aggregatetuple_keys (self ):
397
+ return self .aggregatetuples
398
+
399
+ @property
400
+ def testtuple_keys (self ):
401
+ return self .testtuples
402
+
400
403
def list_traintuples (self , session ):
401
404
return session .list_traintuples (filters = [f'traintuple:computePlanId:{ self .compute_plan_id } ' ])
402
405
0 commit comments