0[: d Z ddlZddlmZmZ ddlmZmZmZ dZdZ dZ dZ G d d Z dd Z ddZddZddZddZdS )zImplementation of the JSON adaptation objects This module exists to avoid a circular import problem: pyscopg2.extras depends on psycopg2.extension, so I can't create the default JSON typecasters in extensions importing register_json from extras. N) ISQLQuoteQuotedString)new_typenew_array_type register_typer i i c 8 e Zd ZdZd dZd Zd Zd Zd Zd Z dS ) Jsona An `~psycopg2.extensions.ISQLQuote` wrapper to adapt a Python object to :sql:`json` data type. `!Json` can be used to wrap any object supported by the provided *dumps* function. If none is provided, the standard :py:func:`json.dumps()` is used. Nc H || _ d | _ |pt j | _ d S N)adapted_connjsondumps_dumps)selfr r s b/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib64/python3.11/site-packages/psycopg2/_json.py__init__z Json.__init__8 s" )tz c |t u r| S d S r )r )r protos r __conform__zJson.__conform__= s IK r c , | | S )zSerialize *obj* in JSON format. The default is to call `!json.dumps()` or the *dumps* function provided in the constructor. You can override this method to create a customized JSON wrapper. )r )r objs r r z Json.dumpsA s {{3r c || _ d S r )r )r conns r preparezJson.prepareJ s r c | | j }t | }| j | | j | S r )r r r r r getquoted)r sqss r r zJson.getquotedM sJ JJt|$$ !__:!JJtz"""||~~r c R | dd S )Nasciireplace)r decode)r s r __str__zJson.__str__T s" ~~&&w :::r r ) __name__ __module____qualname____doc__r r r r r r' r r r r . s} * * * * ; ; ; ; ;r r Fr c |t | | \ }}t |||| \ }}t || r| pd |t || r| pd ||fS )a Create and register typecasters converting :sql:`json` type to Python objects. :param conn_or_curs: a connection or cursor used to find the :sql:`json` and :sql:`json[]` oids; the typecasters are registered in a scope limited to this object, unless *globally* is set to `!True`. It can be `!None` if the oids are provided :param globally: if `!False` register the typecasters only on *conn_or_curs*, otherwise register them globally :param loads: the function used to parse the data into a Python object. If `!None` use `!json.loads()`, where `!json` is the module chosen according to the Python version (see above) :param oid: the OID of the :sql:`json` type if known; If not, it will be queried on *conn_or_curs* :param array_oid: the OID of the :sql:`json[]` array type if known; if not, it will be queried on *conn_or_curs* :param name: the name of the data type to look for in *conn_or_curs* The connection or cursor passed to the function will be used to query the database and look for the OID of the :sql:`json` type (or an alternative type if *name* if provided). No query is performed if *oid* and *array_oid* are provided. Raise `~psycopg2.ProgrammingError` if the type is not found. N)loadsname)_get_json_oids_create_json_typecastersupperr )conn_or_cursgloballyr. oid array_oidr/ JSON JSONARRAYs r register_jsonr9 Y s 2 {'d;;Y.Ye$**,,8 8 8OD) $H5=>>>iX!>,!F$GGG?r c > t | ||t t S )a{ Create and register :sql:`json` typecasters for PostgreSQL 9.2 and following. Since PostgreSQL 9.2 :sql:`json` is a builtin type, hence its oid is known and fixed. This function allows specifying a customized *loads* function for the default :sql:`json` type without querying the database. All the parameters have the same meaning of `register_json()`. )r3 r4 r. r5 r6 )r9 JSON_OID JSONARRAY_OIDr3 r4 r. s r register_default_jsonr> s&