o
    d)                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ ddlmZ ejr?ddlmZ ddlmZ G d	d
 d
ZdddZG dd deZdS )    )annotationsN)date)	http_date   )request)Flask)Responsec                   @  sV   e Zd ZdZd"ddZd#ddZd$ddZd%ddZd&ddZd'ddZ	d(dd Z
d!S ))JSONProvidera  A standard set of JSON operations for an application. Subclasses
    of this can be used to customize JSON behavior or use different
    JSON libraries.

    To implement a provider for a specific library, subclass this base
    class and implement at least :meth:`dumps` and :meth:`loads`. All
    other methods have default implementations.

    To use a different provider, either subclass ``Flask`` and set
    :attr:`~flask.Flask.json_provider_class` to a provider class, or set
    :attr:`app.json <flask.Flask.json>` to an instance of the class.

    :param app: An application instance. This will be stored as a
        :class:`weakref.proxy` on the :attr:`_app` attribute.

    .. versionadded:: 2.2
    appr   returnNonec                 C  s   t || _d S )N)weakrefproxy_app)selfr
    r   X/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/flask/json/provider.py__init__'   s   zJSONProvider.__init__objt.Anykwargsstrc                 K     t )zSerialize data as JSON.

        :param obj: The data to serialize.
        :param kwargs: May be passed to the underlying JSON library.
        NotImplementedError)r   r   r   r   r   r   dumps*      zJSONProvider.dumpsfp	t.IO[str]c                 K  s   | | j|fi | dS )a  Serialize data as JSON and write to a file.

        :param obj: The data to serialize.
        :param fp: A file opened for writing text. Should use the UTF-8
            encoding to be valid JSON.
        :param kwargs: May be passed to the underlying JSON library.
        N)writer   )r   r   r   r   r   r   r   dump2   s   zJSONProvider.dumpsstr | bytesc                 K  r   )zDeserialize data as JSON.

        :param s: Text or UTF-8 bytes.
        :param kwargs: May be passed to the underlying JSON library.
        r   )r   r!   r   r   r   r   loads<   r   zJSONProvider.loadst.IO[t.AnyStr]c                 K  s   | j | fi |S )zDeserialize data as JSON read from a file.

        :param fp: A file opened for reading text or UTF-8 bytes.
        :param kwargs: May be passed to the underlying JSON library.
        )r#   read)r   r   r   r   r   r   loadD   s   zJSONProvider.loadargst.Tuple[t.Any, ...]t.Dict[str, t.Any]c                 C  s8   |r|rt d|s|sd S t|dkr|d S |p|S )Nz9app.json.response() takes either args or kwargs, not both   r   )	TypeErrorlen)r   r'   r   r   r   r   _prepare_response_objL   s   z"JSONProvider._prepare_response_objr   c                 O  s"   |  ||}| jj| |ddS )a(  Serialize the given arguments as JSON, and return a
        :class:`~flask.Response` object with the ``application/json``
        mimetype.

        The :func:`~flask.json.jsonify` function calls this method for
        the current application.

        Either positional or keyword arguments can be given, not both.
        If no arguments are given, ``None`` is serialized.

        :param args: A single value to serialize, or multiple values to
            treat as a list to serialize.
        :param kwargs: Treat as a dict to serialize.
        application/jsonmimetype)r-   r   response_classr   )r   r'   r   r   r   r   r   responseZ   s   zJSONProvider.responseN)r
   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r!   r"   r   r   r   r   )r   r$   r   r   r   r   )r'   r(   r   r)   r   r   r'   r   r   r   r   r   )__name__
__module____qualname____doc__r   r   r    r#   r&   r-   r2   r   r   r   r   r	      s    






r	   or   r   c                 C  sp   t | tr	t| S t | tjtjfrt| S tr"t	| r"t
| S t| dr-t|  S tdt| j d)N__html__zObject of type z is not JSON serializable)
isinstancer   r   decimalDecimaluuidUUIDr   dataclassesis_dataclassasdicthasattrr;   r+   typer6   )r:   r   r   r   _defaultm   s   


rF   c                   @  sb   e Zd ZU dZeeZded< 	 dZ	 dZ		 dZ
ded< 	 dZ	 dddZdddZdddZdS )DefaultJSONProvidera4  Provide JSON operations using Python's built-in :mod:`json`
    library. Serializes the following additional data types:

    -   :class:`datetime.datetime` and :class:`datetime.date` are
        serialized to :rfc:`822` strings. This is the same as the HTTP
        date format.
    -   :class:`uuid.UUID` is serialized to a string.
    -   :class:`dataclasses.dataclass` is passed to
        :func:`dataclasses.asdict`.
    -   :class:`~markupsafe.Markup` (or any object with a ``__html__``
        method) will call the ``__html__`` method to get a string.
    zt.Callable[[t.Any], t.Any]defaultTNzbool | Nonecompactr.   r   r   r   r   r   c                 K  s  | j j}tr| j jtjnd}|dur|jdur|j}|dur=ddl}|dt |	d| d|j
vr<|	d| j n|	d| j | j jd }| j jd }|dur_ddl}|dt n| j}|durqddl}|d	t n| j}|	d
| |	d| tj|fi |S )aI  Serialize data as JSON to a string.

        Keyword arguments are passed to :func:`json.dumps`. Sets some
        parameter defaults from the :attr:`default`,
        :attr:`ensure_ascii`, and :attr:`sort_keys` attributes.

        :param obj: The data to serialize.
        :param kwargs: Passed to :func:`json.dumps`.
        Nr   z~Setting 'json_encoder' on the app or a blueprint is deprecated and will be removed in Flask 2.3. Customize 'app.json' instead.clsrH   JSON_AS_ASCIIJSON_SORT_KEYSzsThe 'JSON_AS_ASCII' config key is deprecated and will be removed in Flask 2.3. Set 'app.json.ensure_ascii' instead.zqThe 'JSON_SORT_KEYS' config key is deprecated and will be removed in Flask 2.3. Set 'app.json.sort_keys' instead.ensure_ascii	sort_keys)r   _json_encoderr   
blueprintsget	blueprintwarningswarnDeprecationWarning
setdefault__dict__rH   configrM   rN   jsonr   )r   r   r   rJ   bprS   rM   rN   r   r   r   r      sD   

zDefaultJSONProvider.dumpsr!   r"   c                 K  sr   | j j}tr| j jtjnd}|dur|jdur|j}|dur0ddl}|dt |	d| t
j|fi |S )zDeserialize data as JSON from a string or bytes.

        :param s: Text or UTF-8 bytes.
        :param kwargs: Passed to :func:`json.loads`.
        Nr   z~Setting 'json_decoder' on the app or a blueprint is deprecated and will be removed in Flask 2.3. Customize 'app.json' instead.rJ   )r   _json_decoderr   rP   rQ   rR   rS   rT   rU   rV   rY   r#   )r   r!   r   rJ   rZ   rS   r   r   r   r#      s   zDefaultJSONProvider.loadsr'   r   c           	      O  s   |  ||}i }| jjd }| jjd }|dur&ddl}|dt | }n| j}|du r1| jjs5|du r<|dd n|d	d
 |durQddl}|dt n| j	}| jj
| j|fi | d|dS )a  Serialize the given arguments as JSON, and return a
        :class:`~flask.Response` object with it. The response mimetype
        will be "application/json" and can be changed with
        :attr:`mimetype`.

        If :attr:`compact` is ``False`` or debug mode is enabled, the
        output will be formatted to be easier to read.

        Either positional or keyword arguments can be given, not both.
        If no arguments are given, ``None`` is serialized.

        :param args: A single value to serialize, or multiple values to
            treat as a list to serialize.
        :param kwargs: Treat as a dict to serialize.
        JSONIFY_PRETTYPRINT_REGULARJSONIFY_MIMETYPENr   z|The 'JSONIFY_PRETTYPRINT_REGULAR' config key is deprecated and will be removed in Flask 2.3. Set 'app.json.compact' instead.Findentr   
separators),:zrThe 'JSONIFY_MIMETYPE' config key is deprecated and will be removed in Flask 2.3. Set 'app.json.mimetype' instead.
r/   )r-   r   rX   rS   rT   rU   rI   debugrV   r0   r1   r   )	r   r'   r   r   	dump_argsprettyr0   rS   rI   r   r   r   r2     s2   zDefaultJSONProvider.responser3   r4   r5   )r6   r7   r8   r9   staticmethodrF   rH   __annotations__rM   rN   rI   r0   r   r#   r2   r   r   r   r   rG   }   s"   
 

?rG   )r:   r   r   r   )
__future__r   rA   r=   rY   typingtr?   r   datetimer   werkzeug.httpr   globalsr   TYPE_CHECKINGr
   r   wrappersr   r	   rF   rG   r   r   r   r   <module>   s     
Y