77
88from .base import ContextBase
99from .exttypes import Frequency
10- from .validators import normalize_date
10+ from .validators import normalize_date , normalize_datetime
1111
12- __all__ = [
12+ __all__ = (
1313 "NullContext" ,
1414 "GenericContext" ,
1515 "DateContext" ,
1616 "DatetimeContext" ,
1717 "EntryTimeContext" ,
18+ "SourceContext" ,
1819 "DateRangeContext" ,
20+ "DatetimeRangeContext" ,
21+ "SeededDateRangeContext" ,
22+ "SeededDatetimeRangeContext" ,
1923 "VersionedDateContext" ,
24+ "VersionedDatetimeContext" ,
2025 "VersionedDateRangeContext" ,
26+ "VersionedDatetimeRangeContext" ,
2127 "FreqContext" ,
2228 "FreqDateContext" ,
29+ "FreqDatetimeContext" ,
2330 "FreqDateRangeContext" ,
31+ "FreqDatetimeRangeContext" ,
2432 "HorizonContext" ,
2533 "FreqHorizonContext" ,
2634 "FreqHorizonDateContext" ,
35+ "FreqHorizonDatetimeContext" ,
2736 "FreqHorizonDateRangeContext" ,
28- "SeededDateRangeContext" ,
29- "SourceContext" ,
37+ "FreqHorizonDatetimeRangeContext" ,
3038 "UniverseContext" ,
3139 "UniverseDateContext" ,
40+ "UniverseDatetimeContext" ,
3241 "UniverseDateRangeContext" ,
42+ "UniverseDatetimeRangeContext" ,
3343 "UniverseFrequencyDateRangeContext" ,
44+ "UniverseFrequencyDatetimeRangeContext" ,
3445 "UniverseFrequencyHorizonDateRangeContext" ,
46+ "UniverseFrequencyHorizonDatetimeRangeContext" ,
3547 "VersionedUniverseDateContext" ,
48+ "VersionedUniverseDatetimeContext" ,
3649 "VersionedUniverseDateRangeContext" ,
50+ "VersionedUniverseDatetimeRangeContext" ,
3751 "ModelContext" ,
3852 "ModelDateContext" ,
53+ "ModelDatetimeContext" ,
3954 "ModelDateRangeContext" ,
55+ "ModelDatetimeRangeContext" ,
4056 "ModelDateRangeSourceContext" ,
4157 "ModelFreqDateRangeContext" ,
58+ "ModelFreqDatetimeRangeContext" ,
4259 "VersionedModelDateContext" ,
60+ "VersionedModelDatetimeContext" ,
4361 "VersionedModelDateRangeContext" ,
44- ]
62+ "VersionedModelDatetimeRangeContext" ,
63+ )
4564
4665_SEPARATOR = ","
4766
@@ -100,6 +119,9 @@ def _date_context_validator(cls, v, handler, info):
100119class DatetimeContext (ContextBase ):
101120 dt : datetime
102121
122+ # validators
123+ _normalize_dt = field_validator ("dt" , mode = "before" )(normalize_datetime )
124+
103125 @model_validator (mode = "wrap" )
104126 def _datetime_context_validator (cls , v , handler , info ):
105127 if cls is DatetimeContext and not isinstance (v , (DatetimeContext , dict )):
@@ -126,18 +148,38 @@ class DateRangeContext(ContextBase):
126148 _normalize_end = field_validator ("end_date" , mode = "before" )(normalize_date )
127149
128150
151+ class DatetimeRangeContext (ContextBase ):
152+ start_datetime : datetime
153+ end_datetime : datetime
154+
155+ _normalize_start = field_validator ("start_datetime" , mode = "before" )(normalize_datetime )
156+ _normalize_end = field_validator ("end_datetime" , mode = "before" )(normalize_datetime )
157+
158+
129159class SeededDateRangeContext (DateRangeContext ):
130160 seed : int = 1234
131161
132162
163+ class SeededDatetimeRangeContext (DatetimeRangeContext ):
164+ seed : int = 1234
165+
166+
133167class VersionedDateContext (DateContext , EntryTimeContext ):
134168 pass
135169
136170
171+ class VersionedDatetimeContext (DatetimeContext , EntryTimeContext ):
172+ pass
173+
174+
137175class VersionedDateRangeContext (DateRangeContext , EntryTimeContext ):
138176 pass
139177
140178
179+ class VersionedDatetimeRangeContext (DatetimeRangeContext , EntryTimeContext ):
180+ pass
181+
182+
141183class FreqContext (ContextBase ):
142184 freq : Frequency
143185
@@ -146,10 +188,18 @@ class FreqDateContext(DateContext, FreqContext):
146188 pass
147189
148190
191+ class FreqDatetimeContext (DatetimeContext , FreqContext ):
192+ pass
193+
194+
149195class FreqDateRangeContext (DateRangeContext , FreqContext ):
150196 pass
151197
152198
199+ class FreqDatetimeRangeContext (DatetimeRangeContext , FreqContext ):
200+ pass
201+
202+
153203class HorizonContext (ContextBase ):
154204 horizon : Frequency
155205
@@ -162,10 +212,18 @@ class FreqHorizonDateContext(DateContext, HorizonContext, FreqContext):
162212 pass
163213
164214
215+ class FreqHorizonDatetimeContext (DatetimeContext , HorizonContext , FreqContext ):
216+ pass
217+
218+
165219class FreqHorizonDateRangeContext (DateRangeContext , HorizonContext , FreqContext ):
166220 pass
167221
168222
223+ class FreqHorizonDatetimeRangeContext (DatetimeRangeContext , HorizonContext , FreqContext ):
224+ pass
225+
226+
169227class UniverseContext (ContextBase ):
170228 universe : str
171229
@@ -174,26 +232,50 @@ class UniverseDateContext(DateContext, UniverseContext):
174232 pass
175233
176234
235+ class UniverseDatetimeContext (DatetimeContext , UniverseContext ):
236+ pass
237+
238+
177239class UniverseDateRangeContext (DateRangeContext , UniverseContext ):
178240 pass
179241
180242
243+ class UniverseDatetimeRangeContext (DatetimeRangeContext , UniverseContext ):
244+ pass
245+
246+
181247class UniverseFrequencyDateRangeContext (DateRangeContext , FreqContext , UniverseContext ):
182248 pass
183249
184250
251+ class UniverseFrequencyDatetimeRangeContext (DatetimeRangeContext , FreqContext , UniverseContext ):
252+ pass
253+
254+
185255class UniverseFrequencyHorizonDateRangeContext (DateRangeContext , HorizonContext , FreqContext , UniverseContext ):
186256 pass
187257
188258
259+ class UniverseFrequencyHorizonDatetimeRangeContext (DatetimeRangeContext , HorizonContext , FreqContext , UniverseContext ):
260+ pass
261+
262+
189263class VersionedUniverseDateContext (VersionedDateContext , UniverseContext ):
190264 pass
191265
192266
267+ class VersionedUniverseDatetimeContext (VersionedDatetimeContext , UniverseContext ):
268+ pass
269+
270+
193271class VersionedUniverseDateRangeContext (VersionedDateRangeContext , UniverseContext ):
194272 pass
195273
196274
275+ class VersionedUniverseDatetimeRangeContext (VersionedDatetimeRangeContext , UniverseContext ):
276+ pass
277+
278+
197279class ModelContext (ContextBase ):
198280 model : str
199281
@@ -202,10 +284,18 @@ class ModelDateContext(DateContext, ModelContext):
202284 pass
203285
204286
287+ class ModelDatetimeContext (DatetimeContext , ModelContext ):
288+ pass
289+
290+
205291class ModelDateRangeContext (DateRangeContext , ModelContext ):
206292 pass
207293
208294
295+ class ModelDatetimeRangeContext (DatetimeRangeContext , ModelContext ):
296+ pass
297+
298+
209299class ModelDateRangeSourceContext (SourceContext , ModelDateRangeContext ):
210300 pass
211301
@@ -214,9 +304,21 @@ class ModelFreqDateRangeContext(FreqDateRangeContext, ModelContext):
214304 pass
215305
216306
307+ class ModelFreqDatetimeRangeContext (FreqDatetimeRangeContext , ModelContext ):
308+ pass
309+
310+
217311class VersionedModelDateContext (VersionedDateContext , ModelContext ):
218312 pass
219313
220314
315+ class VersionedModelDatetimeContext (VersionedDatetimeContext , ModelContext ):
316+ pass
317+
318+
221319class VersionedModelDateRangeContext (VersionedDateRangeContext , ModelContext ):
222320 pass
321+
322+
323+ class VersionedModelDatetimeRangeContext (VersionedDatetimeRangeContext , ModelContext ):
324+ pass
0 commit comments