
    ]h                         d dl Z d dlmZ d dlmZmZmZ d dlmZmZm	Z	m
Z
 d dlmZ ddgZej                  Z G d d	      Z e       Z	 d
e
defdZdeeee	e
f   defdZ G d de      Zy)    N)JSONEncoder)UnioncastAny)datetimedatetime	timedelta)timezoneNULLAzureJSONEncoderc                       e Zd ZdZdefdZy)_NullzTo create a Falsy objectreturnc                      y)NF )selfs    ^/var/www/core.comfia.cic-ware.com/crm/lib/python3.12/site-packages/azure/core/serialization.py__bool__z_Null.__bool__   s        N)__name__
__module____qualname____doc__boolr   r   r   r   r   r      s    "$ r   r   tdr   c                 V   | j                         }t        |d      \  }}t        |d      \  }}t        |d      \  }}t        t        t        |||f            \  }}}t        |d      }d}|rd|z  }d}|xs |}|r|dj                  |      z  }|xs |}|r|dj                  |      z  }	 |j                         rd	j                  t	        |            }nd
|z  }|j                  d      }|dj                  |      z  }d|z   |z   S # t        $ r d	j                  |      }Y 8w xY w)au  Converts a datetime.timedelta object into an ISO 8601 formatted string, e.g. 'P4DT12H30M05S'

    Function adapted from the Tin Can Python project: https://github.com/RusticiSoftware/TinCanPython

    :param td: The timedelta object to convert
    :type td: datetime.timedelta
    :return: An ISO 8601 formatted string representing the timedelta object
    :rtype: str
    <          z%sDTz{:02}Hz{:02}Mz{:02}z%09.6f0z{}SP)
total_secondsdivmodlistmapintroundformat
is_integerrstripAttributeError)	r   secondsminuteshoursdaysdate_strtime_strbigger_existsseconds_strings	            r   _timedelta_as_isostrr7       sN     Ggr*GWGR(NE7#KD%C$w)? @AD%GQG H4< H %MHOOE** ",WMHOOG,,	1$^^CL9N &/N+2237N ^,,H>H$$  1 01s   .AD D('D(dtc                    t        | d      rt        | d      rvt        t        |       } | j                  s%| j	                  t
              j                         }n#| j                  t
              j                         }|j	                  dd      S 	 t        t        t        t        f   |       } | j                         S # t        $ r t        t        |       } t        |       cY S w xY w)aC  Converts a datetime.(datetime|date|time|timedelta) object into an ISO 8601 formatted string.

    :param dt: The datetime object to convert
    :type dt: datetime.datetime or datetime.date or datetime.time or datetime.timedelta
    :return: An ISO 8601 formatted string representing the datetime object
    :rtype: str
    yearhour)tzinfoz+00:00Z)hasattrr   r   r<   replaceTZ_UTC	isoformat
astimezoner   r   r	   r.   r
   r7   )r8   iso_formatteds     r   _datetime_as_isostrrD   W   s     r6wr62(ByyJJfJ5??AMMM&1;;=M$$Xs33(%d
#R(||~ ()R #B''(s   ,B= =$C$#C$c                   ,     e Zd ZdZdedef fdZ xZS )r   zHA JSON encoder that's capable of serializing datetime objects and bytes.or   c                     t        |t        t        f      r#t        j                  |      j                         S 	 t        |      S # t        $ r Y nw xY wt        t        | +  |      S )N)
isinstancebytes	bytearraybase64	b64encodedecoderD   r.   superr   default)r   rF   	__class__s     r   rO   zAzureJSONEncoder.defaultv   sa    a%+,##A&--//	&q)) 		%t4Q77s   
A 	AA)r   r   r   r   r   rO   __classcell__)rP   s   @r   r   r   s   s    R8 8 8 8r   )rK   jsonr   typingr   r   r   r   r   r	   r
   r   __all__utcr@   r   r   strr7   rD   r   r   r   r   <module>rW      s      # # 4 4  %
&	  w4%Y 4%3 4%n(E(D$	"AB (s (8
8{ 
8r   