� =��g$3��(�dZddlZddlZddlZddlZddlZddlmZddlm Z  ddl m Z ddl m Z ddl m Z n#e$r dxZ xZ Z YnwxYw ddlmZn #e$rYnwxYwdd lmZdd lmZdd lmZejd ��Zd �ZGd�de��Zedd��ZGd�de��Zd�ZGd�de��ZGd�dee��ZGd�de��Z Gd�de e��Z! ddl"m#Z#Gd�de e#��Z$n #e$rdZ$YnwxYw dd l%m&Z&Gd!�d"ee&��Z'n #e$rdZ'YnwxYwGd#�d$e��Z(Gd%�d&e(e��Z) dd'l*m+Z+Gd(�d)e(e+��Z,n #e$rdZ,YnwxYw dd*l*m-Z-Gd+�d,e(e-��Z.dS#e$rdZ.YdSwxYw)-aG Lightweight connection pooling for peewee. In a multi-threaded application, up to `max_connections` will be opened. Each thread (or, if using gevent, greenlet) will have it's own connection. In a single-threaded application, only one connection will be created. It will be continually recycled until either it exceeds the stale timeout or is closed explicitly (using `.manual_close()`). By default, all your application needs to do is ensure that connections are closed when you are finished with them, and they will be returned to the pool. For web applications, this typically means that at the beginning of a request, you will open a connection, and when you return a response, you will close the connection. Simple Postgres pool example code: # Use the special postgresql extensions. from playhouse.pool import PooledPostgresqlExtDatabase db = PooledPostgresqlExtDatabase( 'my_app', max_connections=32, stale_timeout=300, # 5 minutes. user='postgres') class BaseModel(Model): class Meta: database = db That's it! �N)� namedtuple)�chain)�TRANSACTION_STATUS_IDLE)�TRANSACTION_STATUS_INERROR)�TRANSACTION_STATUS_UNKNOWN)�TransactionStatus)� MySQLDatabase)�PostgresqlDatabase)�SqliteDatabasez peewee.poolc�`�|�+t|ttf��st|��S|S�N)� isinstance�int�float)�vals �^/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/playhouse/pool.py�make_intr>s)�� ��z�#��U�|�<�<���3�x�x�� �J�c��eZdZdS)�MaxConnectionsExceededN��__name__� __module__� __qualname__�rrrrDs�������rr�PoolConnection)� timestamp� connection� checked_outc��eZdZd�ZdS)� _sentinelc��dS�NTr)�self�others r�__lt__z_sentinel.__lt__Ks���trN)rrrr&rrrr!r!Js#����������rr!c�F��tj����fd���}|S)Nc�^��|j5�|g|�Ri|��cddd��S#1swxYwYdSr )� _pool_lock)r$�args�kwargs�fns �r�innerzlocked.<locals>.innerPs���� �_� -� -��2�d�,�T�,�,�,�V�,�,� -� -� -� -� -� -� -� -� -� -� -� -���� -� -� -� -� -� -s � "�&�&)� functools�wraps)r,r-s` r�lockedr0Os8����_�R���-�-�-�-���-� �Lrc����eZdZ d�fd� Z d�fd� Zd�fd� Ze�fd���Zd�Zd �Z d �Z ed�fd � ��Z ed ���Z ed ���Z edd���Zed���Z�xZS)�PooledDatabase�Nc �d��t|��|_t|��|_t|��|_|jdkrt d��|_t j��|_g|_i|_ t|_ tt|��j|fi|��dS�Nr�inf)r�_max_connections�_stale_timeout� _wait_timeoutr� threading�RLockr)� _connections�_in_use�id�conn_key�superr2�__init__)r$�database�max_connections� stale_timeout�timeoutr+� __class__s �rrAzPooledDatabase.__init__Xs���� (�� 9� 9���&�}�5�5���%�g�.�.��� � �� "� "�!&�u���D� �#�/�+�+������ �� � �� �,��n�d�#�#�,�X�@�@��@�@�@�@�@rc ���tt|��j|fi|��|�t|��|_|�t|��|_|�5t|��|_|jdkrtd��|_dSdSdSr5)r@r2�initrr7r8r9r)r$rBrCrDrE�connect_kwargsrFs �rrHzPooledDatabase.initrs����(��n�d�#�#�(��D�D�^�D�D�D� � &�$,�_�$=�$=�D� !� � $�"*�=�"9�"9�D� � � �!)�'�!2�!2�D� ��!�Q�&�&�%*�5�\�\��"�"�"� � �&�&rFc���|js(tt|���|��St j��|jz}|t j��krf tt|���|��}|S#t $rt jd��YnwxYw|t j��k�ft d���)Ng�������?z:Max connections exceeded, timed out attempting to connect.)r9r@r2�connect�timer�sleep)r$� reuse_if_open�expires�retrFs �rrKzPooledDatabase.connect~s�����!� F����.�.�6�6�}�E�E� E��)�+�+�� 2�2���� � � �#�#� ��N�D�1�1�9�9�-�H�H��� ��*� � � �� �3������ ������ � � �#�#�%�&>�?�?� ?s�$(B�B/�.B/c�t�� tj|j��\}}}|}|�|��}|�|��r t �d|��dx}}n�|jrK|�|��r6t �d|��|� |d��dx}}n/n/#t$r!dx}}t �d��YnwxYw��|��|j r,t|j ��|j krtd���tt |�����}t%j��}|�|��}t �d|��t'||t%j����|j |<|S)NTzConnection %s was closed.z!Connection %s was stale, closing.z No connection available in pool.zExceeded maximum connections.zCreated new connection %s.)�heapq�heappopr<r?� _is_closed�logger�debugr8� _is_stale�_close� IndexErrorr7�lenr=rr@r2�_connectrLr)r$�ts�_�c_conn�conn�keyrFs �rr[zPooledDatabase._connect�s���� � � %� �d�.?� @� @� ��A�v����m�m�D�)�)�� �?�?�4�(�(�� �L�L�!<�c�B�B�B� $�$�B����(� �T�^�^�B�-?�-?� � �L�L�!D�c�J�J�J��K�K��d�+�+�+� $�$�B�����-� � � � � ��T�� � �?�@�@�@��� ����  �< �<��$� N��� �%�%��)>�>�>�,�-L�M�M�M����.�.�7�7�9�9�D�����B��-�-��%�%�C� �L�L�5�s� ;� ;� ;�*�2�t�T�Y�[�[�A�A�� �S��� s�4C�(C+�*C+c�@�tj��|z |jkSr )rLr8)r$rs rrWzPooledDatabase._is_stale�s��� � � �i�'�4�+>�>�>rc��dS)NFr�r$r_s rrTzPooledDatabase._is_closed�s���urc��dSr#rrcs r� _can_reusezPooledDatabase._can_reuse�s���trc���|�|��}|r*tt|���|��dS||jvr�|j�|��}|jr_|�|j��rEt� d|��tt|���|��dS|� |��rKt� d|��tj |j|jt��|f��dSt� d|��dSdS)NzClosing stale connection %s.zReturning %s to pool.z Closed %s.)r?r@r2rXr=�popr8rWrrUrVrerR�heappushr<r!)r$r_� close_connr`� pool_connrFs �rrXzPooledDatabase._close�sB����m�m�D�!�!�� � 0� �.�$� '� '� .� .�t� 4� 4� 4� 4� 4� �D�L� � �� �(�(��-�-�I��"� 0�t�~�~�i�6I�'J�'J� 0�� � �;�S�A�A�A��n�d�+�+�2�2�4�8�8�8�8�8�����&�&� 0�� � �4�c�:�:�:���t�0� )� 3�Y�[�[�$�G�I�I�I�I�I�� � �\�3�/�/�/�/�/�!� rc� �|���rdS|���}|j�|�|��d��|���|�|d���dS)zS Close the underlying connection without returning it to the pool. FNT�ri)� is_closedrr=rgr?�closerXrcs r� manual_closezPooledDatabase.manual_close�s{�� �>�>� � � ��5���� � �� � ������t�,�,�d�3�3�3� � � � � � � � � �D�T� �*�*�*�*�*rc�^�|jD]\}}}|�|d����g|_dS�NTrl)r<rX)r$r]r_s r� close_idlezPooledDatabase.close_idle�sC���+� /� /�J�A�q�$� �K�K���K� .� .� .� .�����r�Xc���i}tj��|z }d}|j���D]7\}}|j|kr"|�|jd���|dz }�2|||<�8||_|S)NrTrl�)rLr=�itemsrrXr)r$�age�in_use�cutoff�nr`rjs r� close_stalezPooledDatabase.close_stale�s���������s�"�� ��"�l�0�0�2�2� (� (�N�C���$�v�-�-�� � �I�0�T� �B�B�B��Q����'��s� � ��� ��rc��|���|jD]\}}}|�|d����|j���D]}|�|jd����g|_i|_dSrq)rnr<rXr=�valuesr)r$r]r_rjs r� close_allzPooledDatabase.close_alls��� � � � � � ��+� /� /�J�A�q�$� �K�K���K� .� .� .� .���,�,�.�.� ?� ?�I� �K�K� �,��K� >� >� >� >������ � � r)r3NN)NNN�F)rs)rrrrArHrKr0r[rWrTrerXrorrr{r~� __classcell__)rFs@rr2r2Ws}�������CG��A�A�A�A�A�A�4BF�� 2� 2� 2� 2� 2� 2� ?� ?� ?� ?� ?� ?� �)�)�)�)� �V�)�V?�?�?� ������ �0�0�0�0�0� �V�0�  �+�+� �V�+�$ ��� �V��  � � � � �V� � � � � �V� � � � � rr2c��eZdZd�ZdS)�PooledMySQLDatabasec�X�|jddkrd}nd} |j|�dS#YdSxYw)Nr�rrFT)�server_version�ping)r$r_r*s rrTzPooledMySQLDatabase._is_closedsL�� � �q� !�Q� &� &��D�D��D� � �D�I�t� � ��5�� ��4�4���s� $�)N�rrrrTrrrr�r� s#������ � � � � rr�c��eZdZd�Zd�ZdS)�_PooledPostgresqlDatabasec��|jrdS|���}|tkrdS|tkr|���dS�NTF)�closed�get_transaction_statusrr�rollback�r$r_� txn_statuss rrTz$_PooledPostgresqlDatabase._is_closedsQ�� �;� ��4��0�0�2�2� � �3� 3� 3��4� �2� 2� 2� �M�M�O�O�O��urc���|���}|tkrdS|tkr|���n|tkr|���dS�NFT)r�rr�resetrr�r�s rrez$_PooledPostgresqlDatabase._can_reuse's_���0�0�2�2� � �3� 3� 3��5� �5� 5� 5� �J�J�L�L�L�L� �2� 2� 2� �M�M�O�O�O��trN�rrrrTrerrrr�r�s2������ � � � � � � � rr�c��eZdZdS)�PooledPostgresqlDatabaseNrrrrr�r�4��������Drr�)�PostgresqlExtDatabasec��eZdZdS)�PooledPostgresqlExtDatabaseNrrrrr�r�:������� �rr�)�Psycopg3Databasec��eZdZd�Zd�ZdS)�PooledPsycopg3Databasec��|jrdS|jj}|tjkrdS|tjkr|���dSr�)r��pgconn�transaction_statusr�UNKNOWN�IDLEr�r�s rrTz!PooledPsycopg3Database._is_closedDsP���{� ��t���7�J��.�6�6�6��t��0�5�5�5�� � �����5rc���|jj}|tjkrdS|tjkr|���n$|tjkr|���dSr�)r�r�rr��INERRORr�r�r�r�s rrez!PooledPsycopg3Database._can_reuseOsa����7�J��.�6�6�6��u��0�8�8�8�� � � � � � ��0�5�5�5�� � �����4rNr�rrrr�r�Cs2������ � � � � � � � rr�c��eZdZd�ZdS)�_PooledSqliteDatabasec�&� |jdS#YdSxYwr�)� total_changesrcs rrTz _PooledSqliteDatabase._is_closed`s'�� � � � ��5�� ��4�4���s� �Nr�rrrr�r�_s#����������rr�c��eZdZdS)�PooledSqliteDatabaseNrrrrr�r�hr�rr�)�SqliteExtDatabasec��eZdZdS)�PooledSqliteExtDatabaseNrrrrr�r�nr�rr�)�CSqliteExtDatabasec��eZdZdS)�PooledCSqliteExtDatabaseNrrrrr�r�vr�rr�)/�__doc__r.rR�loggingr:rL� collectionsr� itertoolsr�psycopg2.extensionsrrr� ImportError� psycopg.pqr�peeweer r r � getLoggerrUr� ValueErrorrr�objectr!r0r2r�r�r��playhouse.postgres_extr�r��playhouse.psycopg3_extr�r�r�r��playhouse.sqlite_extr�r�r�r�rrr�<module>r�s��� � �B���� � � � ��������� � � � �"�"�"�"�"�"�������.�;�;�;�;�;�;�>�>�>�>�>�>�>�>�>�>�>�>�>���.�.�.�*.�.��.� &� &� &� &�.���� �,�,�,�,�,�,�,��� � � ��D� ����!� � � � � �%�%�%�%�%�%�!�!�!�!�!�!� �� �=� )� )����� /�.�.�.�.�Z�.�.�.���,�/>�?�?����������� ���s�s�s�s�s�V�s�s�s�l � � � � �.�-� � � ����������2 � � � � �8�:L� � � �'�<�<�<�<�<�<� � � � � �&?�AV� � � � ���'�'�'�"&����'����"�7�7�7�7�7�7�������1A������0�"�"�"�!����"���������N���� � � � � �0�.� � � �#�6�6�6�6�6�6� � � � � �"7�9J� � � � ���#�#�#�"����#����$�7�7�7�7�7�7� � � � � �#8�:L� � � � � ���$�$�$�#�����$���si�7� A�A� A�A�A�&C<�<D�D� D � D*�)D*� E!�!E+�*E+�/F�F�F
Memory