
    ܖi                        U d dl m Z  d dlmZ d dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZmZ d dlmZmZ d d	lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d d
l*m+Z+m,Z, d dl-m.Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 d dlm'Z8 d dlZdZ9 ee:      Z;e;jy                   e              e;Z=	  G d d      Z> e&dedef         Z? e&d      Z@ e&de      ZAe G d deBe             ZCeCj                  eCj                  fZFeeC   eGd<   e G d de             ZHe G d d e             ZIeIj                  e6eIj                  e7iZLeeIeeBgeBf   f   eGd!<   d"eBd#e!eI   d$eBfd%ZMd&d'd(ed)e!e%e>      d$eNfd*ZO G d+ d,e      ZP G d- d.e"      ZQd/ZR G d0 d1e"      ZSd2eBd3e!eB   d$eBfd4ZT G d5 d6      ZUe)dUd7e d   d$ee%eA   ge%eA   f   fd8       ZVe)d7e%eA   d$e%eA   fd9       ZVdUd7e!e%eA      d$e'ee%eA   ge%eA   f   e%eA   f   fd:ZVe)	 dUddddd;d7e d   d<e!eB   d=e!eeC      d>e!eeB      d?eNd$ee%e@   ge8e%e@   e%eQ   e%eS   f   f   fd@       ZWe)ddddd;d7e%e@   d<e!eB   d=e!eeC      d>e!eeB      d?eNd$e8e%e@   e%eQ   e%eS   f   fdA       ZW	 dUddddBd;d7e!e%e@      d<e!eB   d=e!eeC      d>e!eeB      d?eNd$e'ee%e@   ge8e%e@   e%eQ   e%eS   f   f   e8e%e@   e%eQ   e%eS   f   f   fdCZWdDeXd$ee?ge?f   fdEZYdVd)e!e%e>      dFe!e   d$ee?ge?f   fdGZZd<eBd$ee?ge?f   fdHZ[dIeBd$ee?ge?f   fdJZ\d)e%e>   d$ee?ge?f   fdKZ]d$ee?ge?f   fdLZ^dMeHdNeBd$ee?ge?f   fdOZ_dPeId$ee?ge?f   fdQZ`d<eBd$ee?ge?f   fdRZadSebd$ee?ge?f   fdTZcy)W    )copy)Decimal)EnumEnumMetaunique)getfullargspec
getmembersisclass)StringIO
TextIOBase)JSONEncoderdumps)NullHandler	getLogger)compilesearch)AnyCallableDictIterableListLiteralOptionalProtocolSetTupleTypeTypeVarUnioncastoverload)Element
SubElement)ElementTree   )BaseNameFormatterCurrentFormatter)
BaseHelper)xs_normalizedStringxs_token)r   Nz2.1.0c                       e Zd ZdZy)ViewTypezBase of all views.N)__name__
__module____qualname____doc__     \/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/py_serializable/__init__.pyr,   r,   I   s    r2   r,   _F.)bound_T_Ec                       e Zd ZdZdZdZy)SerializationTypez_
    Enum to define the different formats supported for serialization and deserialization.
    JSONXMLN)r-   r.   r/   r0   r:   r;   r1   r2   r3   r9   r9   S   s     D
Cr2   r9   _DEFAULT_SERIALIZATION_TYPESc                       e Zd ZdZdZdZy)XmlArraySerializationTypea  
    Enum to differentiate how array-type properties (think Iterables) are serialized.

    Given a ``Warehouse`` has a property ``boxes`` that returns `List[Box]`:

    ``FLAT`` would allow for XML looking like:

    ``
    <warehouse>
        <box>..box 1..</box>
        <box>..box 2..</box>
    </warehouse>
    ``

    ``NESTED`` would allow for XML looking like:

    ``
    <warehouse>
        <boxes>
            <box>..box 1..</box>
            <box>..box 2..</box>
        </boxes>
    </warehouse>
    ``
    r%      N)r-   r.   r/   r0   FLATNESTEDr1   r2   r3   r>   r>   c   s    2 DFr2   r>   c                        e Zd ZdZdZ	 dZ	 dZy)XmlStringSerializationTypezJ
    Enum to differentiate how string-type properties are serialized.
    r%   r?      N)r-   r.   r/   r0   STRINGNORMALIZED_STRINGTOKENr1   r2   r3   rC   rC      s,     F > E3r2   rC   __XS_STRING_MODSvtreturnc                 D    t         j                  |      }|r ||       S | S N)rH   get)rI   rJ   mods      r3   _xs_string_mod_applyrP      s#    


q
!C3q6ar2   	prop_info*ObjectMetadataLibrary.SerializablePropertyvalue_view_c                 F   d}|r,| j                   r|| j                   v rd}n| j                   sd}n| j                   sd}|| j                  rTt        |      dk  rF| j                  sd}|S | j                  r*| j                  rd}| j                  D ]  \  }}||k(  sd} |S )NFTr%   )viewsis_arrayleninclude_noneinclude_none_views)rQ   rS   rT   allow_for_view_v_as         r3   _allow_property_for_viewr^      s     N??u	7!N!N!N ~),,Vq%%"N  ##	(D(D"N#66 *B;%)N* r2   c                        e Zd ZdZdddddddddd	dededed	ed
edee   deeeef      dee	e
ge
f      deee      ddf fdZedeee      fd       Zde
de
f fdZ xZS )_SerializableJsonEncoderz
    ``py_serializable``'s custom implementation of ``JSONEncode``.

    You don't need to call this directly - it is all handled for you by ``py_serializable``.
    FTN)	skipkeysensure_asciicheck_circular	allow_nan	sort_keysindent
separatorsdefaultrT   ra   rb   rc   rd   re   rf   rg   rh   rT   rK   c       	   
      B    t         
|   ||||||||       |	| _        y )N)ra   rb   rc   rd   re   rf   rg   rh   )super__init___view)selfra   rb   rc   rd   re   rf   rg   rh   rT   	__class__s             r3   rk   z!_SerializableJsonEncoder.__init__   s3     	Lcl:w 	 	
 05
r2   c                     | j                   S rM   )rl   rm   s    r3   viewz_SerializableJsonEncoder.view   s    zzr2   oc                 J   t        |t              r|j                  S t        |t        t        f      rt        |      S t        |t
              ri }|j                   d|j                  j                   }t        j                  j                  |i       }|j                         D ]g  \  }}t        ||      }t        || j                  |      s,t!        j"                  |      }|j$                  j                  t&        j(                        x}	rt+        |	      }t,        j.                  r t,        j.                  j1                  |      }|j2                  rX|j5                         r5|j2                  j7                  || j                  ||j                        }n|j3                  |      }n|j8                  rt;        |      dkD  rt        |      }nd }n|j<                  rt+        |j                        }n|j?                         st        |t@              r3|jB                  rtE        ||jB                   d      }nvtE        |      }nj|jF                  j                   d|jF                  jH                   }
|
t        jJ                  vr)|jB                  r||jB                   d}nt+        |      }|dk(  r|c S t        || j                  |      s7|jM                  |||n|jO                  | j                        i       j |S tP        |   |	       y )
N.rQ   rT   rS   nameproperty_name)rq   rQ   ctxr    rT   )rr   )*
isinstancer   valuelistsetobjectr.   rn   r/   ObjectMetadataLibraryklass_property_mappingsrN   itemsgetattrr^   rl   r&   *decode_handle_python_builtins_and_keywordscustom_namesr9   r:   strr'   	formatterencodecustom_typeis_helper_typejson_normalizerW   rX   is_enumis_primitive_typer   string_formatfloatconcrete_typer-   klass_mappingsupdateget_none_value_for_viewrj   rh   )rm   rr   dklass_qualified_nameserializable_property_infokrQ   rI   new_keycustom_nameglobal_klass_namern   s              r3   rh   z _SerializableJsonEncoder.default   s   a77N a$%7N a  "A&'ll^1Q[[5M5M4N#O )>)V)V)Z)Z[oqs)t& !; @ @ B /u9AqM/)4::^_`+VV\]^"+"8"8"<"<=N=S=S"TT;T!+.G#--.88??g?VG(( //1%11@@DJJ) A V &11!4''1vz G &&AGGA"446!!W-$22 %I,C,C+D@*D(E GA %aA/8/F/F/Q/Q.RRST]TkTkTtTtSu,v),4I4X4XX(66'()*A*A)B (B&C$'Fc>H+itzzZ[\HHgAMqy?`?`gkgqgq?`?rst_/ub H 	!r2   )r-   r.   r/   r0   boolr   intr   r   r   r   r   r,   rk   propertyrq   rh   __classcell__)rn   s   @r3   r`   r`      s     ,1tdh#'5Z^9=im375D 5 5]a 5 5485JRSV-5%eCHo65HPQY[^Z_adZdQeHf5 !h05 =A5 htH~.  D D D Dr2   r`   c                   b    e Zd Zd	dedeee      defdZe	dee
   deeef   dee
   fd       Zy)
_JsonSerializableNrm   rT   rK   c                 T    t         j                  d| |       t        | t        |      S )
        Internal method that is injected into Classes that are annotated for serialization and deserialization by
        ``py_serializable``.
        z#Dumping %s to JSON with view: %s...)clsrT   )_loggerdebug
json_dumpsr`   rm   rT   s     r3   as_jsonz_JsonSerializable.as_json#  s%    
 	;T5I$$<EJJr2   r   datac                 H	   t         j                  d|        | j                   d| j                   }t        j
                  j                  |      }t        j                  j                  |i       }|t         j                  d|d       yt        |      dk(  ret        t        |j                                     \  }}|j                  j                  t        j                        dk(  r | di |j                   |iS t#        |      }|j                         D ]O  \  }}||= t$        j&                  j)                  |      }	|	|j*                  v r-t         j                  d	|| j                  | j                         ed}
|	|vrK|	|h}|j                         D ]3  \  }}|j                  j                  t        j                        |v s2|}
5 n|	}
|
|j,                  r-t         j                  d	|| j                  | j                         t         j/                  d
||	| j                  | j                         t1        d| d|	 d| j                   d| j                         |||
<   R |j                         D ]  \  }}|j                  |      }|st1        d| d|        	 |j2                  rI|j5                         r#|j2                  j7                  |||      ||<   n\|j3                  |      ||<   nF|j8                  rwg }|D ]j  }|j;                         s8|j<                  s,|j?                  |j@                  jC                  |             K|j?                  |jA                  |             l |||<   n|j<                  r|jA                  |      ||<   n|j;                         s|j@                  j                   d|j@                  jD                   }|t        j
                  v r |j@                  jC                  |      ||<   n1|j@                  tF        u rtI        |      }|jA                  |      ||<    t         j                  d| |        | di |S # tJ        $ r2}t         jM                  d| ||       tK        d|  d| d|       |d}~ww xY w)r   zRendering JSON to %s...rt   Nz'%s is not a known py_serializable classr?   
stacklevelr%   rx   $Ignoring %s when deserializing %s.%s6Unexpected key %s/%s in data being serialized to %s.%szUnexpected key /z in data being serialized to zNo Prop Info for z in )rQ   rz   )r   \There was an AttributeError deserializing JSON to %s.
The Property is: %s
The Value was: %s
z2There was an AttributeError deserializing JSON to  the Property : Creating %s from %sr1   )'r   r   r.   r/   r   r   rN   r   warningrX   nextiterr   r   r9   r:   rw   r   r'   r   decodeignore_during_deserialization%ignore_unknown_during_deserializationerror
ValueErrorr   r   json_denormalizerW   r   r   appendr   	from_jsonr-   r   r   AttributeError	exception)r   r   r   klassklass_propertiesr   	only_prop_datarI   	decoded_kr   _allowed_custom_namesppirQ   r   jr   es                      r3   r   z_JsonSerializable.from_json+  s    	/5"%..!133C3C2DE%44889MN0HHLLMacef=OO9;O    A%%5%;%;%= >?LAy%%))*;*@*@ASH4innd344T
JJL 	DAqa(22999JIE???DaY\YiYijG 00)2A%-335 $EAr**+<+A+ABF[["#$ $>>MM"H!S^^]`]m]mnVCNNC<L<LN %aS)4QRUR`R`Qaabcfcscsbtu  E'N3	6 KKM %	DAq(,,Q/I #4QCtC5!ABB (( //1#,#8#8#I#I $J $?a $-#8#8#;a''E E(::<YEVEV!LL)@)@)J)JPQ)J)RS!LL)@)@)CD	E
  %E!H&&(66q9E!H"446+4+B+B+M+M*NaPYPgPgPpPpOq(r%(,A,P,PP#,#:#:#D#D!#D#La$22g= #AA#,#:#:1#=a;%	N 	+S%8|U| " !! #8 #&y!5 %H^\e[ffhijhkls   )FQ&&	R!/-RR!rM   )r-   r.   r/   r   r   r   r,   r   r   classmethodr6   r   r   r1   r2   r3   r   r   !  sg    Kc K(4>": Kc K ZtBx ZtCH~ Z(2, Z Zr2   r   )1truec                       e Zd Z	 	 	 ddedeee      dedee   dee   de	e
ef   fdZe	 dd	ee   d
e	ee
f   dee   dee   fd       Zy)_XmlSerializableNrm   rT   	as_stringelement_namexmlnsrK   c           
         t         j                  d| |       i }| j                  j                   d| j                  j                   }t        t        j                  j                  |i       j                         d       D ci c]  \  }}||
 }	}}| j                  j                         D ]t  \  }}|dd }
|
j                  d      sd|
v r"t        j                  |
	      }
|
|	v s=t        d
|	j                  |
            }t        |||      sg|sj|j                   sw|j"                  j                  t$        j&                  |
      }
t(        j*                  r t(        j*                  j-                  |
      }
|j.                  r<|j1                         r,|j.                  j3                  |||
||| j                        }n|j4                  r|j6                  }||j9                  |      }|It;        t=        |      |j>                        |tA        |
|      <   w tA        |r|n2t(        j*                  j-                  | j                  jB                        |      }tE        ||      }|	j                         D ]D  \  }}tG        | |      }t        |||      s"t        j                  |	      }
|stI        |
 d|       |j                   rW|j"                  j                  t$        j&                  |
      }
||j9                  |      }|tK        |tA        |
|             |
dk(  r%t;        t=        |      |j>                        |_&        t(        j*                  r t(        j*                  j-                  |
      }
tA        |
|      }
|jN                  ry|jP                  rl|jP                  \  }}tA        ||      }|r |tR        jT                  k(  rtK        ||
      }n|}|D ]%  }|jW                         s1|j4                  s%|jY                  |j[                  |d||             E|j4                  r9t;        t=        |j6                        |j>                        tK        ||      _&        |j\                  t^        t`        fv rt=        |      tK        ||      _&        |j\                  tb        u r)t=        |      je                         tK        ||      _&        t;        t=        |      |j>                        tK        ||      _&        ( |j.                  r|j1                         r|j.                  j3                  |||
||| j                        }|tg        |tD              r|jY                  |       	t;        t=        |      |j>                        tK        ||
      _&        9t;        t=        |j/                  |            |j>                        tK        ||
      _&        x|j4                  r:t;        t=        |j6                        |j>                        tK        ||
      _&        |jW                         s|j\                  j                   d|j\                  jB                   }|t        jh                  v r&|jY                  |j[                  |d|
|             5|jj                  r6t;        ||jj                   d|j>                        tK        ||
      _&        wt;        t=        |      |j>                        tK        ||
      _&        |j\                  t^        t`        fv rt=        |      tK        ||
      _&        |j\                  tb        u r*t=        |      je                         tK        ||
      _&        t;        t=        |      |j>                        tK        ||
      _&        G |r$t        tD        tm        jn                  |d            S |S c c}}w )r   z!Dumping %s to XML with view %s...rt   c                      | d   j                   S )Nr%   )xml_sequence)is    r3   <lambda>z)_XmlSerializable.as_xml.<locals>.<lambda>  s    !A$++ r2   )keyr%   N___rv   rR   ru   rx   )rq   r   r   rQ   rz   r|    is not a known Property for tag_namer   F)rT   r   r   r   r{   unicode)8r   r   rn   r.   r/   sortedr   r   rN   r   __dict__
startswithr&   r   r    r^   is_xml_attributer   r9   r;   r'   r   r   r   r   xml_normalizer   r~   r   rP   r   xml_string_config_namespace_element_namer-   r"   r   r   r#   textrW   xml_array_configr>   rA   r   r   as_xmlr   r   r   r   lowerr}   r   r   SafeElementTreetostring)rm   rT   r   r   r   this_e_attributesr   r   rI   r   r   rQ   this_e_array_type
nested_keynested_er   v_serr   s                      r3   r   z_XmlSerializable.as_xml  s    	94G"&..";";!<Adnn>Y>Y=Z[7=!99==>RTVW]]_+8- &.tq!ad &." &. MM'') 	RDAqeG!!#&$'/'RRX_`G44 !MOiOmOmnuOvw	/)5YZ[!;!;'44889J9N9NPWXG'11"2"<"<"C"CRY"C"Z ,,1I1I1K%11??EuXagkgugu @ w"**GGy%==E=Jy  -SVY5P5PQ &&=gu&MN=	RB /(L.>.H.H.O.OPTP^P^PgPg.h '89 7<<> Z	iLAya A+iuUVW'RRXYZG G9,IJ^I_!`aa--#00445F5J5JGT9!999FA9v'>W\']^c>"6s1v7@7R7R#TFK#--.88??g?VG1'5A%%)*D*D.7.H.H+K!8U!KJ"{6O6V6V'V#-fg#>#) v(::<YEVEV$OO !uT^fk ln&..DXY\]^]d]dYeYbYtYtEvJx<A&44DDGFJx<A&44<DGFLLNJx<A EYY\]^Y_YbYtYtEvJx<Av ** //1 ) 5 5 C CEuXagkgugu !D !w = 'w7"MM%0?STWX]T^T]ToTo@qJvw7< <PPST]TiTijkTlPmPYPkPk<m
6738&&7KCPQPWPWLLULgLg8iJvw/4"446+4+B+B+M+M*NaPYPgPgPpPpOq(r%(,A,P,PPahhUeZainh&op %22?SWXZcZqZqYrrrXrVsT]ToTo@qJvw7< @TTWXYTZT]ToTo@qJvw7<,,<7:1vJvw/4,,47:1v||~Jvw/4 8LCPQFLULgLg8iJvw/4sZ	ix !9!9&)!LMMMU&.s   _5r   r   default_namespacec                    t         j                  dt        |      |        t        j                  j                  | j                   d| j                         }|.t         j                  d| j                  | j                  d       yt        j                  j                  | j                   d| j                   i       }t        |t              r1t        t        t        j                  |j!                                     }t#        d t        j$                  t'        t        j(                  |d            d	g
      D              }t+        d      j-                  |j.                        xs d|j                  d      fd   dt0        dt0        fd}ndt0        dt0        ffd}i }|j2                  j5                         D ]  \  }}	t6        j8                  j;                   ||            }
|
|j<                  v r-t         j                  d|
| j                  | j                         g|
|vrG|j5                         D ]4  \  }}|j>                  j                  t@        jB                        |
k(  s3|}
6 |j                  |
      }|sd|jD                  r-t         j                  d|
| j                  | j                         tG        d|
 d| j                   d| j                   d|       |jH                  rtK        |	|jH                        }	|jL                  r0|jO                         r |jL                  jQ                  |	      ||
<   |jR                  r|jU                  |	      ||
<   |jW                         r|jU                  |	      ||
<   tG        d|
        |jX                  rv|j5                         D ]c  \  }}|j>                  j                  t@        jB                        dk(  s3tK        |jX                  j[                         |jH                        ||<   e |D ]r  }t6        j8                  j;                   ||j.                              }
|
|vrL|j5                         D ]9  \  }}|j\                  s|j\                  \  }}| ||j.                        k(  s8|}
; |
|j<                  v r-t         j                  d|
| j                  | j                         |
|vr|j5                         D ]n  \  }}|j\                  r.|j\                  \  }}||
k(  s'|t^        j`                  k(  r|}
=d}
@|j>                  j                  t@        jB                        |
k(  sm|}
p |
dk(  rJ|j                  |
      }|s|jD                  r.t         j                  d|
| j                  | j                         t         jc                  d|
| j                  | j                         tG        |
 d| j                   d| j                         	 t         j                  d|       |jX                  r%tK        |jX                  |jH                        |_,        |jd                  r|j\                  r|j\                  \  }}|
|vrg ||
<   |t^        jf                  k(  r|D ]  }|jX                  r%tK        |jX                  |jH                        |_,        |jW                         s<|jR                  s0||
   ji                  |jT                  jk                  |             ||
   ji                  |jU                  |jX                                nH|jW                         s=|jR                  s1||
   ji                  |jT                  jk                  |             n|jL                  rT|jO                         r$|jL                  jm                  |||      ||
<   n|jM                  |jX                        ||
<   n||
   ji                  |jU                  |jX                               nl|jL                  rT|jO                         r$|jL                  jm                  |||      ||
<   n,|jM                  |jX                        ||
<   n|jR                  r|jU                  |jX                        ||
<   n|jW                         s|jT                  j                   d|jT                  jn                   }|t        j                  v r!|jT                  jk                  |      ||
<   no|jU                  |jX                        ||
<   nP|jT                  tp        k(  rt1        |jX                        tr        v ||
<   n|jU                  |jX                        ||
<   u t         j                  d | |       ty        |      d!k(  ry | d"i |S # tt        $ r2}t         jw                  d| |	       tu        d|  d| d|       |d}~ww xY w)#r   zRendering XML from %s to %s...rt   Nz*%s.%s is not a known py_serializable classr?   r   c              3   &   K   | ]	  \  }}|  y wrM   r1   ).0r   nodes      r3   	<genexpr>z,_XmlSerializable.from_xml.<locals>.<genexpr>9  s      O4t Os   r   zstart-ns)eventsz^\{(.*?)\}.r{   r%   srK   c                     | S rM   r1   )r   s    r3   strip_default_namespacez:_XmlSerializable.from_xml.<locals>.strip_default_namespace?  s    r2   c                 0    | j                  d dd      S )N{}r{   )replace)r   r   s    r3   r   z:_XmlSerializable.from_xml.<locals>.strip_default_namespaceB  s    yy2&7%8!;R@@r2   r   z<Non-primitive types not supported from XML Attributes - see z for z which has Prop Metadata: ____SKIP_ME____r   r   zHandling %s)r   r   )
default_nsrQ   rz   r   z1There was an AttributeError deserializing XML to r   r   r   r   r1   )=r   r   typer   r   rN   r.   r/   r   r   r}   r   r    r"   r   
fromstringreaddict	iterparser   r   
re_compiler   tagr   attribr   r'   r   r   r   r   r9   r;   r   r   r   rP   r   r   xml_deserializer   r   r   r   stripr   r>   r@   r   rW   rA   r   from_xmlxml_denormalizer-   r   _XML_BOOL_REPRESENTATIONS_TRUEr   r   rX   )r   r   r   r   r   _namespacesr   r   r   rI   r   r   r   rQ   child_e
array_typenested_namesub_child_er   r   s     `                 r3   r  z_XmlSerializable.from_xml%  sl	    	6T
CH%4488CNN;K1SM]M]L^9_`=OOH#..Z]ZjZj'(  *0HHLLPSP^P^O__`adaqaq`rMsuwxdJ'!;!;DIIK!HID$ O.88/BZBZ[_ajBk9lAK NO OK ",N!;!B!B488!L!kQUWbWfWfgiWjPkmn o$3 3 A3 A3 A !# KK%%' 	mDAq(2299:QRS:TUIE???DiQTQ_Q_adaqaqr 00-335 &EAr**+<+@+@AYN$%	& ),,Y7I>>MM"H)UXUcUceheueuv #_`i_jjo$'NN#31S5E5E4FF`aj`k"m n n **(I,G,GH$$)A)A)C#,#8#8#H#H#Ki ""#,#:#:1#=i ,,.#,#:#:1#=i  #_`i_j!kll;	m@ 99)//1 ]2??&&'8'<'<=D3DIIOO4ErG[G[\E!H]
  e	WG(2299:QRYR]R]:^_I 00-335 *EAr**242E2E/
K&*A'++*NN()I	* E???DiQTQ_Q_adaqaqr 00-335 	&EAr**242E2E/
K&)3)-F-K-KK,-	,=	,,->-B-BCyP$%		& --(,,Y7I>>MM"H)UXUcUceheueuvVCNNC<L<LN I;.KCNNK[[\]`]m]m\n!opp?WmY7<<#7iFaFa#bGL%%)*D*D.7.H.H+J -+-i(!%>%E%EE+2 	cK*//3GHXHXHQHcHc4e 0#,#>#>#@IZIZ %i 0 7 7	8O8O8X8X)4HY 9Y 9[ !" !&i 0 7 7	8O8OP[P`P`8a b	c  )::<YEVEV!),33I4K4K4T4T%,@Q 5U 5S  '22(7793<3H3H3X3X$+8IU^di 4Y 4ki 0 4=3H3H3Vi 0!),33I4K4KGLL4YZ** //1+4+@+@+P+P#0AY\a ,Q ,ci( ,5+@+@+Ni(&&'0'>'>w||'LE)$"446+4+B+B+M+M*NaPYPgPgPpPpOq(r%(,A,P,PP+4+B+B+K+K!(<M ,L ,i( ,5+B+B7<<+Pi( ..$6+.w||+<@^+^i(+4+B+B7<<+Pi(}e	WN 	+S%8u:?|U| " W!! #8 #&y!5 % &++.%~i[1#&O PUVWWs   Ng	h	-hh	)NTNNrM   )r-   r.   r/   r   r   r   r,   r   r   r   r"   r   r   r6   r   r  r1   r2   r3   r   r     s    <@EI&*US U$x.!9 UU5=c]UsmU/4Wc\/BUn 48td2h teJ,?&@ t$,SMt=Eb\t tr2   r   r   r   c                 @    | j                  d      r| S |rd| d|  S | S )Nr   r   )r   r   s     r3   r   r     s0    3E7"XJ''Or2   c                   \   e Zd ZU dZi Zeeed   f   ed<   i Z	eee
e   f   ed<   i Zeeeeef   f   ed<   i Zeeee   f   ed<    e       Zee   ed<   i Zeeeee
e   ef      f   ed<   i Zeeeeef   f   ed	<   i Zeeef   ed
<   i Zeeef   ed<   i Zeeee
e      f   ed<   i Zeeef   ed<    e       Zee
e      ed<   i Z eedf   ed<   i Z!eeeedf   f   ed<    G d d      Z" G d d      Z#e$ddde%e   ddfd       Z&e$dede'fd       Z(e$dede'fd       Z)e$de
e*   de
e*   fd       Z+e$	 	 d;de
e,   d ee   d!e%e   d"ee%e      d#e'de-e
e,   e
e.   e
e/   f   fd$       Z0e$d%ed&eddfd'       Z1e$d%ed(eddfd)       Z2e$d%ed*eddfd+       Z3e$de
e,   d,e
e   de
e,   fd-       Z4e$	 	 d<d%ed,ee
e      d.ee   ddfd/       Z5e$d%ed,e
e   ddfd0       Z6e$d%ed1ed2eddfd3       Z7e$d%ed4ee   ddfd5       Z8e$d%eddfd6       Z9e$d%ed7eddfd8       Z:e$d%ed9eddfd:       Z;y)=r   znamespace-like

    The core Class in ``py_serializable`` that is used to record all metadata about classes that you annotate for
    serialization and deserialization.
    rR   _deferred_property_type_parsing_klass_views_klass_property_array_config_klass_property_string_config_klass_property_attributes_klass_property_include_none_klass_property_names_klass_property_string_formats_klass_property_types_klass_property_views_klass_property_xml_sequencecustom_enum_klasses'ObjectMetadataLibrary.SerializableClassr   r   c                       e Zd ZdZddddddedee   deee      deee      d	e	d
dfdZ
ed
efd       Zed
efd       Zed
ee   fd       Zed
ee   fd       Zed
ee   fd       Zed
e	fd       Zd
efdZy)r$  z
        Internal model class used to represent metadata we hold about Classes that are being included in
        (de-)serialization.
        NF)r   serialization_typesr   r   r   r   r&  r   r   rK   c                    t        |j                        | _        || _        || _        |t
        }|| _        t        |xs d      | _        || _	        y )Nr1   )
r   r-   _name_klass_custom_namer<   _serialization_typesr   _ignore_during_deserialization&_ignore_unknown_during_deserialization)rm   r   r   r&  r   r   s         r3   rk   z0ObjectMetadataLibrary.SerializableClass.__init__   sS     U^^,DJDK +D"*&B#(;D%256S6YWY2ZD/:_D7r2   c                     | j                   S rM   r(  rp   s    r3   rw   z,ObjectMetadataLibrary.SerializableClass.name      ::r2   c                     | j                   S rM   )r)  rp   s    r3   r   z-ObjectMetadataLibrary.SerializableClass.klass      ;;r2   c                     | j                   S rM   )r*  rp   s    r3   r   z3ObjectMetadataLibrary.SerializableClass.custom_name      $$$r2   c                     | j                   S rM   )r+  rp   s    r3   r&  z;ObjectMetadataLibrary.SerializableClass.serialization_types  s    ,,,r2   c                     | j                   S rM   )r,  rp   s    r3   r   zEObjectMetadataLibrary.SerializableClass.ignore_during_deserialization!  s    666r2   c                     | j                   S rM   )r-  rp   s    r3   r   zMObjectMetadataLibrary.SerializableClass.ignore_unknown_during_deserialization%  s    >>>r2   c                 "    d| j                    dS )Nz<s.oml.SerializableClass name=>rv   rp   s    r3   __repr__z0ObjectMetadataLibrary.SerializableClass.__repr__)  s    3DII;a@@r2   )r-   r.   r/   r0   r  r   r   r   r9   r   rk   r   rw   r   r   r&  r   r   r   r:  r1   r2   r3   SerializableClassz'ObjectMetadataLibrary.SerializableClass  s.   	
 IMRVNRCH	`T 	` 	`*28<M3N*O	`4<Xc]4K	` =A	` NR	`" 
	# 	 
	 
	4 	 
	 
	%# 	% 
	% 
	-2C)D 	- 
	- 
	73s8 	7 
	7 
	?4 	? 
	?	Ac 	Ar2   r;  c                   n   e Zd ZdZeeedZeedZee	e
efZdZdddddddddded	ed
eeef   dee   deeeee   ef         dedee   deeee         deeeef      dee   dee	   ddfdZedefd       Zedeeef   fd       Zdedee   fdZedefd       Zedefd       Zedee   fd       Zedefd       Z edeeee   ef      fd       Z!dee   defdZ"deee      defd Z#edefd!       Z$edee   fd"       Z%edeee      fd#       Z&edeeeef      fd$       Z'edefd%       Z(edee   fd&       Z)edefd'       Z*edefd(       Z+ede	fd)       Z,d7deee      defd*Z-defd+Z.defd,Z/d8d-Z0d.eddfd/Z1d0edefd1Z2d2edefd3Z3d2edefd4Z4de	fd5Z5defd6Z6y)9rR   z
        Internal model class used to represent metadata we hold about Properties that are being included in
        (de-)serialization.
        )r   r   	SortedSet)
SortedListr=  d   NF)r   include_none_configr   string_format_rV   r   r   xml_sequence_	prop_name	prop_typer   r   r@  r   rA  rV   r   r   rB  rK   c                ~   || _         || _        d | _        d | _        d| _        d| _        d| _        || _        |d| _        || _	        nd| _        t               | _	        || _        || _        t        |xs d      | _        |	| _        |
| _        |xs | j                   | _        d| _        | j'                  |       y )NFTr1   type_)r(  _custom_names_type__concrete_type	_is_array_is_enum_is_optional_custom_type_include_none_include_none_viewsr   _is_xml_attribute_string_format_views_xml_array_config_xml_string_config_DEFAULT_XML_SEQUENCE_xml_sequence_deferred_type_parsing_parse_type)rm   rC  rD  r   r   r@  r   rA  rV   r   r   rB  s               r3   rk   z3ObjectMetadataLibrary.SerializableProperty.__init__8  s     #DJ!-DDK"&D"DN!DM %D +D".%)"+>(%*"+.5(%5D""0Dekr*DK%5D"&7D#!.!L$2L2LD*/D'9-r2   c                     | j                   S rM   r/  rp   s    r3   rw   z/ObjectMetadataLibrary.SerializableProperty.nameZ  r0  r2   c                     | j                   S rM   )rH  rp   s    r3   r   z7ObjectMetadataLibrary.SerializableProperty.custom_names^      %%%r2   serialization_typec                 8    | j                   j                  |      S rM   )r   rN   )rm   r]  s     r3   r   z6ObjectMetadataLibrary.SerializableProperty.custom_nameb  s    $$(();<<r2   c                     | j                   S rM   )rI  rp   s    r3   rG  z0ObjectMetadataLibrary.SerializableProperty.type_e  r2  r2   c                     | j                   S rM   )rJ  rp   s    r3   r   z8ObjectMetadataLibrary.SerializableProperty.concrete_typei      &&&r2   c                     | j                   S rM   )rN  rp   s    r3   r   z6ObjectMetadataLibrary.SerializableProperty.custom_typem  r4  r2   c                     | j                   S rM   )rO  rp   s    r3   rY   z7ObjectMetadataLibrary.SerializableProperty.include_noneq  r\  r2   c                     | j                   S rM   rP  rp   s    r3   rZ   z=ObjectMetadataLibrary.SerializableProperty.include_none_viewsu  s    +++r2   rT   c                 :    | j                   D ]  \  }}||k(  s y y)NTFre  rm   rT   r\   r]   s       r3   include_none_for_viewz@ObjectMetadataLibrary.SerializableProperty.include_none_for_viewy  s*    22  B;  r2   c                 B    |r| j                   D ]  \  }}||k(  s|c S  y rM   re  rg  s       r3   r   zBObjectMetadataLibrary.SerializableProperty.get_none_value_for_view  s/    "66 "FBU{!	" r2   c                     | j                   S rM   )rQ  rp   s    r3   r   z;ObjectMetadataLibrary.SerializableProperty.is_xml_attribute      )))r2   c                     | j                   S rM   )rR  rp   s    r3   r   z8ObjectMetadataLibrary.SerializableProperty.string_format  ra  r2   c                     | j                   S rM   )rS  rp   s    r3   rV   z0ObjectMetadataLibrary.SerializableProperty.views  r2  r2   c                     | j                   S rM   )rT  rp   s    r3   r   z;ObjectMetadataLibrary.SerializableProperty.xml_array_config  rk  r2   c                     | j                   S rM   )rK  rp   s    r3   rW   z3ObjectMetadataLibrary.SerializableProperty.is_array  s    >>!r2   c                     | j                   S rM   )rU  rp   s    r3   r   z<ObjectMetadataLibrary.SerializableProperty.xml_string_config  s    ***r2   c                     | j                   S rM   )rL  rp   s    r3   r   z2ObjectMetadataLibrary.SerializableProperty.is_enum  s    == r2   c                     | j                   S rM   )rM  rp   s    r3   is_optionalz6ObjectMetadataLibrary.SerializableProperty.is_optional  r4  r2   c                     | j                   S rM   )rW  rp   s    r3   r   z7ObjectMetadataLibrary.SerializableProperty.xml_sequence  r\  r2   c                 2    | j                   st        d      y )Nz3No None Value for property that is not include_none)rY   r   r   s     r3   get_none_valuez9ObjectMetadataLibrary.SerializableProperty.get_none_value  s    $$ !VWW %r2   c                 T    | j                   }t        |      xr t        |t              S rM   )r   r
   
issubclassr(   )rm   cts     r3   r   z9ObjectMetadataLibrary.SerializableProperty.is_helper_type  s#    !!B2;=:b*#==r2   c                 2    | j                   | j                  v S rM   )r   _PRIMITIVE_TYPESrp   s    r3   r   z<ObjectMetadataLibrary.SerializableProperty.is_primitive_type  s    %%)>)>>>r2   c                 <    | j                  | j                         y )NrF  )rY  rI  rp   s    r3   parse_type_deferredz>ObjectMetadataLibrary.SerializableProperty.parse_type_deferred  s    4;;/r2   rG  c           	      P
   | j                  |      x| _        }t        |      t        u rt        |      }|j	                  d      rd| _        |dd }n|j	                  d      rd| _        |dd }t        d|      }|r|j                         }|j                  d	      | j                  v r| j                  j                  t        |j                  d	                  }d| _
        	 t        | d
|j                  d       d      | _        t        t        |j                  d                  | _        n|j                  d	d      j/                  dd      | j0                  v r| j0                  j                  t        |j                  d	d      j/                  dd                  }d| _
        	 t        | d
|j                  d       d      | _        t        t        |j                  d                  | _        nt3        d|       t5        t7        | j8                  dd            dkD  r&t        d       | j8                  j:                  v | _        | j<                  rO| j8                  j:                  \  }}t7        |dd       | j0                  v rd| _
        |j:                  \  }|| _        nYt7        | j8                  dd       | j0                  v r%d| _
        | j8                  j:                  \  | _        n| j8                  | _        t?        t        | j@                        tB              rd| _"        | j*                  rd| _        y y # t        $ r d }t        j                  j!                         D ]0  \  }}|j"                  |j                  d      k(  s%|j$                  }2 |6t        j&                  D ]#  }	|	j(                  |j                  d      k(  s"|	}% |@|| _        d| _        t        j-                  | t        |j                  d            g       Y y ||   | _        || _        Y )w xY w# t        $ r d }
t        j                  j!                         D ]0  \  }}|j"                  |j                  d      k(  s%|j$                  }
2 |
6t        j&                  D ]#  }	|	j(                  |j                  d      k(  s"|	}
% |
@|| _        d| _        t        j-                  | t        |j                  d            g       Y y ||
   | _        |
| _        Y w xY w)N)t_ztyping.Optional[T   z	Optional[	   z8^(?P<array_type>[\w.]+)\[['\"]?(?P<array_of>\w+)['\"]?]$r  [array_of])propklassesr{   ztyping.z.Unable to handle Property with declared type: __args__r1   r%   r(  F)#_handle_forward_refrI  r  r   r   rM  	re_search	groupdictrN   _SORTED_CONTAINERS_TYPESrK  evalrJ  	NameErrorr   r   r   rw   r   r#  r-   rX  defer_property_type_parsingr  _ARRAY_TYPESr   rX   r   rG  r  rs  rx  r   r   rL  )rm   rG  type_to_parsematchresultsmapped_array_type_k_k_name_oml_sc_enum_klass_lrJ   ns                r3   rY  z6ObjectMetadataLibrary.SerializableProperty._parse_type  s   "&":":e":"DDDK%E{c! #E
 ++,>?(,D%$1"R$8M"--k:(,D%$1!B$7M!"]_lm#oo/G{{<0D4Q4QQ,0,I,I,M,McRYR]R]^jRkNl,m))-5*.2C1DAgkkR\F]E^^_/`*aDK26s7;;z;R7S2TD/2 !\26>>y"MQUQbQbb,0,=,=,A,AL" = E EiQS TU-) *.5*.2C1DAgkkR\F]E^^_/`*aDK26s7;;z;R7S2TD/2 %'UV[U\%]^^ wtzz:r:;a?(,T
djj6I6I(ID%##::..DAqq'40D4E4EE)-ZZ*+D'tzz7D9T=N=NN)-/3zz/B/B,+.2jj+ $t112H= $ **.3+ +e  ) 504B4I4X4X4^4^4` 7 0#*<<7;;z3J#J)0B7  "z3H3\3\ !9K'2';';w{{:?V'V-8!9  "z.3>B ; 5 Q Q)-GKK
<S8T7U !R !" !'*;B*?DK24D/-5B  ) 504B4I4X4X4^4^4` 7 0#*<<7;;z3J#J)0B7  "z3H3\3\ !9K'2';';w{{:?V'V-8!9  "z.3>B ; 5 Q Q)-GKK
<S8T7U !R !" !'*;B*?DK24D/-5sP   )AM 3AP: AP7AP7AP7"P76P7:AT%AT%
AT%T%$T%r  c                 v    dt        |      v r+t        |      j                  dd      j                  dd      S |S )N
ForwardRefzForwardRef('"z'))r   r  )rm   r  s     r3   r  z>ObjectMetadataLibrary.SerializableProperty._handle_forward_ref%  s5    s2w&2w~s;CCD#NN	r2   otherc                 f    t        |t        j                        rt        |      t        |       k(  S yNF)r}   r   SerializablePropertyhashrm   r  s     r3   __eq__z1ObjectMetadataLibrary.SerializableProperty.__eq__+  s)    %!6!K!KLE{d4j00r2   c                 t    t        |t        j                        r| j                  |j                  k  S t        S rM   )r}   r   r  r   NotImplementedr  s     r3   __lt__z1ObjectMetadataLibrary.SerializableProperty.__lt__0  s0    %!6!K!KL((5+=+===!!r2   c                 J   t        | j                  t        | j                        | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  rt        | j                        nd | j                  f      S rM   )r  r   tupler   r   rW   r   rs  r   rw   rG  r   r   rp   s    r3   __hash__z3ObjectMetadataLibrary.SerializableProperty.__hash__5  s    ""E$*;*;$<d>N>NPTP]P]_c_k_k  $"7"7DJJ040E0Ed++,4QUQbQb  r2   c                    d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   d| j                   d	| j                   d
| j                   dS )Nz!<s.oml.SerializableProperty name=z, custom_names=z, array=z, enum=z, optional=z	, c_type=z, type=z, custom_type=z, xml_attr=z, xml_sequence=r9  )
rw   r   rW   r   rs  r   rG  r   r   r   rp   s    r3   r:  z3ObjectMetadataLibrary.SerializableProperty.__repr__<  s    6tyykQUQbQbPc dwt||nKHXHXGY Z,,-WTZZLtO_O_N` a 112/$BSBSATTUW Wr2   rM   )rK   N)7r-   r.   r/   r0   r   r   r  r  r   r   r   r   r{  rV  r   r   r9   r   r   r   r,   r   r>   rC   rk   r   rw   r   r   rG  r   r   rY   rZ   rh  r   r   r   rV   r   rW   r   r   rs  r   rv  r   r   r}  rY  r  r  r  r  r:  r1   r2   r3   r  z*ObjectMetadataLibrary.SerializableProperty,  s   	
 !%SsC26S#I  #uc2 # 37VZ.3UYAEY]OS48 	. # 	.03 	.CGHY[^H^C_ 	."*3- 	. +33uT(^S=P7Q3R*S 	. (,	 	. FNc]	 	.
 %Xd8n%=> 	. (06OQT6T0U'V 	. )11K(L 	. %-SM 	. >B 	.D 
	# 	 
	 
	&$'8#'="> 	& 
	&	=2C 	=QT 	= 
	3 	 
	 
	'3 	' 
	' 
	%# 	% 
	% 
	&$ 	& 
	& 
	,E$x.#2E,F(G 	, 
	,	tH~ 	$ 		$x.1I 	c 	 
	*d 	* 
	* 
	'8C= 	' 
	' 
	3tH~. 	 
	 
	*hu5NPS5S/T&U 	* 
	* 
	"d 	" 
	" 
	+x0J'K 	+ 
	+ 
	!T 	! 
	! 
	% 	% 
	% 
	&# 	& 
	&	Xh(@ 	XC 	X	>D 	>	?t 	?	0j	4S j	4T j	4X	# 	# 		 	 	
	" 	" 	"
	c 		Wc 	Wr2   r  r  r  rK   Nc                     |D ]Q  }|t         j                  vrt               t         j                  |<   t         j                  |   j                  |       S y rM   )r   r  r   add)r   r  r  r  s       r3   r  z1ObjectMetadataLibrary.defer_property_type_parsingB  sP      	PB.NNNLOE%EEbI!AA"EII$O	Pr2   r   c                     t        |      t        u r'|j                   d|j                   | j                  v S || j                  v S Nrt   )r  r   r.   r-   r   r   r   s     r3   is_klass_serializablez+ObjectMetadataLibrary.is_klass_serializableJ  sG    ;$&&'q(89S=O=OOO****r2   rr   c                 "    t        |t              S rM   )r}   r   )r   rr   s     r3   is_propertyz!ObjectMetadataLibrary.is_propertyP  s    !X&&r2   c                 <    | j                   j                  |       |S rM   )r#  r  r  s     r3   register_enumz#ObjectMetadataLibrary.register_enumT  s    ##E*r2   r   r&  r   r   c                    | j                  |      r|S t        j                  ||||      | j                  |j                   d|j
                   <   |j                   d|j
                   }i | j                  |<   t        j                  d||       t        |t        j                        D ]}  \  }}| d| }	t        |j                        }
t        j                  |t        j                  j                  |	i       |
j                   j                  d      t        j"                  j                  |	      t        j$                  j                  |	      |	t        j&                  v t        j(                  j                  |	      t        j*                  j                  |	      t        j,                  j                  |	      t        j.                  j                  |	      t        j0                  j                  |	t        j                  j2                              | j                  |   |<    t4        j6                  |v r=t8        j:                  |_        t=        t8        j>                  j@                        |_        t4        jB                  |v r=tD        jF                  |_#        t=        tD        jH                  j@                        |_$        t        jJ                  j                  |j
                  d      D ]  }|jM                           |S )Nr   )r   r&  r   r   rt   z(Registering Class %s with custom name %srK   )rC  r   rD  r   r@  r   rA  rV   r   r   rB  r1   )'r  r   r;  r   r.   r/   r   r   r   r	   r  r   fgetr  r  rN   annotationsr   r  r  r  r!  r  r  r"  rV  r9   r:   r   r   r   r   __func__r;   r   r   r  r  r}  )r   r   r   r&  r   r   qualified_class_namerw   rr   qualified_property_nameprop_arg_specs_ps               r3   register_klassz$ObjectMetadataLibrary.register_klassY  s    $$5$1LI^IpIp-@*G2W Jq J
e../q1C1C0DEF #("2"2!31U5G5G4HI<>##$89@BVXcd!%)>)J)JK 	GD!)=(>av&F#+AFF3NF[FpFp2HHLLMdfhi(4488B1GGKKLcd$9$V$V$Z$Z[r$s"9=R=m=m"m4SSWWXop+AAEEF]^!6!S!S!W!WXo!p"7"U"U"Y"YZq"r3PPTT+)>>TTV Gq GC''(<=dC		( !!%88-55EM)*;*E*E*N*NOEO  $77+22EL()9)B)B)K)KLEN (GGKKEL^L^`bc 	%B""$	% r2   	qual_namejson_property_namec                     | j                   j                  |      }| t        j                  |i| j                   |<   y ||t        j                  <   y rM   )r  rN   r9   r:   )r   r  r  r  s       r3   "register_custom_json_property_namez8ObjectMetadataLibrary.register_custom_json_property_name  sJ    ((,,Y7<4E4J4JL^3_C%%i0+=D"''(r2   r   c                 "    || j                   |<   y rM   )r  )r   r  r   s      r3   register_custom_string_formatz3ObjectMetadataLibrary.register_custom_string_format  s    8E**95r2   xml_property_namec                     | j                   j                  |      }|r||t        j                  <   y t        j                  |i| j                   |<   y rM   )r  rN   r9   r;   )r   r  r  r  s       r3   !register_custom_xml_property_namez7ObjectMetadataLibrary.register_custom_xml_property_name  sH    ((,,Y7*;D"&&'4E4I4IK\3]C%%i0r2   rT   c                 ^    |t         j                  |j                   d|j                   <   |S r  )r   r  r.   r/   )r   r   rT   s      r3   register_klass_viewz)ObjectMetadataLibrary.register_klass_view  s1    Y^**e.>.>-?qASAS@T+UVr2   
none_valuec                     | j                   j                  |      }|xs t        |f}||h| j                   |<   y |j                  |       y rM   )r  rN   r,   r  )r   r  rT   r  r  vals         r3   register_property_include_nonez4ObjectMetadataLibrary.register_property_include_none  sK     //33I> *-<;>%C,,Y7HHSMr2   c                     t         j                  j                  |      }||ht         j                  |<   y |j                  |       y rM   )r   r!  rN   r  )r   r  rT   r  s       r3   register_property_viewz,ObjectMetadataLibrary.register_property_view  s;    $::>>yI<FKW!77	BHHUOr2   r  
child_namec                 &    ||f| j                   |<   y rM   )r  )r   r  r  r  s       r3   "register_xml_property_array_configz8ObjectMetadataLibrary.register_xml_property_array_config  s     8B:6N((3r2   string_typec                 "    || j                   |<   y rM   )r  )r   r  r  s      r3   #register_xml_property_string_configz9ObjectMetadataLibrary.register_xml_property_string_config  s     8C)))4r2   c                 :    | j                   j                  |       y rM   )r  r  )r   r  s     r3   register_xml_property_attributez5ObjectMetadataLibrary.register_xml_property_attribute  s    &&**95r2   sequencec                 "    || j                   |<   y rM   )r"  )r   r  r  s      r3   register_xml_property_sequencez4ObjectMetadataLibrary.register_xml_property_sequence  s    6>((3r2   mapped_typec                 "    || j                   |<   y rM   )r   )r   r  r  s      r3   register_property_type_mappingz4ObjectMetadataLibrary.register_property_type_mapping  s    /:!!),r2   r  NN)<r-   r.   r/   r0   r  r   r   r   __annotations__r  r   r,   r  r   r>   r  r   rC   r   r  r  r   r  r9   r  r   r  r!  r"  r   r#  r   r   r   r;  r  r   r   r  r   r  r  r7   r  r6   Intersectionr   r   r  r  r  r  r  r  r  r  r  r  r  r  r1   r2   r3   r   r     s   
 eg#T#s3_/`*`%af.0L$sDN*+0UW $sE2KS2P,Q'Q"RWUW!4X6P-Q(Q#RW+.5C0OQ $sCd8nc6I0J,K'K"LQEG4T*;S*@%A ABG57"DcN7-/4T	?/<>4Sh%8 89>35 $sCx.5+.5T$Z0KMNDGGHMbdT#tC1],]'^"^_d0A 0AdTW TWl P/[ P-5c]P?CP P +# +$ + +
 'C 'D ' ' $r( tBx    QUEJ548 5(3- 5,45F,G56>x}6M5 ?C5 )b48I3JDQaLb)bc	5 5n >3 >TW >\` > > Fc F# FRV F F ^# ^RU ^Z^ ^ ^ R h DQSH   ^bCGs 8DQYNC[ 3;C=LP  s 4> d   O3 O7PO^aOfjO O CC C9AB\9]CbfC C 6 6 6 6 ?s ?c ?d ? ? ;s ; ;RV ; ;r2   r   r   c                      y rM   r1   r   s    r3   serializable_enumr        r2   c                      y rM   r1   r  s    r3   r  r    r  r2   c                 V    dt         t           dt         t           fd}| |S  ||       S )	DecoratorklsrK   c                 2    t         j                  |        | S )Nr  )r   r  )r  s    r3   decoratez#serializable_enum.<locals>.decorate  s    ++#+6
r2   )r   r7   )r   r  s     r3   r  r    s5    d2h 48 
 { C=r2   )rw   r&  r   r   rw   r&  r   r   c                     y rM   r1   r   rw   r&  r   r   s        r3   serializable_classr         r2   c                     y rM   r1   r  s        r3   r  r    r  r2   Fc                    t         dt        t           dt        t        t           t        t           t        t
           f   ffd}| |S  ||       S )a1  
    Decorator used to tell ``py_serializable`` that a class is to be included in (de-)serialization.

    :param cls: Class
    :param name: Alternative name to use for this Class
    :param serialization_types: Serialization Types that are to be supported for this class.
    :param ignore_during_deserialization: List of properties/elements to ignore during deserialization
    :param ignore_unknown_during_deserialization: Whether to ignore all properties/elements/attributes that are unknown
           to the class during deserialization
    :return:
    r  rK   c                 D    t         j                  | xs g        | S )N)r   r   r&  r   r   )r   r  )r  r   r   rw   r&  s    r3   r  z$serializable_class.<locals>.decorate"  s1    ,,4=P=VTV*G2W 	- 	

 
r2   )r<   r   r6   r  r   r   )r   rw   r&  r   r   r  s    ```` r3   r  r    sb    2 ":d2h <R$?P:QSWXhSi0i#j   { C=r2   rG  c                 ,     dt         dt         f fd}|S )r  frK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz&Registering %s.%s with custom type: %srt   )r  r  )r   r   r.   r/   r   r  )r  rG  s    r3   r  ztype_mapping.<locals>.decorate6  sR    >ann^cd<<a'78e 	= 	
 r2   r4   )rG  r  s   ` r3   type_mappingr  3      B 2  Or2   r  c                 0     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz.Registering %s.%s to include None for view: %srt   )r  rT   r  )r   r   r.   r/   r   r  )r  r  rT   s    r3   r  zinclude_none.<locals>.decorateC  sX    FVWVdVdfkl<<a'78R\ 	= 	
 r2   r  )rT   r  r  s   `` r3   rY   rY   @      B 2  Or2   c                 ,     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz$Registering %s.%s with JSON name: %srt   )r  r  )r   r   r.   r/   r   r  r  rw   s    r3   r  zjson_name.<locals>.decorateP  sS    <allANN\`a@@a'78T 	A 	
 r2   r  rw   r  s   ` r3   	json_namer   M  r  r2   format_c                 ,     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz(Registering %s.%s with String Format: %srt   )r  r   )r   r   r.   r/   r   r  )r  r  s    r3   r  zstring_format.<locals>.decorate]  sU    @!,,PQP^P^`gh;;a'78 	< 	
 r2   r  )r  r  s   ` r3   r   r   Z  r  r2   c                 ,     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )NzRegistering %s.%s with View: %srt   )r  rT   )r   r   r.   r/   r   r  )r  rT   s    r3   r  zview.<locals>.decoratej  sR    7q~~W\]44a'78 	5 	
 r2   r  )rT   r  s   ` r3   rq   rq   g  r  r2   c                  &    dt         dt         fd} | S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz"Registering %s.%s as XML attributert   )r  )r   r   r.   r/   r   r  )r  s    r3   r  zxml_attribute.<locals>.decoratew  sI    :ALL!..Y==1<<.XYZ[ZhZhYiHj=kr2   r  )r  s    r3   xml_attributer  t  s    B 2 
 Or2   r  r  c                 0     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz%Registering %s.%s as XML Array: %s:%srt   )r  r  r  )r   r   r.   r/   r   r  )r  r  r  s    r3   r  zxml_array.<locals>.decorate  sY    =q||Q^^]gist@@a'78Z\f 	A 	
 r2   r  )r  r  r  s   `` r3   	xml_arrayr    r  r2   r  c                 ,     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz'Registering %s.%s as XML StringType: %srt   )r  r  )r   r   r.   r/   r   r  )r  r  s    r3   r  zxml_string.<locals>.decorate  sS    ?q~~_jkAAa'78k 	B 	
 r2   r  )r  r  s   ` r3   
xml_stringr    r  r2   c                 ,     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz#Registering %s.%s with XML name: %srt   )r  r  )r   r   r.   r/   r   r  r  s    r3   r  zxml_name.<locals>.decorate  sS    ;Q\\1>>[_`??a'78D 	@ 	
 r2   r  r  s   ` r3   xml_namer    r  r2   r  c                 ,     dt         dt         f fd}|S )r  r  rK   c                     t         j                  d| j                  | j                         t        j                  | j                   d| j                          | S )Nz'Registering %s.%s with XML sequence: %srt   )r  r  )r   r   r.   r/   r   r  )r  r  s    r3   r  zxml_sequence.<locals>.decorate  sR    ?q~~_gh<<a'788 	= 	
 r2   r  )r  r  s   ` r3   r   r     r  r2   rM   r  )dr   decimalr   enumr   r   r   inspectr   r	   r
   ior   r   jsonr   r   r   loggingr   r   rer   r	  r   r  typingr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   xml.etree.ElementTreer"   r#   
defusedxmlr$   r   
formattersr&   r'   helpersr(   xmlr)   r*   r  __version__r-   r   
addHandlerloggerr,   r4   r6   r7   r   r9   r:   r;   r<   r  r>   rC   rF   rG   rH   rP   r   r^   r`   r   r  r   r   r   r  r  r  r  rY   r   r   rq   r  r  r  r  r   r   r1   r2   r3   <module>r$     s"  $   ' ' 7 7 # 1 * 9    " 6 5 ;  .
 )  
H
   ;= !		 	
 T#s(+,T]T T   = h'89    < 3 3 36 002E$$hL $18SE3J3GGH  C  H-G$H  S  (T ^a $,T(^$<AE4Y{ Yxe eP "/ Nx Nb
c (3- C k; k;\ 
74= Hd2hZb=Q4R  
 
48 R  
8DH- d2hZb!"H: & 
AD=@25	
3- "(+<"=> $,HSM#:	
 ,0 tBxj,tBx6G1H$O_J`'`aab 
 
 AD=@25	b
3- "(+<"=> $,HSM#:	
 ,0 $r(D!23T:J5KKL 
 #*AE=A27*	$r(	*
3-* "(+<"=>* $,HSM#:	*
 ,0* d2hZd2h5F0GN^I_&_``ab4 12D9I4JJKL*Z
 
2$(!3 

h0 
Xc] 
^fhjgkmogo^p 

C 
HbT2X. 

3 
8RD"H#5 

X 
8RD"H#5 
xb) 
3 
 
SURVXZRZI[ 

6 
8RD"H;M 

3 
8RD"H- 

3 
8RD"H#5 
r2   