o
    ïÅ[h/  ã                   @   sX   d Z ddlZddlZddlmZ ddlmZ ddlmZ dd	„ Z	G d
d„ deƒZ
e
ZdS )a}  
.. dialect:: mysql+gaerdbms
    :name: Google Cloud SQL
    :dbapi: rdbms
    :connectstring: mysql+gaerdbms:///<dbname>?instance=<instancename>
    :url: https://developers.google.com/appengine/docs/python/cloud-sql/developers-guide

    This dialect is based primarily on the :mod:`.mysql.mysqldb` dialect with
    minimal changes.

    .. deprecated:: 1.0 This dialect is **no longer necessary** for
        Google Cloud SQL; the MySQLdb dialect can be used directly.
        Cloud SQL now recommends creating connections via the
        mysql dialect using the URL format

        ``mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>``


Pooling
-------

Google App Engine connections appear to be randomly recycled,
so the dialect does not pool connections.  The :class:`.NullPool`
implementation is installed within the :class:`_engine.Engine` by
default.

é    N)Úwarn_deprecatedé   )ÚMySQLDialect_mysqldbé   ©ÚNullPoolc                   C   s   t j dd¡ d¡S )NÚSERVER_SOFTWAREÚ zDevelopment/)ÚosÚenvironÚgetÚ
startswith© r   r   ú‰/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/gaerdbms.pyÚ_is_dev_environment+   s   r   c                   @   s4   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	S )
ÚMySQLDialect_gaerdbmsc                 C   sV   t dƒ ddlm} tƒ rddlm} |S |j d¡r#ddlm} |S ddlm	} |S )Nz»Google Cloud SQL now recommends creating connections via the MySQLdb dialect directly, using the URL format mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>r   )Úapiproxy_stub_map)Úrdbms_mysqldbZrdbms)Úrdbms_apiproxy)Úrdbms_googleapi)
r   Zgoogle.appengine.apir   r   r   ZapiproxyZGetStubZ!google.storage.speckle.python.apir   r   )Úclsr   r   r   r   r   r   r   Údbapi0   s   ÿzMySQLDialect_gaerdbms.dbapic                 C   s   t S )Nr   )r   Úurlr   r   r   Úget_pool_classO   s   z$MySQLDialect_gaerdbms.get_pool_classc                 C   s,   |  ¡ }tƒ sd|d< |jd |d< g |fS )Nr	   ZdsnÚinstance)Ztranslate_connect_argsr   Úquery)Úselfr   Úoptsr   r   r   Úcreate_connect_argsT   s
   z)MySQLDialect_gaerdbms.create_connect_argsc                 C   s@   t  d¡ t|ƒ¡}|r| d¡p| d¡nd }|rt|ƒS d S )Nz^(\d+)L?:|^\((\d+)L?,r   é   )ÚreÚcompileÚmatchÚstrÚgroupÚint)r   Ú	exceptionr"   Úcoder   r   r   Ú_extract_error_code]   s   € ÿz)MySQLDialect_gaerdbms._extract_error_codeN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   r(   r   r   r   r   r   /   s    

	r   )Ú__doc__r
   r    Zsqlalchemy.utilr   Zmysqldbr   Úpoolr   r   r   Údialectr   r   r   r   Ú<module>   s   7