
    =h,                       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 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'dZ0	 d(	 	 	 	 	 d)dZ1d*dZ2d+dZ3	 	 d,	 	 	 	 	 	 	 	 	 d-dZ4d.dZ5d/dZ6d0dZ7d1d Z8	 	 	 	 	 	 d2d!Z9d3d"Z: ed#e
d$e	f   %      Z;d4d&Z<y)5zCBits 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)SON)	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_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     _/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/pymongo/helpers.py_gen_index_namer2   ^   s.    88t<tt^W^^T*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valuesr0   s       r1   _index_listr?   c   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      t               }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)r4   r8   r:   r   r
   r6   reprlen
ValueErrorr   _validate_index_key_pairr5   r   )
index_listindexkeyvaluer0   s        r1   _index_documentrJ      s    
 j4"<=NQUV`Qaa
 	
 z?8995E*ckk*CsOE$S%0E#J  L D$$i(JC$S%0E#J  Lr@   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.)r4   r5   r6   r)   r   r
   )rH   rI   s     r1   rE   rE      sD    c3PQQec345>
 	
 6r@   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shardrR   rN   s
             r1   _check_command_responserb      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Dr@   c                    | d   }|j                  d      dk(  rt        |j                  d      d|      t        |j                  d      |j                  d      |      )NrN   rS   rR   )rV   r   r   )write_errorserrors     r1   _raise_last_write_errorrg      sX     EyyE!		( 3UEBB
UYYx(%))F*;U
CCr@   c                    t        |       r+t        | j                  d      | j                  d      |       t        | j                  d      | j                  d      |       )NrR   rN   )r   r   rV   r   )rf   s    r1   rX   rX      sL    uEIIh/61BEJJ
EIIh/61BE
JJr@   c                \    | j                  d      }|r| j                  d      }|r||d<   |S )z%Return the writeConcernError or None.rO   rP   )rV   )resultwceerror_labelss      r1   _get_wce_docrm      s6    
**(
)C
 zz-0!-CJr@   c                r    | j                  d      }|rt        |       t        |       }|rt        |       yy)z?Backward compatibility helper for write command error handling.writeErrorsN)rV   rg   rm   rX   )rj   re   rk   s      r1   _check_write_command_responserp     s7     ::m,L-
v
C
"3' r@   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)r4   r5   ).0fields     r1   	<genexpr>z'_fields_list_to_dict.<locals>.<genexpr>   s     >ve:eS)vs   z5 must be a list of key names, each an instance of str   z' must be a mapping or list of key names)	r4   r   r
   r   Setallr6   dictfromkeys)fieldsoption_names     r1   _fields_list_to_dictr~     ss     &#++&&3<<12>v>>{m+`abb}}VQ''
{m#JK
LLr@   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   rw      N)sysstderrexc_info	tracebackprint_exceptionOSError)einfos    r1   _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   rN   r*   r4   connauthenticate)	argskwargsr   r   r   excr   argfuncs	           r1   innerz_handle_reauth.<locals>.inner<  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   ` r1   _handle_reauthr   ;  s    : 5>r@   )r/   r   r   r5   rs   )r<   r   r=   zOptional[Union[int, str]]r   z8Sequence[tuple[str, Union[int, str, Mapping[str, Any]]]])rF   r   r   zSON[str, Any])rH   r   rI   r   r   None)NF)
rZ   r   r[   zOptional[int]r\   z$Optional[Container[Union[int, str]]]r]   boolr   r   )re   z	list[Any]r   r   )rf   r   r   r   )rj   Mapping[str, Any]r   zOptional[Mapping[str, Any]])rj   r   r   r   )r|   z'Union[Mapping[str, Any], Iterable[str]]r}   r5   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   bson.sonr   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*   r2   r?   rJ   rE   rb   rg   rX   rm   rp   r~   r   r   r    r@   r1   <module>r      s   J " 
       
 
 
 &$-, '
  	
	 
 I  %7: % 	  (+  *> @D#<=8:
 >B&+	@E@E#@E ;@E  $	@E
 
@EFDK		(M3MBEMM," CxS)*r@   