
    i(                    P   d Z ddlmZ ddlmZ ddlmZmZ er	ddlm	Z	m
Z
 n	 ddlm	Z	m
Z
 n# e$ r	 eZ	dCd
Z
Y nw xY w G d d          Z G d d          Z G d d          Z G d d          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d d e	          Z eee          5  e                                 d!d!d!           n# 1 swxY w Y    G d" d#e	          Z G d$ d%e	          Z G d& d'e          Z G d( d)e          Z G d* d+e          Z G d, d-e          Z  G d. d/e          Z! G d0 d1e          Z" G d2 d3e          Z#	 	 dDdEd;Z$	 dFdEd<Z%	 dFdEd=Z&	 dFdEd>Z'dGdBZ(d!S )HzTyped workout models for Garmin Connect workouts.

This module provides Pydantic models for creating type-safe workout definitions.
Pydantic is an optional dependency - install it with: pip install pydantic
or: pip install garminconnect[workout]
    )annotations)suppress)TYPE_CHECKINGAny)	BaseModelField_argsr   _kwargsreturnc                     dS )z:Placeholder Field function when pydantic is not installed.N )r	   r
   s     P/root/projects/butler/venv/lib/python3.11/site-packages/garminconnect/workout.pyr   r      s    4    c                  2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )	SportTypezCommon Garmin sport type IDs.                        N)__name__
__module____qualname____doc__RUNNINGCYCLINGSWIMMINGWALKINGMULTI_SPORTFITNESS_EQUIPMENTHIKINGOTHERr   r   r   r   r      s=        ''GGHGKFEEEr   r   c                  *    e Zd ZdZdZdZdZdZdZdZ	dS )	StepTypez$Common Garmin workout step type IDs.r   r   r   r   r   r   N)
r   r   r   r   WARMUPCOOLDOWNINTERVALRECOVERYRESTREPEATr   r   r   r'   r'   *   s2        ..FHHHDFFFr   r'   c                  .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ConditionTypez%Common Garmin end condition type IDs.r   r   r   r   r   r   r   N)r   r   r   r   DISTANCETIME
HEART_RATECALORIESCADENCEPOWER
ITERATIONSr   r   r   r/   r/   6   s7        //HDJHGEJJJr   r/   c                  *    e Zd ZdZdZdZdZdZdZdZ	dS )	
TargetTypez&Common Garmin workout target type IDs.r   r   r   r   r   r   N)
r   r   r   r   	NO_TARGETr2   r4   SPEEDr5   OPENr   r   r   r8   r8   C   s2        00IJGEEDDDr   r8   c                  6    e Zd ZU dZded<   ded<   dZded<   dS )	SportTypeModelzSport type model.intsportTypeIdstrsportTypeKeyr   displayOrderN)r   r   r   r   __annotations__rB   r   r   r   r=   r=   N   sA         Lr   r=   c                  @    e Zd ZU dZded<   ded<   ded<   dZded	<   d
S )EndConditionModelz&End condition model for workout steps.r>   conditionTypeIdr@   conditionTypeKeyrB   TbooldisplayableN)r   r   r   r   rC   rI   r   r   r   rE   rE   V   sM         00Kr   rE   c                  2    e Zd ZU dZded<   ded<   ded<   dS )TargetTypeModelz$Target type model for workout steps.r>   workoutTargetTypeIdr@   workoutTargetTypeKeyrB   N)r   r   r   r   rC   r   r   r   rK   rK   _   s<         ..r   rK   c                  0    e Zd ZU dZdZded<   dZded<   dS )StrokeTypeModelz*Stroke type model (for swimming workouts).r   r>   strokeTypeIdrB   N)r   r   r   r   rP   rC   rB   r   r   r   rO   rO   g   s:         44LLr   rO   c                  0    e Zd ZU dZdZded<   dZded<   dS )EquipmentTypeModelzEquipment type model.r   r>   equipmentTypeIdrB   N)r   r   r   r   rS   rC   rB   r   r   r   rR   rR   n   s:         OLr   rR   c                      e Zd ZU dZdZded<   ded<   dZded	<   dZded
<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<    G d d          ZdS )ExecutableStepzEExecutable workout step (warmup, interval, recovery, cooldown, etc.).ExecutableStepDTOr@   typer>   	stepOrderNdict[str, Any] | NonestepTypeendConditionfloat | NoneendConditionValue
targetType
strokeTypeequipmentType
int | NonechildStepIdc                      e Zd ZdZdZdS )ExecutableStep.ConfigPydantic config.allowNr   r   r   r   extrar   r   r   Configrd              r   ri   )r   r   r   r   rW   rC   rZ   r[   r]   r^   r_   r`   rb   ri   r   r   r   rU   rU   u   s         OO#D####NNN&*H*****.L....&*****(,J,,,,(,J,,,,+/M////"K""""         r   rU   c                      e Zd ZU dZdZded<   ded<   dZded	<   ded
<   ded<   dZded<   dZded<   dZ	ded<   dZ
ded<    G d d          ZdS )RepeatGroupz)Repeat group for repeating workout steps.RepeatGroupDTOr@   rW   r>   rX   NrY   rZ   numberOfIterations"list[ExecutableStep | RepeatGroup]workoutStepsr[   r\   r]   ra   rb   FrH   smartRepeatc                      e Zd ZdZdZdS )RepeatGroup.Configre   rf   Nrg   r   r   r   ri   rs      rj   r   ri   )r   r   r   r   rW   rC   rZ   r[   r]   rb   rq   ri   r   r   r   rl   rl      s         33 D    NNN&*H****4444*.L....&*****"K""""K         r   rl   Nc                  L    e Zd ZU dZded<   ded<   ded<    G d d	          Zd
S )WorkoutSegmentz)Workout segment containing workout steps.r>   segmentOrderdict[str, Any]	sportTypero   rp   c                      e Zd ZdZdZdS )WorkoutSegment.Configre   rf   Nrg   r   r   r   ri   rz      rj   r   ri   N)r   r   r   r   rC   ri   r   r   r   ru   ru      sh         334444         r   ru   c                      e Zd ZU dZded<   ded<   ded<   ded	<    ee
          Zded<    G d d          ZddZ	dS )BaseWorkoutzBase workout model.r@   workoutNamerw   rx   r>   estimatedDurationInSecszlist[WorkoutSegment]workoutSegmentsdefault_factoryauthorc                      e Zd ZdZdZdS )BaseWorkout.Configre   rf   Nrg   r   r   r   ri   r      rj   r   ri   r   c                0    |                      dd          S )z-Convert workout to dictionary for API upload.Tjson)exclude_nonemode)
model_dump)selfs    r   to_dictzBaseWorkout.to_dict   s    Dv>>>r   N)r   rw   )
r   r   r   r   rC   r   dictr   ri   r   r   r   r   r|   r|      s             ))))"U4888F8888       
? ? ? ? ? ?r   r|   c                  8    e Zd ZU dZ ed           Zded<   dS )RunningWorkoutzRunning workout model.c                 "    t           j        dddS )Nrunningr   r?   rA   rB   )r   r   r   r   r   <lambda>zRunningWorkout.<lambda>       $,%!
 !
 r   r   rw   rx   Nr   r   r   r   r   rx   rC   r   r   r   r   r      P            %
 
! ! !I      r   r   c                  8    e Zd ZU dZ ed           Zded<   dS )CyclingWorkoutzCycling workout model.c                 "    t           j        dddS )Ncyclingr   r   )r   r   r   r   r   r   zCyclingWorkout.<lambda>   r   r   r   rw   rx   Nr   r   r   r   r   r      r   r   r   c                  8    e Zd ZU dZ ed           Zded<   dS )SwimmingWorkoutzSwimming workout model.c                 "    t           j        dddS )Nswimmingr   r   )r   r    r   r   r   r   zSwimmingWorkout.<lambda>   s    $-&!
 !
 r   r   rw   rx   Nr   r   r   r   r   r      sP         !! %
 
! ! !I      r   r   c                  8    e Zd ZU dZ ed           Zded<   dS )WalkingWorkoutzWalking workout model.c                 "    t           j        dddS )Nwalkingr   r   )r   r!   r   r   r   r   zWalkingWorkout.<lambda>   r   r   r   rw   rx   Nr   r   r   r   r   r      r   r   r   c                  8    e Zd ZU dZ ed           Zded<   dS )MultiSportWorkoutzMulti-sport workout model.c                 "    t           j        dddS )Nmulti_sportr   r   )r   r"   r   r   r   r   zMultiSportWorkout.<lambda>   s    $0)!
 !
 r   r   rw   rx   Nr   r   r   r   r   r      sP         $$ %
 
! ! !I      r   r   c                  8    e Zd ZU dZ ed           Zded<   dS )FitnessEquipmentWorkoutz Fitness equipment workout model.c                 "    t           j        dddS )Nfitness_equipmentr   r   )r   r#   r   r   r   r   z FitnessEquipmentWorkout.<lambda>   s    $6/!
 !
 r   r   rw   rx   Nr   r   r   r   r   r      sP         ** %
 
! ! !I      r   r   c                  8    e Zd ZU dZ ed           Zded<   dS )HikingWorkoutzHiking workout model.c                 "    t           j        dddS )Nhikingr   r   )r   r$   r   r   r   r   zHikingWorkout.<lambda>  s    $+$!
 !
 r   r   rw   rx   Nr   r   r   r   r   r     sP          %
 
! ! !I      r   r   r   duration_secondsfloat
step_orderr>   target_typerY   c           
         t          |t          j        dddt          j        dddd| |pt
          j        ddd	
          S )zCreate a warmup step.warmupr   
stepTypeIdstepTypeKeyrB   timer   TrF   rG   rB   rI   	no.targetrL   rM   rB   rX   rZ   r[   r]   r^   )rU   r'   r(   r/   r1   r8   r9   r   r   r   s      r   create_warmup_stepr     sq     "/#
 
  -1 &	
 
 + 
#-#7$/
 
   r   c           
         t          |t          j        dddt          j        dddd| |pt
          j        dd	d
          S )zCreate an interval step.intervalr   r   r   r   Tr   r   r   r   r   )rU   r'   r*   r/   r1   r8   r9   r   s      r   create_interval_stepr   2  r     "+%
 
  -1 &	
 
 + 
#-#7$/
 
   r   c           
         t          |t          j        dddt          j        dddd| |pt
          j        dd	d
          S )zCreate a recovery step.recoveryr   r   r   r   Tr   r   r   r   r   )rU   r'   r+   r/   r1   r8   r9   r   s      r   create_recovery_stepr   O  r   r   c           
         t          |t          j        dddt          j        dddd| |pt
          j        ddd	
          S )zCreate a cooldown step.cooldownr   r   r   Tr   r   r   r   r   )rU   r'   r)   r/   r1   r8   r9   r   s      r   create_cooldown_stepr   l  r   r   
iterationsworkout_stepsro   c                    t          |t          j        ddd| |t          j        ddddt          |                     S )	zCreate a repeat group.repeatr   r   r   r   Fr   )rX   rZ   rn   rp   r[   r]   )rl   r'   r-   r/   r6   r   )r   r   r   s      r   create_repeat_groupr     sa     "/#
 

 &",7 , 	
 
  
++   r   )r	   r   r
   r   r   r   )r   N)r   r   r   r>   r   rY   r   rU   )N)r   r>   r   ro   r   r>   r   rl   ))r   
__future__r   
contextlibr   typingr   r   pydanticr   r   ImportErrorobjectr   r'   r/   r8   r=   rE   rK   rO   rR   rU   rl   AttributeError	TypeErrormodel_rebuildru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s%    # " " " " "       % % % % % % % % )))))))))---------   		 	 	 	 	 		
 
 
 
 
 
 
 
       	 	 	 	 	 	 	 	           Y       	       i       i              Y   &    )   ( Xni((                                 
 
 
 
 
Y 
 
 
? ? ? ? ?) ? ? ?&	 	 	 	 	[ 	 	 		 	 	 	 	[ 	 	 		 	 	 	 	k 	 	 		 	 	 	 	[ 	 	 		 	 	 	 	 	 	 		 	 	 	 	k 	 	 		 	 	 	 	K 	 	 	 )-    @ *.    @ *.    @ *.    :     s   , ::D  DD