
    n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 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<   h dZ,de'd<   d'dZ-	 d(	 	 	 	 	 d)dZ.d*dZ/d+dZ0	 	 d,	 	 	 	 	 	 	 	 	 d-d Z1d.d!Z2d/d"Z3d0d#Z4d1d$Z5	 	 	 	 	 	 d2d%Z6d3d&Z7y)4zCBits and pieces used by the driver that don't really fit elsewhere.    )annotationsN)abc)	TYPE_CHECKINGAny	ContainerIterableMappingNoReturnOptionalSequenceUnion)	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_CODE>	   copydbgetnonce	saslstart
createuser
updateuserauthenticatesaslcontinuecopydbgetnoncecopydbsaslstartset_SENSITIVE_COMMANDSc                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/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/pymongo/helpers_shared.py_gen_index_namer<   o   s*    88t<t^W^^T*<==<s   -c                   |,t        | t              st        dt        |              | |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t        |              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 direction, not zKif no direction is specified, key_or_list must be an instance of list, not )
isinstancestr	TypeErrortyper   r   	ItemsViewlistr	   itemstupleappend)key_or_list	directionvaluesr:   s       r;   _index_listrJ   t   s     +s+Ed;FWEXYZZi())k3' ),--S]]3$$S[[1))+,,K$7]^bcn^o]pq  )+ 	 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)r>   rC   rE   r   r	   r@   reprlen
ValueError_validate_index_key_pairr?   r   )
index_listindexkeyvaluer:   s        r;   _index_documentrU      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	 LrK   c                    t        | t              st        dt        |              t        |t        t        t
        j                  f      st        dt        |             y )Nz<first item in each key pair must be an instance of str, not zasecond item in each key pair must be 1, -1, '2d', or another valid MongoDB index specifier., not )r>   r?   r@   rA   r&   r   r	   )rS   rT   s     r;   rP   rP      sa    c3VW[\_W`Vabccec345%[M#
 	
 6rK   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_errorrI   r    r   r   LEGACY_ERRORr   r   r   )
responsemax_wire_versionallowable_errorsparse_write_concern_error_error_labelsdetailsshardr]   rY   s
             r;   _check_command_responserm      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DrK   c                    | d   }|j                  d      dk(  rt        |j                  d      d|      t        |j                  d      |j                  d      |      )NrY   r^   r]   )ra   r   r   )write_errorserrors     r;   _raise_last_write_errorrr      sX     EyyE!		( 3UEBB
UYYx(%))F*;U
CCrK   c                    t        |       r+t        | j                  d      | j                  d      |       t        | j                  d      | j                  d      |       )Nr]   rY   )r   r   ra   r   )rq   s    r;   rc   rc     sL    uEIIh/61BEJJ
EIIh/61BE
JJrK   c                |    | j                  d      }|r(| j                  d      }|r|j                         }||d<   |S )z%Return the writeConcernError or None.rZ   r[   )ra   copy)resultwceerror_labelss      r;   _get_wce_docry     sA    
**(
)C
 zz-0((*C!-CJrK   c                r    | j                  d      }|rt        |       t        |       }|rt        |       yy)z?Backward compatibility helper for write command error handling.writeErrorsN)ra   rr   ry   rc   )rv   rp   rw   s      r;   _check_write_command_responser|     s7     ::m,L-
v
C
"3' rK   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)r>   r?   ).0fields     r;   	<genexpr>z'_fields_list_to_dict.<locals>.<genexpr>6  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)	r>   r   r	   r   Setallr@   dictfromkeys)fieldsoption_names     r;   _fields_list_to_dictr   '  ss     &#++&&3<<12>v>>{m+`abb}}VQ''
{m#JK
LLrK   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   r      N)sysstderrexc_info	tracebackprint_exceptionOSError)einfos    r;   _handle_exceptionr   =  sh     zz	%%eAha%(D#**U    		 s#   0A 	A&"A) %A&&A) )A,)r9   r   returnr?   r   )rG   r   rH   zOptional[Union[int, str]]r   z8Sequence[tuple[str, Union[int, str, Mapping[str, Any]]]])rQ   r   r   zdict[str, Any])rS   r   rT   r   r   None)NF)
re   r   rf   zOptional[int]rg   z$Optional[Container[Union[int, str]]]rh   boolr   r   )rp   z	list[Any]r   r
   )rq   r   r   r
   )rv   Mapping[str, Any]r   zOptional[Mapping[str, Any]])rv   r   r   r   )r   z'Union[Mapping[str, Any], Iterable[str]]r   r?   r   r   )r   r   )8__doc__
__future__r   r   r   collectionsr   typingr   r   r   r   r	   r
   r   r   r   pymongor   pymongo.errorsr   r   r   r   r   r   r   r   r   pymongo.hellor   pymongo.cursor_sharedr   pymongo.operationsr   pymongo.typingsr   r   r   __annotations__r    r%   r'   r)   r4   r<   rJ   rU   rP   rm   rr   rc   ry   r|   r   r    rK   r;   <module>r      s   J " 
  
 
 
 
 
 
 &+-,
 '
  	
	 
 I  %7	: 	% 	 	 (+  * %' c &

 S 
> @D#<=<:
 >B&+	@E@E#@E ;@E  $	@E
 
@EFDK	(M3MBEMM,rK   