
    ܖi                         d dl mZm Z  d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZ erd dlmZ ddlmZmZ  ed      Z ee      Z G d	 d
      Z G d de      Z G d de      Z G d de      Zy)    )datedatetime)	getLogger)compile)TYPE_CHECKINGAnyOptionalTypeTypeVarUnion)Element   )ObjectMetadataLibraryViewType_Tc                      e Zd ZdZededeeef   fd       Zededefd       Z	edede
ed      dd	d
ee   dede
e   fd       Zededeeef   fd       Zededd	d
ee   dedef
d       Zededefd       Zededede
ed      de
e   dd	d
ee   dede
edef      fd       Zededeeef   fd       Zeddde
e   dd	d
ee   dedefd       Zedeeef   defd       Zy)
BaseHelperzBase Helper.

    Inherit from this class and implement/override the needed functions!

    This class does not provide any functionality,
    it is more like a Protocol with some fallback implementations.
    oreturnc                     t               )zgeneral purpose serializerNotImplementedErrorclsr   s     [/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/py_serializable/helpers.py	serializezBaseHelper.serialize,        "##    c                     t               )zgeneral purpose deserializerr   r   s     r   deserializezBaseHelper.deserialize1   r   r   viewr   	prop_infoz*ObjectMetadataLibrary.SerializablePropertyctxkwargsc                $    | j                  |      S )zjson specific normalizer)json_serialize)r   r   r!   r"   r#   r$   s         r   json_normalizezBaseHelper.json_normalize:   s     !!!$$r   c                 $    | j                  |      S )zjson specific serializerr   r   s     r   r&   zBaseHelper.json_serializeC        }}Qr   c                $    | j                  |      S )zjson specific denormalizer

        :param tCls: the class that was desired to denormalize to
        :param pCls: tha prent class - as context
        )json_deserialize)r   r   r"   r#   r$   s        r   json_denormalizezBaseHelper.json_denormalizeH   s     ##A&&r   c                 $    | j                  |      S )zjson specific deserializerr    r   s     r   r,   zBaseHelper.json_deserializeT        q!!r   element_namexmlnsr   c                $    | j                  |      S )zxml specific normalizer)xml_serialize)r   r   r1   r!   r2   r"   r#   r$   s           r   xml_normalizezBaseHelper.xml_normalize]   s       ##r   c                 $    | j                  |      S )zxml specific serializerr)   r   s     r   r4   zBaseHelper.xml_serializeh   r*   r   
default_nsc                8    | j                  |j                        S )zxml specific denormalizer)xml_deserializetext)r   r   r7   r"   r#   r$   s         r   xml_denormalizezBaseHelper.xml_denormalizem   s     ""166**r   c                 $    | j                  |      S )zxml specific deserializerr/   r   s     r   r9   zBaseHelper.xml_deserializev   r0   r   N)__name__
__module____qualname____doc__classmethodr   r   strr   r    r	   r
   r'   r&   r-   r,   r5   r4   r;   r9    r   r   r   r   !   s`    $# $%S/ $ $ $C $C $ $ %s %%d:&67%"N% !I% "%	% *2#	% %  s  uS#X     	' 	'$P	'"3i	' $'	' ,/	' 	' " " " " $c $$'$$T*%56$ &c]$ "N	$
  9$ !$$ )1y#~1F(G$ $  c  eCHo     +	 +$,SM+#O+ "#Y+ #&	+ +.	+ + "c3h "C " "r   r   c                   D    e Zd ZdZededefd       Zededefd       Z	y)Iso8601Datez%Y-%m-%dr   r   c                     t        |t              r|j                  t        j                        S t        d|j                         Nz!Attempt to serialize a non-date: )
isinstancer   strftimerE   _PATTERN_DATE
ValueError	__class__r   s     r   r   zIso8601Date.serialize   s8    a::k7788<Q[[MJKKr   c                     	 t        j                  t        |            S # t        $ r! t        d| dt        j
                   d      w xY w)NDate string supplied (z) does not match either "")r   fromisoformatrB   rK   rE   rJ   r   s     r   r    zIso8601Date.deserialize   sS    	p%%c!f-- 	p5aS8QR]RkRkQllmnoo	ps	     *A
N)
r=   r>   r?   rJ   rA   r   rB   r   r   r    rC   r   r   rE   rE   ~   sQ    ML# L# L L pC pD p pr   rE   c                   @    e Zd Zededefd       Zededefd       Zy)XsdDater   r   c                 r    t        |t              r|j                         S t        d|j                         rG   )rH   r   	isoformatrK   rL   r   s     r   r   zXsdDate.serialize   s/    a;;= <Q[[MJKKr   c                 `   	 t        |      }|j                  d      r|dd  }|j                  d      r|d d }t        j	                  dd       d|v r+|d |j                  d       }t        j	                  dd       t        j                  |      S # t        $ r t        d	| d
      w xY w)N-r   ZzLPotential data loss will occur: dates with timezones not supported in Python   )
stacklevel+rN   ) is not a supported ISO Format)	rB   
startswithendswith_loggerwarningindexr   rP   rK   r   r   vs      r   r    zXsdDate.deserialize   s    	ZAA||C abEzz#crFb    " axmqwws|$b    " %%a(( 	Z5aS8WXYY	Zs   BB B-N)	r=   r>   r?   rA   r   rB   r   r   r    rC   r   r   rR   rR      sL    L# L# L L ZC ZD Z Zr   rR   c                       e Zd Zededefd       Zededefd       Z	 e
d      Zededefd       Zededefd	       Zy
)XsdDateTimedtr   c                 >    | j                   | j                         S | S )z
        Fix for Python's violation of ISO8601: :py:meth:`datetime.isoformat()` might omit the time offset when in doubt,
        but the ISO-8601 assumes local time zone.
        Anyway, the time offset is mandatory for this purpose.
        )tzinfo
astimezone)rf   s    r   __fix_tzzXsdDateTime.__fix_tz   s&     yy  }} 		r   r   c                     t        |t              r| j                  |      j                         S t	        d|j
                         rG   )rH   r   _XsdDateTime__fix_tzrT   rK   rL   r   s     r   r   zXsdDateTime.serialize   s:    a"<<?,,..<Q[[MJKKr   z\.\d+rc   c                 <    | j                   j                  d |      S )aI  
        Fix for Python's violation of ISO8601 for :py:meth:`datetime.fromisoformat`.
          1. Ensure either 0 or exactly 6 decimal places for seconds.
             Background: py<3.11 supports either 6 or 0 digits for milliseconds when parsing.
          2. Ensure correct rounding of microseconds on the 6th digit.
        c                 @    t        | j                  d            ddd  S )Nr   z.6fr   )floatgroup)ms    r   <lambda>z0XsdDateTime.__fix_microseconds.<locals>.<lambda>   s!    aggaj8I36OQRQS4T r   )_XsdDateTime__PATTERN_FRACTIONsub)r   rc   s     r   __fix_microsecondszXsdDateTime.__fix_microseconds   s     %%))*TVWXXr   c                     	 t        |      }|j                  d      r|dd  }|j                  d      r|d d  d}t        j                  | j                  |            S # t        $ r t        d| d      w xY w)NrV   r   rW   rX   z+00:00zDate-Time string supplied (r\   )rB   r]   r^   r   rP   _XsdDateTime__fix_microsecondsrK   rb   s      r   r    zXsdDateTime.deserialize   s    	_AA||C abEzz#"vhf%))&&q)+ + 	_:1#=\]^^	_s   AA   A9N)r=   r>   r?   staticmethodr   rl   rA   r   rB   r   
re_compilers   rw   r    rC   r   r   re   re      s    X (   L# L# L L $H-Y3 Y3 Y Y _C _H _ _r   re   N)r   r   loggingr   rer   ry   typingr   r   r	   r
   r   r   xml.etree.ElementTreer    r   r   r   r=   r_   r   rE   rR   re   rC   r   r   <module>r      sj   $ $  $ E E-1T]
H
X" X"zp* p$Zj Z@2_* 2_r   