Skip to content

Commit 250e95d

Browse files
ptomecekgithub-actions[bot]timkpaine
authored
Fix inheritance structure for contexts (#164)
* Fix inheritance structure for contexts Signed-off-by: Pascal Tomecek <[email protected]> * Refactored context classes to improve naming consistency, enforce inheritance and field order * Refactored context classes to improve naming consistency, enforce inheritance and field order --------- Signed-off-by: Pascal Tomecek <[email protected]> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tim Paine <[email protected]>
1 parent 4f035af commit 250e95d

File tree

3 files changed

+298
-40
lines changed

3 files changed

+298
-40
lines changed

ccflow/context.py

Lines changed: 201 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
11
"""This module defines re-usable contexts for the "Callable Model" framework defined in flow.callable.py."""
22

3+
import warnings
34
from datetime import date, datetime
45
from typing import Generic, Hashable, Optional, Sequence, Set, TypeVar
56

7+
from deprecated import deprecated
68
from pydantic import field_validator, model_validator
79

810
from .base import ContextBase
911
from .exttypes import Frequency
1012
from .validators import normalize_date, normalize_datetime
1113

14+
warnings.simplefilter("always", DeprecationWarning)
15+
16+
1217
__all__ = (
1318
"NullContext",
1419
"GenericContext",
1520
"DateContext",
1621
"DatetimeContext",
1722
"EntryTimeContext",
23+
"SeedContext",
1824
"SourceContext",
1925
"DateRangeContext",
2026
"DatetimeRangeContext",
21-
"SeededDateRangeContext",
22-
"SeededDatetimeRangeContext",
23-
"VersionedDateContext",
24-
"VersionedDatetimeContext",
25-
"VersionedDateRangeContext",
26-
"VersionedDatetimeRangeContext",
27+
"SeedDateRangeContext",
28+
"SeedDatetimeRangeContext",
29+
"DateEntryTimeContext",
30+
"DatetimeEntryTimeContext",
31+
"DateRangeEntryTimeContext",
32+
"DatetimeRangeEntryTimeContext",
2733
"FreqContext",
2834
"FreqDateContext",
2935
"FreqDatetimeContext",
@@ -40,14 +46,14 @@
4046
"UniverseDatetimeContext",
4147
"UniverseDateRangeContext",
4248
"UniverseDatetimeRangeContext",
43-
"UniverseFrequencyDateRangeContext",
44-
"UniverseFrequencyDatetimeRangeContext",
45-
"UniverseFrequencyHorizonDateRangeContext",
46-
"UniverseFrequencyHorizonDatetimeRangeContext",
47-
"VersionedUniverseDateContext",
48-
"VersionedUniverseDatetimeContext",
49-
"VersionedUniverseDateRangeContext",
50-
"VersionedUniverseDatetimeRangeContext",
49+
"UniverseFreqDateRangeContext",
50+
"UniverseFreqDatetimeRangeContext",
51+
"UniverseFreqHorizonDateRangeContext",
52+
"UniverseFreqHorizonDatetimeRangeContext",
53+
"UniverseDateEntryTimeContext",
54+
"UniverseDatetimeEntryTimeContext",
55+
"UniverseDateRangeEntryTimeContext",
56+
"UniverseDatetimeRangeEntryTimeContext",
5157
"ModelContext",
5258
"ModelDateContext",
5359
"ModelDatetimeContext",
@@ -56,6 +62,26 @@
5662
"ModelDateRangeSourceContext",
5763
"ModelFreqDateRangeContext",
5864
"ModelFreqDatetimeRangeContext",
65+
"ModelDateEntryTimeContext",
66+
"ModelDatetimeEntryTimeContext",
67+
"ModelDateRangeEntryTimeContext",
68+
"ModelDatetimeRangeEntryTimeContext",
69+
# deprecated aliases
70+
"SeededContext",
71+
"SeededDateRangeContext",
72+
"SeededDatetimeRangeContext",
73+
"UniverseFrequencyDateRangeContext",
74+
"UniverseFrequencyDatetimeRangeContext",
75+
"UniverseFrequencyHorizonDateRangeContext",
76+
"UniverseFrequencyHorizonDatetimeRangeContext",
77+
"VersionedDateContext",
78+
"VersionedDatetimeContext",
79+
"VersionedDateRangeContext",
80+
"VersionedDatetimeRangeContext",
81+
"VersionedUniverseDateContext",
82+
"VersionedUniverseDatetimeContext",
83+
"VersionedUniverseDateRangeContext",
84+
"VersionedUniverseDatetimeRangeContext",
5985
"VersionedModelDateContext",
6086
"VersionedModelDatetimeContext",
6187
"VersionedModelDateRangeContext",
@@ -136,6 +162,10 @@ class EntryTimeContext(ContextBase):
136162
entry_time_cutoff: Optional[datetime] = None
137163

138164

165+
class SeedContext(ContextBase):
166+
seed: int = 1234
167+
168+
139169
class SourceContext(ContextBase):
140170
source: Optional[str] = None
141171

@@ -162,27 +192,27 @@ class DatetimeRangeContext(ContextBase):
162192
_normalize_end = field_validator("end_datetime", mode="before")(normalize_datetime)
163193

164194

165-
class SeededDateRangeContext(DateRangeContext):
166-
seed: int = 1234
195+
class SeedDateRangeContext(DateRangeContext, SeedContext):
196+
pass
167197

168198

169-
class SeededDatetimeRangeContext(DatetimeRangeContext):
170-
seed: int = 1234
199+
class SeedDatetimeRangeContext(DatetimeRangeContext, SeedContext):
200+
pass
171201

172202

173-
class VersionedDateContext(DateContext, EntryTimeContext):
203+
class DateEntryTimeContext(EntryTimeContext, DateContext):
174204
pass
175205

176206

177-
class VersionedDatetimeContext(DatetimeContext, EntryTimeContext):
207+
class DatetimeEntryTimeContext(EntryTimeContext, DatetimeContext):
178208
pass
179209

180210

181-
class VersionedDateRangeContext(DateRangeContext, EntryTimeContext):
211+
class DateRangeEntryTimeContext(EntryTimeContext, DateRangeContext):
182212
pass
183213

184214

185-
class VersionedDatetimeRangeContext(DatetimeRangeContext, EntryTimeContext):
215+
class DatetimeRangeEntryTimeContext(EntryTimeContext, DatetimeRangeContext):
186216
pass
187217

188218

@@ -210,23 +240,39 @@ class HorizonContext(ContextBase):
210240
horizon: Frequency
211241

212242

243+
class HorizonDateContext(DateContext, HorizonContext):
244+
pass
245+
246+
247+
class HorizonDatetimeContext(DatetimeContext, HorizonContext):
248+
pass
249+
250+
251+
class HorizonDateRangeContext(DateRangeContext, HorizonContext):
252+
pass
253+
254+
255+
class HorizonDatetimeRangeContext(DatetimeRangeContext, HorizonContext):
256+
pass
257+
258+
213259
class FreqHorizonContext(HorizonContext, FreqContext):
214260
pass
215261

216262

217-
class FreqHorizonDateContext(DateContext, HorizonContext, FreqContext):
263+
class FreqHorizonDateContext(HorizonDateContext, FreqDateContext, FreqHorizonContext):
218264
pass
219265

220266

221-
class FreqHorizonDatetimeContext(DatetimeContext, HorizonContext, FreqContext):
267+
class FreqHorizonDatetimeContext(HorizonDatetimeContext, FreqDatetimeContext, FreqHorizonContext):
222268
pass
223269

224270

225-
class FreqHorizonDateRangeContext(DateRangeContext, HorizonContext, FreqContext):
271+
class FreqHorizonDateRangeContext(HorizonDateRangeContext, FreqDateRangeContext, FreqHorizonContext):
226272
pass
227273

228274

229-
class FreqHorizonDatetimeRangeContext(DatetimeRangeContext, HorizonContext, FreqContext):
275+
class FreqHorizonDatetimeRangeContext(HorizonDatetimeRangeContext, FreqDatetimeRangeContext, FreqHorizonContext):
230276
pass
231277

232278

@@ -250,35 +296,35 @@ class UniverseDatetimeRangeContext(DatetimeRangeContext, UniverseContext):
250296
pass
251297

252298

253-
class UniverseFrequencyDateRangeContext(DateRangeContext, FreqContext, UniverseContext):
299+
class UniverseFreqDateRangeContext(FreqDateRangeContext, UniverseDateRangeContext):
254300
pass
255301

256302

257-
class UniverseFrequencyDatetimeRangeContext(DatetimeRangeContext, FreqContext, UniverseContext):
303+
class UniverseFreqDatetimeRangeContext(FreqDatetimeRangeContext, UniverseDatetimeRangeContext):
258304
pass
259305

260306

261-
class UniverseFrequencyHorizonDateRangeContext(DateRangeContext, HorizonContext, FreqContext, UniverseContext):
307+
class UniverseFreqHorizonDateRangeContext(FreqHorizonDateRangeContext, UniverseFreqDateRangeContext):
262308
pass
263309

264310

265-
class UniverseFrequencyHorizonDatetimeRangeContext(DatetimeRangeContext, HorizonContext, FreqContext, UniverseContext):
311+
class UniverseFreqHorizonDatetimeRangeContext(UniverseFreqDatetimeRangeContext, FreqHorizonDatetimeRangeContext):
266312
pass
267313

268314

269-
class VersionedUniverseDateContext(VersionedDateContext, UniverseContext):
315+
class UniverseDateEntryTimeContext(DateEntryTimeContext, UniverseDateContext):
270316
pass
271317

272318

273-
class VersionedUniverseDatetimeContext(VersionedDatetimeContext, UniverseContext):
319+
class UniverseDatetimeEntryTimeContext(DatetimeEntryTimeContext, UniverseDatetimeContext):
274320
pass
275321

276322

277-
class VersionedUniverseDateRangeContext(VersionedDateRangeContext, UniverseContext):
323+
class UniverseDateRangeEntryTimeContext(DateRangeEntryTimeContext, UniverseDateRangeContext):
278324
pass
279325

280326

281-
class VersionedUniverseDatetimeRangeContext(VersionedDatetimeRangeContext, UniverseContext):
327+
class UniverseDatetimeRangeEntryTimeContext(DatetimeRangeEntryTimeContext, UniverseDatetimeRangeContext):
282328
pass
283329

284330

@@ -306,25 +352,140 @@ class ModelDateRangeSourceContext(SourceContext, ModelDateRangeContext):
306352
pass
307353

308354

309-
class ModelFreqDateRangeContext(FreqDateRangeContext, ModelContext):
355+
class ModelFreqDateRangeContext(FreqDateRangeContext, ModelDateRangeContext):
356+
pass
357+
358+
359+
class ModelFreqDatetimeRangeContext(FreqDatetimeRangeContext, ModelDatetimeRangeContext):
360+
pass
361+
362+
363+
class ModelDateEntryTimeContext(DateEntryTimeContext, ModelDateContext):
364+
pass
365+
366+
367+
class ModelDatetimeEntryTimeContext(DatetimeEntryTimeContext, ModelDatetimeContext):
368+
pass
369+
370+
371+
class ModelDateRangeEntryTimeContext(DateRangeEntryTimeContext, ModelDateRangeContext):
372+
pass
373+
374+
375+
class ModelDatetimeRangeEntryTimeContext(DatetimeRangeEntryTimeContext, ModelDatetimeRangeContext):
376+
pass
377+
378+
379+
# TODO - remove later to avoid breaking changes for now
380+
@deprecated(version="0.8.0", reason="Use SeedContext instead")
381+
class SeededContext(SeedContext):
382+
__deprecated__ = True
383+
pass
384+
385+
386+
@deprecated(version="0.8.0", reason="Use SeedDateRangeContext instead")
387+
class SeededDateRangeContext(SeedDateRangeContext):
388+
__deprecated__ = True
389+
pass
390+
391+
392+
@deprecated(version="0.8.0", reason="Use SeedDatetimeRangeContext instead")
393+
class SeededDatetimeRangeContext(SeedDatetimeRangeContext):
394+
__deprecated__ = True
395+
pass
396+
397+
398+
@deprecated(version="0.8.0", reason="Use UniverseFreqDateRangeContext instead")
399+
class UniverseFrequencyDateRangeContext(UniverseFreqDateRangeContext):
400+
__deprecated__ = True
401+
pass
402+
403+
404+
@deprecated(version="0.8.0", reason="Use UniverseFreqDatetimeRangeContext instead")
405+
class UniverseFrequencyDatetimeRangeContext(UniverseFreqDatetimeRangeContext):
406+
__deprecated__ = True
407+
pass
408+
409+
410+
@deprecated(version="0.8.0", reason="Use UniverseFreqHorizonDateRangeContext instead")
411+
class UniverseFrequencyHorizonDateRangeContext(UniverseFreqHorizonDateRangeContext):
412+
__deprecated__ = True
413+
pass
414+
415+
416+
@deprecated(version="0.8.0", reason="Use UniverseFreqHorizonDatetimeRangeContext instead")
417+
class UniverseFrequencyHorizonDatetimeRangeContext(UniverseFreqHorizonDatetimeRangeContext):
418+
__deprecated__ = True
419+
pass
420+
421+
422+
@deprecated(version="0.8.0", reason="Use UniverseDateEntryTimeContext instead")
423+
class VersionedUniverseDateContext(UniverseDateEntryTimeContext):
424+
__deprecated__ = True
425+
pass
426+
427+
428+
@deprecated(version="0.8.0", reason="Use UniverseDatetimeEntryTimeContext instead")
429+
class VersionedUniverseDatetimeContext(UniverseDatetimeEntryTimeContext):
430+
__deprecated__ = True
431+
pass
432+
433+
434+
@deprecated(version="0.8.0", reason="Use UniverseDateRangeEntryTimeContext instead")
435+
class VersionedUniverseDateRangeContext(UniverseDateRangeEntryTimeContext):
436+
__deprecated__ = True
437+
pass
438+
439+
440+
@deprecated(version="0.8.0", reason="Use UniverseDatetimeRangeEntryTimeContext instead")
441+
class VersionedUniverseDatetimeRangeContext(UniverseDatetimeRangeEntryTimeContext):
442+
__deprecated__ = True
443+
pass
444+
445+
446+
@deprecated(version="0.8.0", reason="Use ModelDateEntryTimeContext instead")
447+
class VersionedModelDateContext(ModelDateEntryTimeContext):
448+
__deprecated__ = True
449+
pass
450+
451+
452+
@deprecated(version="0.8.0", reason="Use ModelDatetimeEntryTimeContext instead")
453+
class VersionedModelDatetimeContext(ModelDatetimeEntryTimeContext):
454+
__deprecated__ = True
455+
pass
456+
457+
458+
@deprecated(version="0.8.0", reason="Use ModelDateRangeEntryTimeContext instead")
459+
class VersionedModelDateRangeContext(ModelDateRangeEntryTimeContext):
460+
__deprecated__ = True
310461
pass
311462

312463

313-
class ModelFreqDatetimeRangeContext(FreqDatetimeRangeContext, ModelContext):
464+
@deprecated(version="0.8.0", reason="Use ModelDatetimeRangeEntryTimeContext instead")
465+
class VersionedModelDatetimeRangeContext(ModelDatetimeRangeEntryTimeContext):
466+
__deprecated__ = True
314467
pass
315468

316469

317-
class VersionedModelDateContext(VersionedDateContext, ModelContext):
470+
@deprecated(version="0.8.0", reason="Use DateEntryTimeContext instead")
471+
class VersionedDateContext(EntryTimeContext, DateContext):
472+
__deprecated__ = True
318473
pass
319474

320475

321-
class VersionedModelDatetimeContext(VersionedDatetimeContext, ModelContext):
476+
@deprecated(version="0.8.0", reason="Use DatetimeEntryTimeContext instead")
477+
class VersionedDatetimeContext(EntryTimeContext, DatetimeContext):
478+
__deprecated__ = True
322479
pass
323480

324481

325-
class VersionedModelDateRangeContext(VersionedDateRangeContext, ModelContext):
482+
@deprecated(version="0.8.0", reason="Use DateRangeEntryTimeContext instead")
483+
class VersionedDateRangeContext(EntryTimeContext, DateRangeContext):
484+
__deprecated__ = True
326485
pass
327486

328487

329-
class VersionedModelDatetimeRangeContext(VersionedDatetimeRangeContext, ModelContext):
488+
@deprecated(version="0.8.0", reason="Use DatetimeRangeEntryTimeContext instead")
489+
class VersionedDatetimeRangeContext(EntryTimeContext, DatetimeRangeContext):
490+
__deprecated__ = True
330491
pass

0 commit comments

Comments
 (0)