
    +hi                    Z    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e          ZdS )z/Tools for representing JavaScript code in BSON.    )annotations)Mapping)Anyr   OptionalTypeUnionc                  l    e Zd ZU dZdZded<   	 dddZedd            ZddZ	ddZ
dZde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                   t          |t                    st          d          t                              | |          }	 |j        |_        n# t          $ r
 d |_        Y nw xY w|Mt          |t                    st          d          |j        |j                            |           n||_        |r)|j        |j                            |           n||_        |S )Nzcode must be an instance of strz!scope must be an instance of dict)	
isinstancestr	TypeError__new__r   r   AttributeError_Mappingupdate)r   r   r   r   selfs        M/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/bson/code.pyr   zCode.__new__4   s     $$$ 	?=>>>{{3%%	 :DLL 	  	  	 DLLL	  eX.. E CDDD|'##E****$ 	&|'##F++++%s   A A"!A"c                    | j         S )z/Scope dictionary for this instance or ``None``.)r   r   s    r   r   z
Code.scopeT   s     |    r   c                N    dt                               |            d| j        dS )NzCode(z, ))r   __repr__r   r    s    r   r$   zCode.__repr__Y   s)    >s||D))>>T\>>>>r!   otherboolc                    t          |t                    r.| j        t          |           f|j        t          |          fk    S dS )NF)r   r
   r   r   r   r%   s     r   __eq__zCode.__eq__\   s?    eT"" 	LL#d)),E

0KKKur!   __hash__c                    | |k     S N r(   s     r   __ne__zCode.__ne__c   s    5=  r!   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          4 L++++
 .2    @    X? ? ? ?   
 H! ! ! ! ! !r!   r
   N)r2   
__future__r   collections.abcr   r   typingr   r   r   r   r   r
   r-   r!   r   <module>r9      s    6 5 " " " " " " / / / / / / 6 6 6 6 6 6 6 6 6 6 6 6 6 6N! N! N! N! N!3 N! N! N! N! N!r!   