
    uYf,                         d 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
 ddl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	lmZmZ dd
lmZ ddlmZ  e	d      Z G d de      Z  G d de      Z!defdZ"dedede!fdZ#y)z"Preconfigured converters for bson.    )	b85decode	b85encode)datedatetime)AnyTypeTypeVarUnion)DEFAULT_CODEC_OPTIONSCodecOptionsInt64ObjectIddecodeencode)AbstractSet
is_mapping)make_mapping_structure_fn   )BaseConverter	Converter)configure_union_passthrough   )validate_datetimeTc                       e Zd ZdZy)Base85Bytesz5A subclass to help with binary key encoding/decoding.N)__name__
__module____qualname____doc__     S/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/cattrs/preconf/bson.pyr   r      s    ?r"   r   c                   R    e Zd Zddefdededededef
dZefd	ed
e	e
   dede
fdZy)BsonConverterNFobjunstructure_as
check_keyscodec_optionsreturnc                 @    t        | j                  ||      ||      S )N)r'   )r(   r)   )r   unstructure)selfr&   r'   r(   r)   s        r#   dumpszBsonConverter.dumps   s*     S@!'
 	
r"   dataclc                 <    | j                  t        ||      |      S )N)r)   )	structurer   )r-   r/   r0   r)   s       r#   loadszBsonConverter.loads$   s     ~~fTGLLr"   )r   r   r   r   r   boolr   bytesr.   r   r   r3   r!   r"   r#   r%   r%      s{     # &;

 
 	

 $
 

" '<	MM GM $	M
 
Mr"   r%   	converterc                 V    ddt         f fd}dt         f fd} j                  t        d         j                  j	                  t
        |dfg        j                  j	                  t
        |dfg        j                  t        d        t        t        t        t        t        t        dt        t        t        t         f	            j#                  t        d         j                  t        t$                j#                  t&        d	         j                  t&        d
        y)aX  
    Configure the converter for use with the bson library.

    * sets are serialized as lists
    * byte mapping keys are base85-encoded into strings when unstructuring, and reverse
    * non-string, non-byte mapping keys are coerced into strings when unstructuring
    * a deserialization hook is registered for bson.ObjectId by default
    Nr0   c                     t         }t        | dd       }|r,t        |d   t               rd }nt        |d   t              rd }j	                  | ||      S )N__args__r   c                 6    t        |       j                  d      S )Nutf8)r   r   )ks    r#   key_handlerzIconfigure_converter.<locals>.gen_unstructure_mapping.<locals>.key_handler?   s    $Q<..v66r"   )unstructure_tor=   )strgetattr
issubclassr5   gen_unstructure_mapping)r0   r>   r=   argsr6   s       r#   rB   z4configure_converter.<locals>.gen_unstructure_mapping7   s`    r:t,$q'3'"DGU+7 00~; 1 
 	
r"   c                     t        | dd       }|r't        |d   t              rt        | t              }|S t        |       }|S )Nr9   r   )key_type)r@   rA   r5   r   r   )r0   rC   hr6   s      r#   gen_structure_mappingz2configure_converter.<locals>.gen_structure_mappingF   sI    r:t,JtAw.)"i+NA  *"i8Ar"   c                     t        |       S N)r   v_s     r#   <lambda>z%configure_converter.<locals>.<lambda>N   s
    	! r"   Tc                     t        |       S rI   )r   rJ   s     r#   rM   z%configure_converter.<locals>.<lambda>V   s
    Xa[ r"   c                     | S rI   r!   rK   s    r#   rM   z%configure_converter.<locals>.<lambda>]   s    A r"   c                 "    | j                         S rI   )	isoformatrP   s    r#   rM   z%configure_converter.<locals>.<lambda>_   s     r"   c                 ,    t        j                  |       S rI   )r   fromisoformatrJ   s     r#   rM   z%configure_converter.<locals>.<lambda>`   s    9K9KA9N r"   rI   )r   register_structure_hookr   _unstructure_funcregister_func_listr   _structure_funcr   r   r
   r?   r4   intfloatr5   r   r   register_unstructure_hookr   r   )r6   rB   rG   s   `  r#   configure_converterr\   -   s    
C 
#  %%k3LM22
-t	45 00
+T	23 %%h0HIc4eT5(HeKLi ''+>%%h0AB''.EF%%d,NOr"   rC   kwargsr*   c                  t    t         t        i|j                  di       |d<   t        | i |}t	        |       |S )Nunstruct_collection_overrides)r   listgetr%   r\   )rC   r]   ress      r#   make_converterrc   c   sF    T/
**4b
9/F*+ 
(
(CJr"   N)$r    base64r   r   r   r   typingr   r   r	   r
   bsonr   r   r   r   r   r   cattrs._compatr   r   
cattrs.genr   
convertersr   r   
strategiesr    r   r   r5   r   r%   r\   rc   r!   r"   r#   <module>rl      sw    ( ' # , , U U 2 0 1 4 CL@% @MI M.3P= 3Pl#   r"   