o
    "“ii  ã                   @   s0  d 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	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 ddlm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' e
dƒZ(G dd„ de)ƒZ*G dd„ deƒZ+defdd„Z,e'e+ƒde	de	de+fdd„ƒZ-dS )z"Preconfigured converters for bson.é    )Ú	b85decodeÚ	b85encode)ÚSet)ÚdateÚdatetime)ÚAnyÚTypeVarÚUnion)ÚDEFAULT_CODEC_OPTIONSÚCodecOptionsÚInt64ÚObjectIdÚdecodeÚencodeé   )Ú
is_mappingÚis_subclass)Úmapping_structure_factory)ÚBaseConverterÚ	Converter)ÚStructureHook)Úidentity)Úis_literal_containing_enums)Úconfigure_union_passthroughé   )Úis_primitive_enumÚ'literals_with_enums_unstructure_factoryÚvalidate_datetimeÚwrapÚTc                   @   s   e Zd ZdZdS )ÚBase85Bytesz5A subclass to help with binary key encoding/decoding.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r%   r%   úS/var/www/html/premium_crap/venv/lib/python3.10/site-packages/cattrs/preconf/bson.pyr       s    r    c                   @   sT   e Zd Zddefdededededef
dd	„Zefd
ede	e
 dede
fdd„ZdS )ÚBsonConverterNFÚobjÚunstructure_asÚ
check_keysÚcodec_optionsÚreturnc                 C   s   t | j||d�||d�S )N)r)   )r*   r+   )r   Úunstructure)Úselfr(   r)   r*   r+   r%   r%   r&   Údumps    s
   ýzBsonConverter.dumpsÚdataÚclc                 C   s   |   t||d�|¡S )N)r+   )Ú	structurer   )r.   r0   r1   r+   r%   r%   r&   Úloads-   s   zBsonConverter.loads)r!   r"   r#   r
   r   Úboolr   Úbytesr/   Útyper   r3   r%   r%   r%   r&   r'      s2    ûþýüû
úüþýüûr'   Ú	converterc                    sÚ   ddt f‡ fdd„}dt dtf‡ fdd„}ˆ  tdd	„ ¡ ˆ  t|¡ ˆ  t|¡ ˆ  td
d	„ ¡ tt	t
tttdttttf	 ˆ ƒ ˆ  tdd	„ ¡ ˆ  tt¡ ˆ  tdd	„ ¡ ˆ  tdd	„ ¡ ˆ  tt¡ ˆ  tt¡ dS )a  
    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
    * string and int enums are passed through when unstructuring

    .. versionchanged:: 24.2.0
        Enums are left to the library to unstructure, speeding them up.
    Nr1   c                    sN   t }t| dd ƒ}|rt|d t ƒrd }nt|d tƒrdd„ }ˆ j| ||d�S )NÚ__args__r   c                 S   s   t | ƒ d¡S )NÚutf8)r   r   )Úkr%   r%   r&   Úkey_handlerL   s   zIconfigure_converter.<locals>.gen_unstructure_mapping.<locals>.key_handler)Úunstructure_tor;   )ÚstrÚgetattrr   r5   Úgen_unstructure_mapping)r1   r<   r;   Úargs©r7   r%   r&   r?   D   s   ÿz4configure_converter.<locals>.gen_unstructure_mappingr,   c                    s>   t | dd ƒ}|rt|d tƒrt| ˆ td�}|S t| ˆ ƒ}|S )Nr8   r   )Úkey_type)r>   r   r5   r   r    )r1   r@   ÚhrA   r%   r&   Úgen_structure_mappingS   s   
ÿz2configure_converter.<locals>.gen_structure_mappingc                 S   ó   t | ƒS ©N)r   ©ÚvÚ_r%   r%   r&   Ú<lambda>[   ó    z%configure_converter.<locals>.<lambda>c                 S   rE   rF   )r   rG   r%   r%   r&   rJ   _   rK   c                 S   s   | S rF   r%   ©rH   r%   r%   r&   rJ   f   s    c                 S   s   |   ¡ S rF   )Ú	isoformatrL   r%   r%   r&   rJ   h   rK   c                 S   s
   t  | ¡S rF   )r   ÚfromisoformatrG   r%   r%   r&   rJ   i   s   
 rF   )r   r   Úregister_structure_hookr    Ú!register_unstructure_hook_factoryr   Úregister_structure_hook_factoryr   r   r	   r=   r4   ÚintÚfloatr5   r   r   Úregister_unstructure_hookr   r   Úregister_unstructure_hook_funcr   r   r   r   )r7   r?   rD   r%   rA   r&   Úconfigure_converter6   s"   ÿÿrV   r@   Úkwargsr,   c                  O   s2   t ti| di ¡¥|d< t| i |¤Ž}t|ƒ |S )NÚunstruct_collection_overrides)r   ÚlistÚgetr'   rV   )r@   rW   Úresr%   r%   r&   Úmake_converterp   s   ÿ
þr\   N).r$   Úbase64r   r   Úcollections.abcr   r   r   Útypingr   r   r	   Úbsonr
   r   r   r   r   r   Ú_compatr   r   Úcolsr   Ú
convertersr   r   Údispatchr   Úfnsr   Úliteralsr   Ú
strategiesr   Ú r   r   r   r   r   r5   r    r'   rV   r\   r%   r%   r%   r&   Ú<module>   s(     :