o
    *if                  
   @   s|  d dl Z d dlZ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mZmZmZ dd Ze Zdd	 Zd
d ZG dd deZe Zefdedeeedf ef deeedf ef fddZdededeeef fddZdd Zdd Zdd Zdd Zdd  Z d!d" Z!d#d$ Z"d%d& Z#d'd( Z$d)d* Z%d+d, Z&d-e'fd.d/Z(d0d1 Z)d2e*fd3d4Z+ed5e
d6Z,dS )7    N)datetimetimezone)Counter)is_dataclass)	
CollectionMappingOptionalTypeVarAnyTypeTupleUnioncastc                 C   s   t jjdkrKz| j}W n& ty1   z| j}W n ty"   | }Y nw |du r)| n|}Y |S Y |S w z|du r:| jn|}W |S  tyJ   | }Y |S w | j}|S )z$More spaghetti logic for 3.6 vs. 3.7   N)sysversion_infominor	__extra__AttributeError
__origin__)type_cons r   O/var/www/html/corbot_env/lib/python3.10/site-packages/dataclasses_json/utils.py_get_type_cons
   s.   


r   c                 C   sz   z| j }W n ty   t}Y nw tjjdkr5z| j}W n ty(   | }Y |S w |dtfv r1| n|}|S |tu r;| }|S )zYSome spaghetti logic to accommodate differences between 3.6 and 3.7 in
    the typing apir   N)r   r   _NO_TYPE_ORIGINr   r   r   r   )r   originr   r   r   _get_type_origin#   s"   

r   c                    sP   zt  fdd|D }W |S  ty   Y dS  ty'    jd u r&Y dS  w )Nc                 3   s    | ]}| j v V  qd S N)__args__).0argr   r   r   	<genexpr>;   s    z_hasargs.<locals>.<genexpr>F)allr   	TypeErrorr   )r   argsresr   r"   r   _hasargs9   s   	
r(   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_NoArgsc                 C      dS NFr   selfr   r   r   __bool__H      z_NoArgs.__bool__c                 C   r*   )Nr   r   r,   r   r   r   __len__K   r/   z_NoArgs.__len__c                 C   s   | S r   r   r,   r   r   r   __iter__N   r/   z_NoArgs.__iter__c                 C   s   t r   )StopIterationr,   r   r   r   __next__Q   r/   z_NoArgs.__next__N)__name__
__module____qualname__r.   r0   r1   r3   r   r   r   r   r)   G   s
    r)   tpdefault.returnc                 C   s   t | dr| jd ur| jS |S )Nr   )hasattrr   )r7   r8   r   r   r   _get_type_argsX   s   

r;   indexc              
   C   sH   t | }|tur"ztttdf || W S  tttfy!   Y tS w tS )N.)r;   _NO_ARGSr   r   r   r%   
IndexErrorNotImplementedError)r7   r<   _argsr   r   r   _get_type_arg_param`   s   rA   c                 C   s&   zt | |}W |S  ty   Y dS w r+   )
isinstance	Exception)otresultr   r   r   _isinstance_safek   s   rG   c                 C   s:   zt | |W S  ty   t| rt| | Y S d Y S w r+   )
issubclassrC   _is_new_type_is_new_type_subclass_safe)cls	classinfor   r   r   _issubclass_safet   s   rM   c                 C   s<   t | dd }|rt||S zt| |W S  ty   Y dS w )N__supertype__F)getattrrJ   rH   rC   )rK   rL   
super_typer   r   r   rJ   }   s   
rJ   c                 C   s   t | o	t| dS )NrN   )inspect
isfunctionr:   r"   r   r   r   rI      s   rI   c                 C   s    t | tpt| td p| tu S r   )rM   r   r(   typer
   r"   r   r   r   _is_optional   s
   
rT   c                 C      t t| tS r   )rM   r   r   r"   r   r   r   _is_counter      rV   c                 C   rU   r   )rM   r   r   r"   r   r   r   _is_mapping   rW   rX   c                 C   rU   r   )rM   r   r   r"   r   r   r   _is_collection   rW   rY   c                 C   rU   r   )rM   r   r   r"   r   r   r   	_is_tuple   rW   rZ   c                 C   s   t t| tot | t S r   )rM   r   r   strr"   r   r   r   _is_nonstr_collection   s   
r\   c                 C   s   t t| S r   )r   r   r"   r   r   r   _is_generic_dataclass   s   r]   	timestampc                 C   s$   t tj j}t j| |d}|S )N)tz)r   nowr   utc
astimezonetzinfofromtimestamp)r^   r_   dtr   r   r   _timestamp_to_dt_aware   s   rf   c              	   C   sR   z| j d u r	W d S | j d }W n ttfy   Y d S w |d u s%|jd u r'd S |S )N	undefined)dataclass_json_configr   KeyErrorvalue)rK   action_enumr   r   r    _undefined_parameter_action_safe   s   
rl   usagec                 C   s   t | }| }|du r|dkr|S | jS |dkr!|jj| |dS |dkr-|jj| |dS |dkr8|jj| dS |dkrC|jj| dS td	| d
)zd
    Checks if an undefined parameters action is defined and performs the
    according action.
    Ninitfrom)rK   kvsto)objrp   dump)rr   z=usage must be one of ['to', 'from', 'dump', 'init'], but is '')	rl   lower__init__rj   handle_from_dicthandle_to_dicthandle_dumpcreate_init
ValueError)rK   rp   rm   undefined_parameter_actionr   r   r   !_handle_undefined_parameters_safe   s*   r}   CatchAllVar)bound)-rQ   r   r   r   collectionsr   dataclassesr   typingr   r   r   r	   r
   r   r   r   r   r   objectr   r   r(   r)   r=   r;   intrA   rG   rM   rJ   rI   rT   rV   rX   rY   rZ   r\   r]   floatrf   rl   r[   r}   r~   r   r   r   r   <module>   s>    ,
		