@@ -296,7 +296,7 @@ def is_on_offset(self, dt):
296
296
return True
297
297
298
298
299
- class SingleConstructorOffset ( BaseOffset ) :
299
+ class SingleConstructorMixin :
300
300
_params = cache_readonly (BaseOffset ._params .fget )
301
301
freqstr = cache_readonly (BaseOffset .freqstr .fget )
302
302
@@ -308,6 +308,10 @@ def _from_name(cls, suffix=None):
308
308
return cls ()
309
309
310
310
311
+ class SingleConstructorOffset (SingleConstructorMixin , BaseOffset ):
312
+ pass
313
+
314
+
311
315
class BusinessDay (BusinessMixin , SingleConstructorOffset ):
312
316
"""
313
317
DateOffset subclass representing possibly n business days.
@@ -1308,7 +1312,7 @@ def _from_name(cls, suffix=None):
1308
1312
return cls (weekday = weekday )
1309
1313
1310
1314
1311
- class WeekOfMonth (liboffsets .WeekOfMonthMixin , SingleConstructorOffset ):
1315
+ class WeekOfMonth (SingleConstructorMixin , liboffsets .WeekOfMonthMixin ):
1312
1316
"""
1313
1317
Describes monthly dates like "the Tuesday of the 2nd week of each month".
1314
1318
@@ -1334,12 +1338,9 @@ class WeekOfMonth(liboffsets.WeekOfMonthMixin, SingleConstructorOffset):
1334
1338
_attributes = frozenset (["n" , "normalize" , "week" , "weekday" ])
1335
1339
1336
1340
def __init__ (self , n = 1 , normalize = False , week = 0 , weekday = 0 ):
1337
- BaseOffset .__init__ (self , n , normalize )
1338
- object .__setattr__ (self , "weekday" , weekday )
1341
+ liboffsets .WeekOfMonthMixin .__init__ (self , n , normalize , weekday )
1339
1342
object .__setattr__ (self , "week" , week )
1340
1343
1341
- if self .weekday < 0 or self .weekday > 6 :
1342
- raise ValueError (f"Day must be 0<=day<=6, got { self .weekday } " )
1343
1344
if self .week < 0 or self .week > 3 :
1344
1345
raise ValueError (f"Week must be 0<=week<=3, got { self .week } " )
1345
1346
@@ -1361,11 +1362,6 @@ def _get_offset_day(self, other: datetime) -> int:
1361
1362
shift_days = (self .weekday - wday ) % 7
1362
1363
return 1 + shift_days + self .week * 7
1363
1364
1364
- @property
1365
- def rule_code (self ) -> str :
1366
- weekday = ccalendar .int_to_weekday .get (self .weekday , "" )
1367
- return f"{ self ._prefix } -{ self .week + 1 } { weekday } "
1368
-
1369
1365
@classmethod
1370
1366
def _from_name (cls , suffix = None ):
1371
1367
if not suffix :
@@ -1377,7 +1373,7 @@ def _from_name(cls, suffix=None):
1377
1373
return cls (week = week , weekday = weekday )
1378
1374
1379
1375
1380
- class LastWeekOfMonth (liboffsets .WeekOfMonthMixin , SingleConstructorOffset ):
1376
+ class LastWeekOfMonth (SingleConstructorMixin , liboffsets .WeekOfMonthMixin ):
1381
1377
"""
1382
1378
Describes monthly dates in last week of month like "the last Tuesday of
1383
1379
each month".
@@ -1401,14 +1397,11 @@ class LastWeekOfMonth(liboffsets.WeekOfMonthMixin, SingleConstructorOffset):
1401
1397
_attributes = frozenset (["n" , "normalize" , "weekday" ])
1402
1398
1403
1399
def __init__ (self , n = 1 , normalize = False , weekday = 0 ):
1404
- BaseOffset .__init__ (self , n , normalize )
1405
- object .__setattr__ (self , "weekday" , weekday )
1400
+ liboffsets .WeekOfMonthMixin .__init__ (self , n , normalize , weekday )
1406
1401
1407
1402
if self .n == 0 :
1408
1403
raise ValueError ("N cannot be 0" )
1409
-
1410
- if self .weekday < 0 or self .weekday > 6 :
1411
- raise ValueError (f"Day must be 0<=day<=6, got { self .weekday } " )
1404
+ object .__setattr__ (self , "week" , - 1 )
1412
1405
1413
1406
def _get_offset_day (self , other : datetime ) -> int :
1414
1407
"""
@@ -1429,11 +1422,6 @@ def _get_offset_day(self, other: datetime) -> int:
1429
1422
shift_days = (wday - self .weekday ) % 7
1430
1423
return dim - shift_days
1431
1424
1432
- @property
1433
- def rule_code (self ) -> str :
1434
- weekday = ccalendar .int_to_weekday .get (self .weekday , "" )
1435
- return f"{ self ._prefix } -{ weekday } "
1436
-
1437
1425
@classmethod
1438
1426
def _from_name (cls , suffix = None ):
1439
1427
if not suffix :
0 commit comments