
    FCfq-                       U d Z ddlmZ ddlZddl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mZmZ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l m!Z! erdd	l"m#Z# dd
l$m%Z% ddl&m'Z'  e(ddg      Z)de*d<    e(g d      e)z  Z+de*d<   e+ e(g d      z  Z,de*d<   dZ-de*d<   dZ.de*d<   d(dZ/	 d)	 	 	 	 	 d*dZ0d+dZ1d,dZ2	 	 d-	 	 	 	 	 	 	 	 	 d.dZ3d/dZ4d0dZ5d1d Z6d2d!Z7	 	 	 	 	 	 d3d"Z8d4d#Z9 ed$e
d%e	f   &      Z:d5d'Z;y)6zCBits and pieces used by the driver that don't really fit elsewhere.    )annotationsN)abc)TYPE_CHECKINGAnyCallable	ContainerIterableMappingNoReturnOptionalSequenceTypeVarUnioncast)	ASCENDING)	CursorNotFoundDuplicateKeyErrorExecutionTimeoutNotPrimaryErrorOperationFailureWriteConcernError
WriteErrorWTimeoutError_wtimeout_error)HelloCompat)_Hint)
_IndexList)_DocumentOutiP-  [   	frozenset_SHUTDOWN_CODES)iJ'  i{'  i{4  iR-  i|4     _NOT_PRIMARY_CODES)      Y   i)#  i     _RETRYABLE_ERROR_CODESi  int_REAUTHENTICATION_REQUIRED_CODE   _AUTHENTICATION_FAILURE_CODEc                d    dj                  | D cg c]  } dj                  |  c}      S c c}w )z9Generate an index name from the set of fields it is over._z{}_{})joinformat)keysitems     O/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pymongo/helpers.py_gen_index_namer4   a   s*    88t<t^W^^T*<==<s   -c                   | t        | t              st        d      | |fgS t        | t              r	| t        fgS t        | t        j
                        rt        |       S t        | t        j                        rt        | j                               S t        | t        t        f      st        d      g }| D ]+  }t        |t              r|t        f}|j                  |       - |S )zHelper to generate a list of (key, direction) pairs.

    Takes such a list, or a single key, or a single key and direction.
    z!Expected a string and a directionzEif no direction is specified, key_or_list must be an instance of list)
isinstancestr	TypeErrorr   r   	ItemsViewlistr
   itemstupleappend)key_or_list	directionvaluesr2   s       r3   _index_listrA   f   s     +s+?@@i())k3' ),--S]]3$$S[[1))+,,K$7cdd(* 	 D$$i(MM$	      c                   t        | t        t        t        j                  f      st        dt        |       z         t        |       st        d      i }t        | t        j                        r| D ]  }| |   }t        ||       |||<    |S | D ]0  }t        |t              r|t        f}|\  }}t        ||       |||<   2 |S )zbHelper to generate an index specifying document.

    Takes a list of (key, direction) pairs.
    z@must use a dictionary or a list of (key, direction) pairs, not: zkey_or_list must not be empty)r6   r:   r<   r   r
   r8   reprlen
ValueError_validate_index_key_pairr7   r   )
index_listindexkeyvaluer2   s        r3   _index_documentrL      s    
 j4"<=NQUV`Qaa
 	
 z?899E*ckk* 	CsOE$S%0E#J	 L  	D$$i(JC$S%0E#J	 LrB   c                    t        | t              st        d      t        |t        t        t        j
                  f      st        d      y )Nz6first item in each key pair must be an instance of strz[second item in each key pair must be 1, -1, '2d', or another valid MongoDB index specifier.)r6   r7   r8   r)   r   r
   )rJ   rK   s     r3   rG   rG      sD    c3PQQec345>
 	
 6rB   c                   d| vr,t        | j                  d      | j                  d      | |      |r:d| v r6| d   }| j                  d      }|r|j                  d|i       t        |       | d   ry| }d| v r?| d   j	                         D ])  }|j                  d      s|j                  d      r'|} n |d   }|j                  d      }	|r|	|	|v ry||v ry|	|	t
        v r.t        ||       t        j                  |v sd	|v rt        ||       |	d
v rt        ||	| |      |	dk(  rt        ||	| |      |	dk(  rt        ||	| |      t        ||	| |      )z+Check the response to a command for errors.okz$errcodewriteConcernErrorerrorLabelsNrawerrmsgznode is recovering)*  i*  i&1  2   +   )r   getupdate_raise_write_concern_errorr@   r#   r   r   LEGACY_ERRORr   r   r   )
responsemax_wire_versionallowable_errorsparse_write_concern_error_error_labelsdetailsshardrT   rP   s
             r3   _check_command_responserd      s    8LL LL 	
 	
 !%8H%D-.,,}-MM='23"6*~G e_++- 	Eyy"599T?		 XF;;vD '''' %%!&(33		!	!V	+/Cv/Mfh// $$h8HII	vtX7GHH	VT85EFF
643C
DDrB   c                    | d   }|j                  d      dk(  rt        |j                  d      d|      t        |j                  d      |j                  d      |      )NrP   rU   rT   )rX   r   r   )write_errorserrors     r3   _raise_last_write_errorri      sX     EyyE!		( 3UEBB
UYYx(%))F*;U
CCrB   c                    t        |       r+t        | j                  d      | j                  d      |       t        | j                  d      | j                  d      |       )NrT   rP   )r   r   rX   r   )rh   s    r3   rZ   rZ      sL    uEIIh/61BEJJ
EIIh/61BE
JJrB   c                |    | j                  d      }|r(| j                  d      }|r|j                         }||d<   |S )z%Return the writeConcernError or None.rQ   rR   )rX   copy)resultwceerror_labelss      r3   _get_wce_docrp      sA    
**(
)C
 zz-0((*C!-CJrB   c                r    | j                  d      }|rt        |       t        |       }|rt        |       yy)z?Backward compatibility helper for write command error handling.writeErrorsN)rX   ri   rp   rZ   )rm   rg   rn   s      r3   _check_write_command_responsers   
  s7     ::m,L-
v
C
"3' rB   c                   t        | t        j                        r| S t        | t        j                  t        j                  f      r6t        d | D              st        | d      t        j                  | d      S t        | d      )zTakes a sequence of field names and returns a matching dictionary.

    ["a", "b"] becomes {"a": 1, "b": 1}

    and

    ["a.b.c", "d", "a.c"] becomes {"a.b.c": 1, "d": 1, "a.c": 1}
    c              3  <   K   | ]  }t        |t                y wN)r6   r7   ).0fields     r3   	<genexpr>z'_fields_list_to_dict.<locals>.<genexpr>%  s     >e:eS)>s   z5 must be a list of key names, each an instance of str   z' must be a mapping or list of key names)	r6   r   r
   r   Setallr8   dictfromkeys)fieldsoption_names     r3   _fields_list_to_dictr     ss     &#++&&3<<12>v>>{m+`abb}}VQ''
{m#JK
LLrB   c                     t         j                  rGt        j                         } 	 t        j                  | d   | d   | d   dt         j                         ~ yy# t
        $ r Y ~ yw xY w# ~ w xY w)z1Print exceptions raised by subscribers to stderr.r   rz      N)sysstderrexc_info	tracebackprint_exceptionOSError)einfos    r3   _handle_exceptionr   ,  sh     zz	%%eAha%(D#**U    		 s#   0A 	A&"A) %A&&A) )A,F.)boundc                0     d fd}t        t        |      S )Nc                 N   |j                  dd      }ddlm} ddlm} 	  | i |S # t
        $ rr}|r |j                  t        k(  rVd }| D ],  }t        ||      r|} nt        ||      s |j                  } n |r|j                  d       n  | i |cY d }~S  d }~ww xY w)N	no_reauthFr   )_BulkWriteContext)
ConnectionT)reauthenticate)poppymongo.messager   pymongo.poolr   r   rP   r*   r6   connauthenticate)	argskwargsr   r   r   excr   argfuncs	           r3   innerz_handle_reauth.<locals>.innerA  s    JJ{E2	5+	((( 	xx::  C!#z2"!#'89"xx %%T%:T,V,,)	s&   ) 	B$9B,,BB$BB$)r   r   r   r   returnr   )r   r   )r   r   s   ` r3   _handle_reauthr   @  s    : 5>rB   )r1   r   r   r7   rv   )r>   r   r?   zOptional[Union[int, str]]r   z8Sequence[tuple[str, Union[int, str, Mapping[str, Any]]]])rH   r   r   zdict[str, Any])rJ   r   rK   r   r   None)NF)
r\   r   r]   zOptional[int]r^   z$Optional[Container[Union[int, str]]]r_   boolr   r   )rg   z	list[Any]r   r   )rh   r   r   r   )rm   Mapping[str, Any]r   zOptional[Mapping[str, Any]])rm   r   r   r   )r   z'Union[Mapping[str, Any], Iterable[str]]r   r7   r   r   )r   r   )r   r   r   r   )<__doc__
__future__r   r   r   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   pymongor   pymongo.errorsr   r   r   r   r   r   r   r   r   pymongo.hellor   pymongo.cursorr   pymongo.operationsr   pymongo.typingsr   r    r!   __annotations__r#   r(   r*   r,   r4   rA   rL   rG   rd   ri   rZ   rp   rs   r   r   r   r    rB   r3   <module>r      s   J " 
      
 
 
 &$-, '
  	
	 
 I  %7	: 	% 	 	 (+  * %' c &> @D#<=8:
 >B&+	@E@E#@E ;@E  $	@E
 
@EFDK	(M3MBEMM," CxS)*rB   