File: //opt/alt/python37/lib64/python3.7/site-packages/psycopg2/__pycache__/_json.cpython-37.pyc
B
*��]Z � @ s� d Z ddlZddlmZmZ ddlmZmZmZ ddlm Z dZ
dZdZd Z
G d
d� de�Zddd�Zddd�Zddd�Zddd�Zddd�ZdS )z�Implementation 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)� ISQLQuote�QuotedString)�new_type�new_array_type�
register_type)�PY2�r �� i� i� c @ sP e Zd ZdZddd�Zdd� Zdd� Zd d
� Zdd� Ze rDd
d� Z
ndd� 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 C s || _ d | _|ptj| _d S )N)�adapted�_conn�json�dumps�_dumps)�selfr r � r �A/opt/alt/python37/lib64/python3.7/site-packages/psycopg2/_json.py�__init__8 s z
Json.__init__c C s |t kr| S d S )N)r )r �protor r r �__conform__= s zJson.__conform__c C s
| � |�S )z�Serialize *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 �objr r r r A s z
Json.dumpsc C s
|| _ d S )N)r )r �connr r r �prepareJ s zJson.preparec C s2 | � | j�}t|�}| jd k r*|�| j� |�� S )N)r r r r r � getquoted)r �sZqsr r r r M s
zJson.getquotedc C s | � � S )N)r )r r r r �__str__U s zJson.__str__c C s | � � �dd�S )N�ascii�replace)r �decode)r r r r r X s )N)�__name__�
__module__�__qualname__�__doc__r r r r r r r r r r r r
. s
r
Fr
c C sf |dkrt | |�\}}t||||�� d�\}}t|| r<| p>d� |dk r^t|| rX| pZd� ||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)�loads�name)�_get_json_oids�_create_json_typecasters�upperr )�conn_or_curs�globallyr# �oid� array_oidr$ �JSON� JSONARRAYr r r �
register_json] s r. c C s t | ||ttd�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()`.
)r( r) r# r* r+ )r. �JSON_OID�
JSONARRAY_OID)r( r) r# r r r �register_default_json� s r1 c C s t | ||ttdd�S )a^
Create and register :sql:`jsonb` typecasters for PostgreSQL 9.4 and following.
As in `register_default_json()`, the function allows to register a
customized *loads* function for the :sql:`jsonb` type at its known oid for
PostgreSQL 9.4 and following versions. All the parameters have the same
meaning of `register_json()`.
Zjsonb)r( r) r# r* r+ r$ )r. � JSONB_OID�JSONBARRAY_OID)r( r) r# r r r �register_default_jsonb� s r4 r, c sP � dkrt j� � fdd�}t| f||�}|dk rDt|fd| |�}nd}||fS )z&Create typecasters for json data type.Nc s | d krd S � | �S )Nr )r Zcur)r# r r �
typecast_json� s z/_create_json_typecasters.<locals>.typecast_jsonz%sARRAY)r
r# r r )r* r+ r# r$ r5 r, r- r )r# r r&