o
    'h                     @  sL   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 G dd deZdS )z/Tools for representing JavaScript code in BSON.    )annotations)Mapping)Anyr   OptionalTypeUnionc                   @  sd   e Zd ZU dZdZded< 	ddddZedddZd ddZ	d!ddZ
dZded< d!ddZdS )"CodeaG  BSON's JavaScript code type.

    Raises :class:`TypeError` if `code` is not an instance of
    :class:`str` or `scope` is not ``None`` or an instance
    of :class:`dict`.

    Scope variables can be set by passing a dictionary as the `scope`
    argument or by using keyword arguments. If a variable is set as a
    keyword argument it will override any setting for that variable in
    the `scope` dictionary.

    :param code: A string containing JavaScript code to be evaluated or another
        instance of Code. In the latter case, the scope of `code` becomes this
        Code's :attr:`scope`.
    :param scope: dictionary representing the scope in which
        `code` should be evaluated - a mapping from identifiers (as
        strings) to values. Defaults to ``None``. This is applied after any
        scope associated with a given `code` above.
    :param kwargs: scope variables can also be passed as
        keyword arguments. These are applied after `scope` and `code`.

    .. versionchanged:: 3.4
      The default value for :attr:`scope` is ``None`` instead of ``{}``.

       zUnion[Mapping[str, Any], None]_Code__scopeNcls
Type[Code]codeUnion[str, Code]scopeOptional[Mapping[str, Any]]kwargsr   returnc                 K  s   t |tstdt| t| |}z|j|_W n ty&   d |_Y nw |d urHt |ts9tdt| |jd urE|j	| n||_|rZ|jd urW|j	| |S ||_|S )Nz%code must be an instance of str, not z'scope must be an instance of dict, not )

isinstancestr	TypeErrortype__new__r   r
   AttributeError_Mappingupdate)r   r   r   r   self r   E/var/www/html/olx_land/venv/lib/python3.10/site-packages/bson/code.pyr   4   s(   




zCode.__new__c                 C  s   | j S )z/Scope dictionary for this instance or ``None``.)r
   r   r   r   r   r   T   s   z
Code.scoper   c                 C  s   dt |  d| jdS )NzCode(z, ))r   __repr__r
   r   r   r   r   r    Y   s   zCode.__repr__otherboolc                 C  s*   t |tr| jt| f|jt|fkS dS )NF)r   r   r
   r   r   r!   r   r   r   __eq__\   s   
zCode.__eq____hash__c                 C  s
   | |k S Nr   r#   r   r   r   __ne__c   s   
zCode.__ne__r&   )
r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   )r!   r   r   r"   )__name__
__module____qualname____doc___type_marker__annotations__r   propertyr   r    r$   r%   r'   r   r   r   r   r      s   
  

r   N)r+   
__future__r   collections.abcr   r   typingr   r   r   r   r   r   r   r   r   r   <module>   s
   