
    [j                    l    d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
mZ ddlmZ  G d d          Zd	S )
z@Tools for manipulating DBRefs (references to MongoDB documents).    )annotations)deepcopy)AnyMappingOptional)_getstate_slots_setstate_slots)SONc                      e Zd ZdZdZeZeZdZ		 	 d!d"dZ
ed#d            Zed$d            Ze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S )+DBRefz,A reference to a document stored in MongoDB.)__collection__id
__database__kwargsd   N
collectionstridr   databaseOptional[str]_extraOptional[Mapping[str, Any]]kwargsreturnNonec                    t          |t                    st          d          |$t          |t                    st          d          || _        || _        || _        |                    |pi            || _        dS )a"  Initialize a new :class:`DBRef`.

        Raises :class:`TypeError` if `collection` or `database` is not
        an instance of :class:`str`. `database` is optional and allows
        references to documents to work across databases. Any additional
        keyword arguments will create additional fields in the resultant
        embedded document.

        :Parameters:
          - `collection`: name of the collection the document is stored in
          - `id`: the value of the document's ``"_id"`` field
          - `database` (optional): name of the database to reference
          - `**kwargs` (optional): additional keyword arguments will
            create additional, custom fields

        .. seealso:: The MongoDB documentation on `dbrefs <https://dochub.mongodb.org/core/dbrefs>`_.
        z%collection must be an instance of strNz#database must be an instance of str)
isinstancer   	TypeError_DBRef__collection
_DBRef__id_DBRef__databaseupdate_DBRef__kwargs)selfr   r   r   r   r   s         N/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/bson/dbref.py__init__zDBRef.__init__"   s    2 *c** 	ECDDD
8S(A(AABBB&	"fl###    c                    | j         S )z(Get the name of this DBRef's collection.)r   r$   s    r%   r   zDBRef.collectionF   s       r'   c                    | j         S )zGet this DBRef's _id.)r    r)   s    r%   r   zDBRef.idK   s     yr'   c                    | j         S )zoGet the name of this DBRef's database.

        Returns None if this DBRef doesn't specify a database.
        )r!   r)   s    r%   r   zDBRef.databaseP   s     r'   keyc                Z    	 | j         |         S # t          $ r t          |          d w xY wN)r#   KeyErrorAttributeError)r$   r,   s     r%   __getattr__zDBRef.__getattr__X   s?    	0=%% 	0 	0 	0 %%4/	0s    *SON[str, Any]c                    t          d| j        fd| j        fg          }| j        
| j        |d<   |                    | j                   |S )zsGet the SON document representation of this DBRef.

        Generally not needed by application developers
        z$refz$idNz$db)r
   r   r   r   r"   r#   )r$   docs     r%   as_doczDBRef.as_doc^   sP    
 FDO,udg.>?@@=$CJ

4=!!!
r'   c                    d                     d | j                                        D                       }| j        d| j        d| j        | dS d| j        d| j        d| j        | dS )N c                $    g | ]\  }}d | d|S ), = ).0kvs      r%   
<listcomp>z"DBRef.__repr__.<locals>.<listcomp>j   s(    JJJDAqa!JJJr'   zDBRef(r9   ))joinr#   itemsr   r   r   )r$   extras     r%   __repr__zDBRef.__repr__i   s    JJDM4G4G4I4IJJJKK= DDODDDEDDDDSSSTWSS$-S5SSSSr'   otherboolc                    t          |t                    r:| j        | j        | j        | j        f}|j        |j        |j        |j        f}||k    S t          S r.   )r   r   r!   r   r    r#   NotImplemented)r$   rE   usthems       r%   __eq__zDBRef.__eq__o   sS    eU## 	/4#4diOB$e&8%*enUD:r'   c                    | |k     S r.   r;   )r$   rE   s     r%   __ne__zDBRef.__ne__v   s    5=  r'   intc                    t          | j        | j        | j        t	          t          | j                                                            f          S )z)Get a hash value for this :class:`DBRef`.)hashr   r    r!   tuplesortedr#   rB   r)   s    r%   __hash__zDBRef.__hash__y   sE    	4?E&I\I\I^I^B_B_<`<`a
 
 	
r'   memoc           	         t          t          | j        |          t          | j        |          t          | j        |          t          | j        |                    S )z'Support function for `copy.deepcopy()`.)r   r   r   r    r!   r#   )r$   rT   s     r%   __deepcopy__zDBRef.__deepcopy__   sQ    T&--TY%%T_d++T]D))	
 
 	
r'   )NN)r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   )r   r   )r,   r   r   r   )r   r2   )rE   r   r   rF   )r   rN   )rT   r   r   r   )__name__
__module____qualname____doc__	__slots__r   __getstate__r	   __setstate___type_markerr&   propertyr   r   r   r1   r5   rD   rK   rM   rS   rV   r;   r'   r%   r   r      s@       66@I"L"LL #'.2" " " " "H ! ! ! X!    X    X0 0 0 0	 	 	 	T T T T   ! ! ! !
 
 
 

 
 
 
 
 
r'   r   N)rZ   
__future__r   copyr   typingr   r   r   bson._helpersr   r	   bson.sonr
   r   r;   r'   r%   <module>re      s    G F " " " " " "       ) ) ) ) ) ) ) ) ) ) : : : : : : : :      m
 m
 m
 m
 m
 m
 m
 m
 m
 m
r'   