Ë
    pPêjé  ã                   óâ   — 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)Ú
BaseHelperzÒBase 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     ú\/home/oem/CyberBrain26-unified/.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 )z˜json 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   € ð ×"Ñ" 1§6¡6Ó*Ð*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ð   u¨S°#¨X¡ò  ó ð ð ð	' ð 	'Ø$Pð	'à" 3™ið	'ð $'ð	'ð ,/ò	'ó ð	'ð ð" ð "¨ò "ó ð"ð ð$˜cð $Ø$'ð$à$ T¨*Ñ%5Ñ6ð$ð & c™]ð$ð "Nð	$ð
   ™9ð$ð !$ð$ð )1°°yÀ#°~Ñ1FÑ(Gò$ó ð$ð ð ˜cð   e¨C°¨H¡oò  ó ð ð ð+ 	ð +Ø$,¨S¡Mð+à#Oð+ð " #™Yð+ð #&ð	+ð +.ò	+ó ð+ð ð"  c¨3 h¡ð "°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ÜÐ5°a°SÐ8QÔR]×RkÑRkÐQlÐlmÐ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   ÚZéÿÿÿÿzLPotential 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Ô à�a�b�E�à�z‰z˜#ŒØ�c�r�F�Ü—‘ØbØ ð  ô "ð �a‰xØ�m�q—w‘w˜s“|Ð$�Ü—‘ØbØ ð  ô "ô ×%Ñ% aÓ(Ð(øÜò 	ZÜÐ5°a°SÐ8WÐ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&   € ð �y‰yÐ ð �}‰}‹ð 	àð	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!   € ¼¸a¿g¹gÀa»jÓ8IÈ3Ð6OÐQRÐQSÐ4T€ r   )Ú_XsdDateTime__PATTERN_FRACTIONÚsub)r   rc   s     r   Ú__fix_microsecondszXsdDateTime.__fix_microsecondsÉ   s   € ð ×%Ñ%×)Ñ)Ñ*TÐVWÓ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Ô à�a�b�E�Ø�z‰z˜#Œà˜˜"�v�h˜fÐ%�Ü×)Ñ)Ø×&Ñ& 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   