1+ import builtins
12import datetime
23from dataclasses import dataclass
3- from typing import List , NamedTuple , Union , Tuple
4+ from typing import List , NamedTuple , Union , Tuple , Any
45
6+ from loguru import logger
57from pint import UnitRegistry , Quantity
6- from pydantic import BaseModel
7-
8+ from pydantic import BaseModel , Field , validator
89
910ureg = UnitRegistry ()
1011mile = ureg .mile
@@ -21,12 +22,24 @@ class Config(BaseModel):
2122 trainasone_password : str
2223 finalsurge_email : str
2324 finalsurge_password : str
24- recovery_pace_adjust : Tuple [Union [float , int ], Union [float , int ]] = (0 , 0 )
25- very_easy_pace_adjust : Tuple [Union [float , int ], Union [float , int ]] = (0 , 0 )
26- easy_pace_adjust : Tuple [Union [float , int ], Union [float , int ]] = (0 , 0 )
27- fast_pace_adjust : Tuple [Union [float , int ], Union [float , int ]] = (0 , 0 )
28- extreme_pace_adjust : Tuple [Union [float , int ], Union [float , int ]] = (0 , 0 )
25+ power_adjust : Tuple [Union [float , int ], Union [float , int ]] = (0 , 0 )
2926 number_of_workouts : int = 1
27+ # Old config values
28+ recovery_pace_adjust : Any = Field (removed = 'Field `power_adjust` has been added instead' )
29+ very_easy_pace_adjust : Any = Field (removed = 'Field `power_adjust` has been added instead' )
30+ easy_pace_adjust : Any = Field (removed = 'Field `power_adjust` has been added instead' )
31+ fast_pace_adjust : Any = Field (removed = 'Field `power_adjust` has been added instead' )
32+ extreme_pace_adjust : Any = Field (removed = 'Field `power_adjust` has been added instead.' )
33+
34+ @validator ('*' )
35+ def warn_removed (cls , v , field ):
36+ removed = field .field_info .extra .get ('removed' )
37+ if removed :
38+ message = f'Config field `{ field .name } ` was removed.'
39+ if isinstance (removed , str ):
40+ message += f' { removed } '
41+ logger .warning (message )
42+ return v
3043
3144 class Config :
3245 extra = 'forbid'
@@ -41,6 +54,14 @@ def __init__(self, min_val, max_val):
4154 self .min = max (0 , min_val )
4255 self .max = max_val
4356
57+ def __add__ (self , other ):
58+ new = PowerRange (self .min , self .max )
59+ if not len (other ) == 2 :
60+ raise ValueError (f'Cannot add { repr (other )} to PowerRange' )
61+ new .min = builtins .max (0 , self .min + other [0 ])
62+ new .max += other [1 ]
63+ return new
64+
4465
4566class PaceRange (NamedTuple ):
4667 min : Quantity
0 commit comments