o
    h2                     @   s@  d Z ddlZddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
 zddlmZ W n ey;   ddlmZ Y nw ddlZdd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZ e ZG dd deZG dd deZG dd de Z!G dd de"Z#G dd de"Z$i a%dd Z&dd Z'dd Z(d_ddZ)dd  Z*G d!d" d"e"Z+d#d$ Z,d%d& Z-d'd( Z.d`d)d*Z/d+d, Z0d-d.d/d0d1d2d3d4d5d6d7d8d9Z1d:d; Z2d<d= Z3d>d? Z4	d_d@dAZ5		dadBdCZ6		dadDdEZ7dFdG Z8dbdIdJZ9dKdL Z:dMdN Z;d`dOdPZ<dQdR Z=dSdT Z>dUdV Z?dWdX Z@dYdZ ZAd[d\ ZBd]d^ ZCdS )cz 
Base codec functions for bson.
    N)datetime)ABCMetaabstractmethodUUID)Decimal)BytesIO)StringIO)tzutc)b2a_hex)integer_typesiterkeys	text_typePY3)xrangec                          e Zd Z fddZ  ZS )MissingClassDefinitionc                    s   t t| d|f  d S )Nz No class definition for class %s)superr   __init__)self
class_name	__class__ =/var/www/html/venv/lib/python3.10/site-packages/bson/codec.pyr      s   zMissingClassDefinition.__init____name__
__module____qualname__r   __classcell__r   r   r   r   r          r   c                       r   )UnknownSerializerErrorc                    s"   t t| d||t|f  d S )Nz0Unable to serialize: key '%s' value: %s type: %s)r   r!   r   type)r   keyvaluer   r   r   r   %   s   zUnknownSerializerError.__init__r   r   r   r   r   r!   $   r    r!   c                       r   )MissingTimezoneWarningc                    s2   t |}t|dk r|d tt| j|  d S )N   z2Input datetime object has no tzinfo, assuming UTC.)listlenappendr   r%   r   )r   argsr   r   r   r   +   s   
zMissingTimezoneWarning.__init__r   r   r   r   r   r%   *   r    r%   c                   @   s   e Zd Zdd ZdS )TraversalStepc                 C   s   || _ || _d S N)parentr#   )r   r-   r#   r   r   r   r   3   s   
zTraversalStep.__init__N)r   r   r   r   r   r   r   r   r+   2   s    r+   c                   @   s(   e Zd ZeZedd Zedd ZdS )
BSONCodingc                 C      d S r,   r   )r   r   r   r   bson_encode;      zBSONCoding.bson_encodec                 C   r/   r,   r   )r   
raw_valuesr   r   r   	bson_init?   r1   zBSONCoding.bson_initN)r   r   r   r   Z__metaclass__r   r0   r3   r   r   r   r   r.   8   s    
r.   c                 C   s   t | tsd S | t| j< d S r,   )
issubclassr.   classesr   )clsr   r   r   import_classG   s   
r7   c                  G   s   | D ]}t | qd S r,   )r7   )r*   r6   r   r   r   import_classesO   s   
r8   c                  G   s6   | D ]}|j D ]}t|drt|drt| qqd S )N__new__r   )__dict__hasattrr7   )r*   moduleitemr   r   r   import_classes_from_modulesT   s   
r>   c                 C   s(   |   }| jj}||d< t||| ||S N$$__CLASS_NAME__$$)r0   r   r   encode_document)objtraversal_stackgenerator_func
on_unknownvaluesr   r   r   r   encode_object[   s   rG   c                 C      dt |  t||||d S N   rD   rE   )encode_cstringrG   namer$   rC   rD   rE   r   r   r   encode_object_elementc   
   
rO   c                   @   s   e Zd ZdS )_EmptyClassN)r   r   r   r   r   r   r   rQ   j   s    rQ   c                 C   sJ   | d }zt | }W n ty   t|w t }||_|| }|p$|S r?   )r5   KeyErrorr   rQ   r   r3   )r2   r   r6   retvalZ
alt_retvalr   r   r   decode_objectn   s   
rT   c                 C   s,   |  d} t| }td|f |d | dS )Nutf-8<i%dsbr&   r   )encoder(   structpack)r$   lengthr   r   r   encode_string|   s   
r[   c                 C   s0   t | tst| d} d| v rtd| d S )NrU       z(Element names may not include NUL bytes.)
isinstancebytesr   rW   
ValueErrorr$   r   r   r   rL      s
   
rL   c                 C   s   t | }td|||  S )N<ib)r(   rX   rY   )r$   binary_subtyperZ   r   r   r   encode_binary   s   rc   c                 C   s   t d| S )N<d)rX   rY   r`   r   r   r   encode_double      re   doublestringZdocumentarraybinaryZ	object_idbooleanZUTCdatetimenoneZint32Zuint64Zint64)r&                     	   
            c                 C      dt |  t| S )N   )rL   re   rN   r$   r   r   r   encode_double_element      r{   c                 C   rx   )N   )rL   r[   rz   r   r   r   encode_string_element   r|   r~   c                 C   sF   t | trdS t | tst | tr!z	t| dd W dS    Y dS dS )NTstrict)errorsF)r]   r   strr^   unicoder`   r   r   r   
_is_string   s   
r   c                 C   s&  t |tr|t| | d S t |trP|dk s$d|  kr"dkr.n n
|t| | d S |dkrF|dkr<tdd |t| | d S |t| | d S t |t	r_|t
| | d S t|rm|t| | d S t |tswt |tr|t| | d S t |tr|t| |jdd d S t |tr|t| | d S |d u r|t| | d S t |tr|t| |||| d S t |tst |tr|t| |||| d S t |tr|t| |||| d S t |tr|t
| t	| d S |d urt| |||||| d S t| |)Ni   l    il    z(BSON format supports only int value < %sro   rb   )r]   boolwriteencode_boolean_elementr   encode_int64_element	Exceptionencode_uint64_elementencode_int32_elementfloatr{   r   r~   r   r^   encode_binary_elementr   r   encode_utc_datetime_elementencode_none_elementdictencode_document_elementr'   tupleencode_array_elementr.   rO   r   encode_valuer!   )rN   r$   bufrC   rD   rE   r   r   r   r      sR   

 










r   c                 C   s   t  }t| }|d ur|| |}|D ]}| | }|t|p| | t|||||| |  q| }	t|	}
t	d|
f |
d d |	dS )NrV   ro   r&   r   )
r	   r   r)   r+   r   popgetvaluer(   rX   rY   )rB   rC   traversal_parentrD   rE   r   Zkey_iterrN   r$   e_liste_list_lengthr   r   r   rA      s    


rA   c           
      C   s   t  }tdt| D ]}| | }|t|p| | tt|||||| |  q
| }t|}	t	
d|	f |	d d |dS )Nr   rV   ro   r&   )r	   r   r(   r)   r+   r   r   r   r   rX   rY   )
ri   rC   r   rD   rE   r   ir$   r   r   r   r   r   encode_array   s   
r   c                 C   s   |dv r	t | dS | S )N)rn   ro   )r^   r   )r$   rb   r   r   r   decode_binary_subtype  s   
r   Fc                 C   s  t d}t d}t d}t d}t d}t d}t d| ||d  d }	||	 }
| |
d	  d
vr<td|d7 }|rDg ni }| }||
d	 k r|| ||d	  d }trj| d|d	 d	 }n
| d|d	 d	 }|r| |d	 |d	  }z|d}W n ty   Y nw d }|}|d	kr|| ||d  d }|d7 }n|dkr|| ||d  d }	| |d |d |	 d	  }|d}|d|	 7 }n|dkrt| |\}}n|dkrt| |dd\}}n|dkr|| ||d  \}	}| |d |d |	  }t	||}|d|	 7 }n|dkr/t
| ||d  }|d7 }n|dkrHt|| ||d	  d }|d	7 }ni|dkret|| ||d  d d t}|d7 }nL|dkrmd }nD|dkr|| ||d  d }|d7 }n-|dkr|| ||d  d }|d7 }n|dkr|| ||d  d }|d7 }|r|| n|||< ||
d	 k sPd|v rt|}|
|fS )Nrd   <i<b<q<Qra   ro   r   r&   ) r   z#missing null-terminator in documentr   rU   rr   rm   rn   T)as_arrayrp   rq      rs        @@rt   ru   rv   rw   r@   )rX   Structunpackr_   r   indexdecodeUnicodeDecodeErrordecode_documentr   r   r   r   fromtimestamputcr)   rT   )databaser   Zdouble_structZ
int_structZchar_structZlong_structZuint64_structZint_char_structrZ   Z	end_pointrS   Zdecode_nameZelement_typeZllrN   r$   rb   r   r   r   r     s   





















>r   c                 C   rH   rI   )rL   rA   rM   r   r   r   r   `  rP   r   c                 C   rH   )N   rK   )rL   r   rM   r   r   r   r   g  rP   r   c                 C   s   dt |  t||d S )N   r   )rL   rc   )rN   r$   rb   r   r   r   r   n     r   c                 C      dt |  td| S )N   r   rL   rX   rY   rz   r   r   r   r   r  r   r   c                 C   sV   |j d u rtt d d ttt| d |j	d  }dt
|  td| S )Nro   i  r      	r   )tzinfowarningswarnr%   introundcalendartimegmutctimetuplemicrosecondrL   rX   rY   rz   r   r   r   r   v  s   
r   c                 C   s   dt |  S )N   
rL   rz   r   r   r   r   ~  rf   r   c                 C   s   t d|}dt|  | S )Nr      )rX   rY   rL   rz   r   r   r   r     s   r   c                 C   r   )N   r   r   rz   r   r   r   r     r   r   c                 C   r   )N   r   r   rz   r   r   r   r     r   r   c                 C   s   dt |  | S )N   r   rz   r   r   r   encode_object_id_element  s   r   r,   )r   )NNN)F)D__doc__rX   r   r   abcr   r   uuidr   decimalr   ior   r	   ImportError	cStringIOr   Zdateutil.tzr
   binasciir   sixr   r   r   r   Z	six.movesr   r   r_   r   r!   RuntimeWarningr%   objectr+   r.   r5   r7   r8   r>   rG   rO   rQ   rT   r[   rL   rc   re   ZELEMENT_TYPESr{   r~   r   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   



,


T
