HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.60.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 5 05:00:59 EST 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //proc/thread-self/root/var/opt/nydus/ops/mysql/connector/django/__pycache__/base.cpython-39.pyc
a

�,�h�^�
@s&dZddlZddlmZmZddlmZmZmZmZm	Z	m
Z
mZmZm
Z
mZmZddlmZddlmZddlmZddlmZdd	lmZmZdd
lmZddlmZzDddlZ ddl!m"Z"dd
l#m$Z$ddl%m&Z&ddlm'Z'm(Z(m)Z)Wn6e*�y"Z+zede+���e+�WYdZ+[+n
dZ+[+00zddl,m-Z-Wne*�yLdZ.Yn0dZ.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:ddl;m<Z<e j=j>Z>e j=j?Z?e j=j@Z@e j=jAZAe j=jBZBe�r�ddlCmDZDmEZEee)d�dd�ZFGd d!�d!�ZGGd"d#�d#e�ZHGd$d%�d%e"�ZIdS)&a�Django database Backend using MySQL Connector/Python.

This Django database backend is heavily based on the MySQL backend from Django.

Changes include:
* Support for microseconds (MySQL 5.6.3 and later)
* Using INFORMATION_SCHEMA where possible
* Using new defaults for, for example SQL_AUTO_IS_NULL

Requires and comes with MySQL Connector/Python v8.0.22 and later:
    http://dev.mysql.com/downloads/connector/python/
�N)�datetime�time)�
TYPE_CHECKING�Any�Dict�	Generator�Iterator�List�Optional�Sequence�Set�Tuple�Union)�settings)�ImproperlyConfigured)�IntegrityError)�BaseDatabaseWrapper)�	dateparse�timezone)�cached_property)�MySQLConvertibleType)�MySQLConverter)�
HexLiteral)�PooledMySQLConnection)�ParamsSequenceOrDictType�RowType�
StrOrBytesz&Error loading mysql.connector module: )�datetime_to_mysqlFT�)�DatabaseClient)�DatabaseCreation)�DatabaseFeatures)�DatabaseIntrospection)�DatabaseOperations)�DatabaseSchemaEditor)�DatabaseValidation)�MySQLConnectionAbstract�MySQLCursorAbstract��value�returncCsftjrLt�|�r8t�d|�d�t�t��}t�||�}|�	tj
�jdd�}tr\t
|�}|S|�d�S)zDEquivalent to DateTimeField.get_db_prep_value. Used only by raw SQL.z!MySQL received a naive datetime (z$) while time zone support is active.N)�tzinfoz%Y-%m-%d %H:%M:%S.%f)rZUSE_TZrZis_naive�warnings�warn�RuntimeWarningZget_default_timezoneZ
make_aware�
astimezone�utc�replace�	HAVE_CEXTr�strftime)r)Zdefault_timezoneZmysql_datetime�r4�N/opt/nydus/tmp/pip-target-wkfpz8uv/lib64/python/mysql/connector/django/base.py�$adapt_datetime_with_timezone_supportis

��r6c@s�eZdZdZdZddd�dd�Zeeee	feee	fd�d	d
��Z
eeee	eee	d�dd��Z
deeeee	eee	ffeed
d�dd�Zeeeee	eee	ffeed
d�dd�Zeed�dd�Zeed�dd�ZdS)�
CursorWrapperz�Wrapper around MySQL Connector/Python's cursor class.

    The cursor class is defined by the options passed to MySQL
    Connector/Python. If buffered option is True in those options,
    MySQLCursorBuffered will be used.
    )ii�i�i�r'N)�cursorr*cCs
||_dS�N)r8��selfr8r4r4r5�__init__�szCursorWrapper.__init__)�argsr*cCs<|s|St|�}|��D]\}}t|t�rt|�||<q|Sr9)�dict�items�
isinstancerr6)r=�new_args�keyr)r4r4r5�_adapt_execute_args_dict�s
z&CursorWrapper._adapt_execute_args_dictcCs@|s|St|�}t|�D]\}}t|t�rt|�||<qt|�Sr9)�list�	enumerater@rr6�tuple)r=rA�i�argr4r4r5�_adapt_execute_args�s
z!CursorWrapper._adapt_execute_args)r'NN)�queryr=r*c
Cs�d}t|t�r|�|�}n
|�|�}z|j�||�WStjjy~}z.|j	d|j
vrhtt|j	��d��WYd}~n
d}~00dS)z�Executes the given operation

        This wrapper method around the execute()-method of the cursor is
        mainly needed to re-raise using different exceptions.
        Nr)
r@r>rCrIr8�execute�mysql�	connector�OperationalErrorr=�codes_for_integrityerrorrrF)r;rJr=rA�excr4r4r5rK�s

zCursorWrapper.executec
Cs`z|j�||�WStjjyZ}z.|jd|jvrDtt|j��d��WYd}~n
d}~00dS)z�Executes the given operation

        This wrapper method around the executemany()-method of the cursor is
        mainly needed to re-raise using different exceptions.
        rN)	r8�executemanyrLrMrNr=rOrrF)r;rJr=rPr4r4r5rQ�szCursorWrapper.executemany��attrr*cCst|j|�S)z%Return an attribute of wrapped cursor)�getattrr8�r;rSr4r4r5�__getattr__�szCursorWrapper.__getattr__�r*cCs
t|j�S)z&Return an iterator over wrapped cursor)�iterr8�r;r4r4r5�__iter__�szCursorWrapper.__iter__)N)�__name__�
__module__�__qualname__�__doc__rOr<�staticmethodr�strrrCr
rrIrrrKrQrrVrrrZr4r4r4r5r7}s6

�

���
��
�r7csJeZdZUdZdZddddddd	d
ddddd
dddddd
dddddddddd�ZdZddddddd d!d"d#ddddd$�Zd%Zd&d'd(d)d*d+d,�Z	d-Z
eee
d.<hd/�ZejZeZeZeZeZeZeZeZe e d-d0��fd1d2�Z!ee"d3�d4d5�Z#e$ee fd6�d7d8�Z%e$ee fe&e'd9fd:�d;d<�Z(d-d6�d=d>�Z)d_e e*d?�d@dA�Z+d-d6�dBdC�Z,e"d-dD�dEdF�Z-e"d6�dGdH�Z.d-d6�dIdJ�Z/d`ee0ed-dK�dLdM�Z1e"d6�dNdO�Z2e3e4ed6�dPdQ���Z5e3e$eefd6�dRdS��Z6e3e$ee fd6�dTdU��Z7e3e d6�dVdW��Z8e3e9e:dXfd6�dYdZ��Z;e3e<ed6�d[d\��Z=e>e"d6�d]d^��Z?�Z@S)a�DatabaseWrapperz Represent a database connection.rLzinteger AUTO_INCREMENTzbigint AUTO_INCREMENT�longblob�boolzvarchar(%(max_length)s)�datezdatetime(6)z+numeric(%(max_digits)s, %(decimal_places)s)Zbigintzdouble precision�integerzchar(15)zchar(39)�jsonzbigint UNSIGNEDzinteger UNSIGNEDzsmallint UNSIGNEDzsmallint AUTO_INCREMENTZsmallint�longtextztime(6)zchar(32))Z	AutoFieldZBigAutoFieldZBinaryFieldZBooleanFieldZ	CharFieldZ	DateFieldZ
DateTimeFieldZDecimalFieldZ
DurationFieldZ	FileFieldZ
FilePathFieldZ
FloatFieldZIntegerFieldZBigIntegerFieldZIPAddressFieldZGenericIPAddressFieldZ	JSONFieldZNullBooleanFieldZ
OneToOneField�PositiveBigIntegerField�PositiveIntegerField�PositiveSmallIntegerFieldZ	SlugFieldZSmallAutoFieldZSmallIntegerFieldZ	TextFieldZ	TimeFieldZ	UUIDField)	ZtinyblobZblobZ
mediumblobrbZtinytext�textZ
mediumtextrgrfz= %szLIKE %szLIKE BINARY %szREGEXP BINARY %sz	REGEXP %sz> %sz>= %sz< %sz<= %s)�exactZiexact�contains�	icontains�regexZiregex�gtZgte�ltZlte�
startswith�endswith�istartswith�	iendswithzCREPLACE(REPLACE(REPLACE({}, '\\', '\\\\'), '%%', '\%%'), '_', '\_')z"LIKE BINARY CONCAT('%%', {}, '%%')zLIKE CONCAT('%%', {}, '%%')zLIKE BINARY CONCAT({}, '%%')zLIKE CONCAT({}, '%%')zLIKE BINARY CONCAT('%%', {})zLIKE CONCAT('%%', {}))rmrnrrrtrsruN�isolation_level>zread uncommittedzread committedzrepeatable readZserializable)r=�kwargsr*csnt�j|i|��|j�d�}|rZ|�dt�|_|�dt�}t|t�sPtd��|�|_	nt�|_	t|_dS)N�OPTIONS�use_pure�converter_classzXConverter class should be a subclass of mysql.connector.django.base.DjangoMySQLConverter)
�superr<�
settings_dict�getr2�	_use_pure�DjangoMySQLConverter�
issubclass�ProgrammingError�	converter)r;r=rw�optionsrz��	__class__r4r5r<Js�
�
zDatabaseWrapper.__init__rRcCs|�d�rdSt�dS)NZmysql_isF)rr�AttributeErrorrUr4r4r5rV^s
zDatabaseWrapper.__getattr__rWcCsfddddd�}|j}|dr(|d|d<|dr<|d|d<|d	rP|d	|d
<|d�d�rl|d|d
<n|dr�|d|d<|dr�t|d�|d<|�di��d�r�|dd|d<tj|d<tjjj	j
g|d<zv|d��}|�dd�}|�r:|�
�}||jv�r:d�dd�t|j�D��}td|�d|�d���||_|�|�Wnt�y`Yn0|S)N�utf8TF)�charsetZuse_unicodeZbufferedZconsume_results�USER�user�NAMEZdatabaseZPASSWORD�passwdZHOST�/Zunix_socket�hostZPORT�portrxZinit_commandZraise_on_warningsZclient_flagsrvz, css|]}d|�d�VqdS)�'Nr4)�.0�levelr4r4r5�	<genexpr>�sz8DatabaseWrapper.get_connection_params.<locals>.<genexpr>z%Invalid transaction isolation level 'z' specified.
Use one of z
, or None.)r|rr�intr}r�DEBUGrLrM�	constantsZ
ClientFlagZ
FOUND_ROWS�copy�pop�lower�isolation_levels�join�sortedrrv�update�KeyError)r;rwr|r�rvZvalid_levelsr4r4r5�get_connection_paramscsT�

�
���z%DatabaseWrapper.get_connection_paramsr&)�conn_paramsr*cCs&d|vrt|d<tjjfi|��}|S)Nrz)rrLrM�connect)r;r�Zcnxr4r4r5�get_new_connection�sz"DatabaseWrapper.get_new_connectioncCs�g}|jjr|�d�|jr2|�d|j�����|rn|��� }|�d�|��Wd�n1sd0Yd|jvr�z|�	|jd�Wn"t
y�|�|jd�Yn0dS)NzSET SQL_AUTO_IS_NULL = 0z(SET SESSION TRANSACTION ISOLATION LEVEL z; Z
AUTOCOMMIT)�featuresZis_sql_auto_is_null_enabled�appendrv�upperr8rKr�r|Zset_autocommitr��_set_autocommit)r;Zassignmentsr8r4r4r5�init_connection_state�s"
��
.
z%DatabaseWrapper.init_connection_state)�namer*cCs|j��}t|�Sr9)�
connectionr8r7)r;r�r8r4r4r5�
create_cursor�s
zDatabaseWrapper.create_cursorcCs&zt�|�Wnty Yn0dSr9)r�	_rollback�NotSupportedErrorrYr4r4r5r��szDatabaseWrapper._rollback)�
autocommitr*cCs2|j�||j_Wd�n1s$0YdSr9)Zwrap_database_errorsr�r�)r;r�r4r4r5r��szDatabaseWrapper._set_autocommitcCs6|���}|�d�Wd�n1s(0YdS)z�
        Disable foreign key checks, primarily for use in adding rows with
        forward references. Always return True to indicate constraint checks
        need to be re-enabled.
        zSET foreign_key_checks=0NT)r8rKr:r4r4r5�disable_constraint_checking�s
(z+DatabaseWrapper.disable_constraint_checkingcCsXd|j|_}z<|���}|�d�Wd�n1s80YW||_n||_0dS)zM
        Re-enable foreign key checks after they have been disabled.
        FzSET foreign_key_checks=1N)�needs_rollbackr8rK)r;r�r8r4r4r5�enable_constraint_checking�s

*z*DatabaseWrapper.enable_constraint_checking)�table_namesr*c
Cs|����}|dur|j�|�}|D]�}|j�||�}|s:q"|j�||�}|D]�\}}}|�d|�d|�d|�d|�d|�d|�d|�d	|�d
��|��D]@}	td|�d|	d
�d|�d|�d|	d�d|�d|�d���q�qLq"Wd�n1s�0YdS)a]
        Check each table name in `table_names` for rows with invalid foreign
        key references. This method is intended to be used in conjunction with
        `disable_constraint_checking()` and `enable_constraint_checking()`, to
        determine if rows with invalid references were entered while constraint
        checks were off.
        Nz+
                        SELECT REFERRING.`z&`,
                        REFERRING.`z `
                        FROM `z2` as REFERRING
                        LEFT JOIN `zR` as REFERRED
                        ON (
                            REFERRING.`z*` =
                            REFERRED.`zE`
                        )
                        WHERE REFERRING.`z4` IS NOT NULL
                        AND REFERRED.`z"` IS NULL
                        zThe row in table 'z' with primary key 'rz' has an invalid foreign key: �.z contains a value 'rz.' that does not have a corresponding value in )r8�
introspectionr�Zget_primary_key_columnZget_key_columnsrKZfetchallr)
r;r�r8Z
table_nameZprimary_key_column_nameZkey_columnsZcolumn_nameZreferenced_table_nameZreferenced_column_nameZbad_rowr4r4r5�check_constraints�sh
���������	�
���������z!DatabaseWrapper.check_constraintscCs(z|j��Wnty"YdS0dS)NFT)r�Zping�ErrorrYr4r4r5�	is_usables
zDatabaseWrapper.is_usablecCsdS)z
Display name.ZMySQLr4r4r4r4r5�display_nameszDatabaseWrapper.display_namecCs|jjrdddd�}|SiS)z<Mapping of Field objects to their SQL for CHECK constraints.z`%(column)s` >= 0)rhrirj)r�Z!supports_column_check_constraints)r;r�r4r4r5�data_type_check_constraintss�z+DatabaseWrapper.data_type_check_constraintscCsp|���"}|�d�|��}Wd�n1s00Y|d|d|dt|d�t|d�t|d�d	�S)
zReturn MySQL server data.a2
                SELECT VERSION(),
                       @@sql_mode,
                       @@default_storage_engine,
                       @@sql_auto_is_null,
                       @@lower_case_table_names,
                       CONVERT_TZ('2001-01-01 01:00:00', 'UTC', 'UTC') IS NOT NULL
            Nrr����)�version�sql_modeZdefault_storage_engineZsql_auto_is_nullZlower_case_table_namesZhas_zoneinfo_database)�temporary_connectionrK�fetchonerc)r;r8�rowr4r4r5�mysql_server_data*s
�
&


�z!DatabaseWrapper.mysql_server_datacCsB|���&}|�d�|��dWd�S1s40YdS)�Return MySQL version.zSELECT VERSION()rN)r�rKr�r:r4r4r5�mysql_server_infoEs

z!DatabaseWrapper.mysql_server_info.cCsF|��}tjjfi|���}|��}Wd�n1s80Y|S)r�N)r�rLrMr�Zget_server_version)r;�config�connZserver_versionr4r4r5�
mysql_versionLs&zDatabaseWrapper.mysql_versioncCsT|���"}|�d�|��}Wd�n1s00Yt|rN|d�d�nd�S)zReturn SQL mode.zSELECT @@sql_modeNr�,r4)r8rKr��set�split)r;r8r�r4r4r5r�Ts

&zDatabaseWrapper.sql_modecCs
|j}|S)z1Return True if pure Python version is being used.)r~)r;Zansr4r4r5ry\szDatabaseWrapper.use_pure)N)N)Ar[r\r]r^�vendor�
data_typesZ_limited_data_types�	operatorsZpattern_escZpattern_opsrvr
r`�__annotations__r�rLrMZDatabaser$ZSchemaEditorClassrZclient_classr Zcreation_classr!Zfeatures_classr"Zintrospection_classr#Z	ops_classr%Zvalidation_classrr<rcrVrr�rrr�r�r7r�r�r�r�r�r	r�r�rr_r�r�r�r�r
r�r�rr��propertyry�
__classcell__r4r4r�r5ra�s�
�$
��	6

�	

2rac@s�eZdZdZedeeeed�dd��Z	edeeee
d�dd��Zee
eefd�d	d
�Zee
eefd�dd�Zeed�d
d�ZdS)rzCustom converter for Django.N)r)�dscr*cCst�|�d��S)zXReturn MySQL TIME data type as datetime.time()

        Returns datetime.time()
        zutf-8)rZ
parse_time�decode�r)r�r4r4r5�_time_to_pythonhsz$DjangoMySQLConverter._time_to_pythoncCs|rt�|�SdS)aoConnector/Python always returns naive datetime.datetime

        Connector/Python always returns naive timestamps since MySQL has
        no time zone support.

        - A naive datetime is a datetime that doesn't know its own timezone.

        Django needs a non-naive datetime, but in this method we don't need
        to make a datetime value time zone aware since Django itself at some
        point will make it aware (at least in versions 3.2.16 and 4.1.2) when
        USE_TZ=True. This may change in a future release, we need to keep an
        eye on this behaviour.

        Returns datetime.datetime()
        N)r�_datetime_to_pythonr�r4r4r5r�psz(DjangoMySQLConverter._datetime_to_pythonr(cCs
|�|�Sr9�Z
_str_to_mysql�r;r)r4r4r5�_safestring_to_mysql�sz)DjangoMySQLConverter._safestring_to_mysqlcCs
|�|�Sr9r�r�r4r4r5�_safetext_to_mysql�sz'DjangoMySQLConverter._safetext_to_mysqlcCs
|�|�Sr9)Z_bytes_to_mysqlr�r4r4r5�_safebytes_to_mysql�sz(DjangoMySQLConverter._safebytes_to_mysql)N)N)r[r\r]r^r_�bytesrr
rr�rr�r`rrr�r�r�r4r4r4r5rcsr)Jr^r,rr�typingrrrrrr	r
rrr
rZdjango.confrZdjango.core.exceptionsrZ	django.dbrZdjango.db.backends.base.baserZdjango.utilsrrZdjango.utils.functionalrZmysql.connector.typesrZmysql.connectorrLZmysql.connector.conversionrZmysql.connector.custom_typesrZmysql.connector.poolingrrrr�ImportError�errZ_mysql_connectorrr2�clientrZcreationr r�r!r�r"�
operationsr#Zschemar$Z
validationr%rMr�Z
DatabaseErrorr�rNr�Zmysql.connector.abstractsr&r'r6r7rarr4r4r4r5�<module>sX
4&
`