1515import asyncio
1616from functools import wraps
1717from itertools import count
18- from typing import Any , Callable , Coroutine , Dict , SupportsInt , TypeVar
18+ from typing import Any , Callable , Coroutine , Dict , List , Optional , SupportsInt , Tuple , TypeVar
1919
2020import mysql .connector
2121import sqlparse
3737 TransactionManagementError ,
3838)
3939
40- from aws_advanced_python_wrapper .connection_provider import ConnectionProviderManager
40+ from aws_advanced_python_wrapper .connection_provider import ConnectionProviderManager , ConnectionProvider
4141from aws_advanced_python_wrapper .errors import AwsWrapperError , FailoverError
4242from aws_advanced_python_wrapper .hostinfo import HostInfo
4343from aws_advanced_python_wrapper .tortoise .backend .base .client import (
@@ -94,7 +94,7 @@ class AwsMySQLClient(BaseDBAsyncClient):
9494 support_for_posix_regex_queries = True ,
9595 support_json_attributes = True ,
9696 )
97- _pool_initialized = False
97+ _provider : Optional [ ConnectionProvider ] = None
9898 _pool_init_class_lock = asyncio .Lock ()
9999
100100 def __init__ (
@@ -121,24 +121,19 @@ def __init__(
121121 # Extract MySQL-specific settings
122122 self .storage_engine = self .extra .pop ("storage_engine" , "innodb" )
123123 self .charset = self .extra .pop ("charset" , "utf8mb4" )
124- self .pool_minsize = int (self .extra .pop ("minsize" , 1 ))
125- self .pool_maxsize = int (self .extra .pop ("maxsize" , 5 ))
126124
127125 # Remove Tortoise-specific parameters
128126 self .extra .pop ("connection_name" , None )
129127 self .extra .pop ("fetch_inserted" , None )
130- self .extra .pop ("db" , None )
131- self .extra .pop ("autocommit" , None ) # We need this to be true
128+ self .extra .pop ("autocommit" , None )
132129 self .extra .setdefault ("sql_mode" , "STRICT_TRANS_TABLES" )
133130
134131 # Initialize connection templates
135132 self ._init_connection_templates ()
136133
137134 # Initialize state
138- self ._template = {}
139- self ._connection = None
140- self ._pool : SqlAlchemyTortoisePooledConnectionProvider = None
141- self ._pool_init_lock = asyncio .Lock ()
135+ self ._template : Dict [str , Any ] = {}
136+ self ._connection : Optional [Any ] = None
142137
143138 def _init_connection_templates (self ) -> None :
144139 """Initialize connection templates for with/without database."""
@@ -154,39 +149,12 @@ def _init_connection_templates(self) -> None:
154149 self ._template_with_db = {** base_template , "database" : self .database }
155150 self ._template_no_db = {** base_template , "database" : None }
156151
157- # Pool Management
158- def _configure_pool (self , host_info : HostInfo , props : Dict [str , Any ]) -> Dict [str , Any ]:
159- """Configure connection pool settings."""
160- return {"pool_size" : self .pool_maxsize , "max_overflow" : - 1 }
161-
162- def _get_pool_key (self , host_info : HostInfo , props : Dict [str , Any ]) -> str :
163- """Generate unique pool key for connection pooling."""
164- url = host_info .url
165- user = props ["user" ]
166- db = props ["database" ]
167- return f"{ url } { user } { db } { self .connection_name } "
168-
169- async def _init_pool_if_needed (self ) -> None :
170- """Initialize connection pool only once across all instances."""
171- if not AwsMySQLClient ._pool_initialized :
172- async with AwsMySQLClient ._pool_init_class_lock :
173- if not AwsMySQLClient ._pool_initialized :
174- self ._pool = SqlAlchemyTortoisePooledConnectionProvider (
175- pool_configurator = self ._configure_pool ,
176- pool_mapping = self ._get_pool_key ,
177- )
178- ConnectionProviderManager .set_connection_provider (self ._pool )
179- AwsMySQLClient ._pool_initialized = True
180-
181152 # Connection Management
182153 async def create_connection (self , with_db : bool ) -> None :
183154 """Initialize connection pool and configure database settings."""
184155 # Validate charset
185156 if self .charset .lower () not in [cs [0 ] for cs in MYSQL_CHARACTER_SETS if cs is not None ]:
186157 raise DBConnectionError (f"Unknown character set: { self .charset } " )
187-
188- # Initialize connection pool only once
189- await self ._init_pool_if_needed ()
190158
191159 # Set transaction support based on storage engine
192160 if self .storage_engine .lower () != "innodb" :
@@ -195,8 +163,6 @@ async def create_connection(self, with_db: bool) -> None:
195163 # Set template based on database requirement
196164 self ._template = self ._template_with_db if with_db else self ._template_no_db
197165
198- logger .debug (f"Created connection pool { self ._pool } with params: { self ._template } " )
199-
200166 async def close (self ) -> None :
201167 """Close connections - AWS wrapper handles cleanup internally."""
202168 pass
@@ -205,10 +171,10 @@ def acquire_connection(self):
205171 """Acquire a connection from the pool."""
206172 return self ._acquire_connection (with_db = True )
207173
208- def _acquire_connection (self , with_db : bool ):
174+ def _acquire_connection (self , with_db : bool ) -> TortoiseAwsClientConnectionWrapper :
209175 """Create connection wrapper for specified database mode."""
210176 return TortoiseAwsClientConnectionWrapper (
211- self , self . _pool_init_lock , mysql .connector .Connect , with_db = with_db
177+ self , mysql .connector .Connect , with_db = with_db
212178 )
213179
214180 # Database Operations
@@ -226,7 +192,7 @@ async def db_delete(self) -> None:
226192
227193 # Query Execution Methods
228194 @translate_exceptions
229- async def execute_insert (self , query : str , values : list ) -> int :
195+ async def execute_insert (self , query : str , values : List [ Any ] ) -> int :
230196 """Execute an INSERT query and return the last inserted row ID."""
231197 async with self .acquire_connection () as connection :
232198 logger .debug (f"{ query } : { values } " )
@@ -235,7 +201,7 @@ async def execute_insert(self, query: str, values: list) -> int:
235201 return cursor .lastrowid
236202
237203 @translate_exceptions
238- async def execute_many (self , query : str , values : list [ list ]) -> None :
204+ async def execute_many (self , query : str , values : List [ List [ Any ] ]) -> None :
239205 """Execute a query with multiple parameter sets."""
240206 async with self .acquire_connection () as connection :
241207 logger .debug (f"{ query } : { values } " )
@@ -245,7 +211,7 @@ async def execute_many(self, query: str, values: list[list]) -> None:
245211 else :
246212 await cursor .executemany (query , values )
247213
248- async def _execute_many_with_transaction (self , cursor , connection , query : str , values : list [ list ]) -> None :
214+ async def _execute_many_with_transaction (self , cursor : Any , connection : Any , query : str , values : List [ List [ Any ] ]) -> None :
249215 """Execute many queries within a transaction."""
250216 try :
251217 await connection .set_autocommit (False )
@@ -260,7 +226,7 @@ async def _execute_many_with_transaction(self, cursor, connection, query: str, v
260226 await connection .set_autocommit (True )
261227
262228 @translate_exceptions
263- async def execute_query (self , query : str , values : list | None = None ) -> tuple [int , list [ dict ]]:
229+ async def execute_query (self , query : str , values : Optional [ List [ Any ]] = None ) -> Tuple [int , List [ Dict [ str , Any ] ]]:
264230 """Execute a query and return row count and results."""
265231 async with self .acquire_connection () as connection :
266232 logger .debug (f"{ query } : { values } " )
@@ -272,7 +238,7 @@ async def execute_query(self, query: str, values: list | None = None) -> tuple[i
272238 return cursor .rowcount , [dict (zip (fields , row )) for row in rows ]
273239 return cursor .rowcount , []
274240
275- async def execute_query_dict (self , query : str , values : list | None = None ) -> list [ dict ]:
241+ async def execute_query_dict (self , query : str , values : Optional [ List [ Any ]] = None ) -> List [ Dict [ str , Any ] ]:
276242 """Execute a query and return only the results as dictionaries."""
277243 return (await self .execute_query (query , values ))[1 ]
278244
@@ -297,7 +263,7 @@ async def _execute_script(self, query: str, with_db: bool) -> None:
297263 # Transaction Support
298264 def _in_transaction (self ) -> TransactionContext :
299265 """Create a new transaction context."""
300- return TortoiseAwsClientTransactionContext (TransactionWrapper (self ), self . _pool_init_lock )
266+ return TortoiseAwsClientTransactionContext (TransactionWrapper (self ))
301267
302268
303269class TransactionWrapper (AwsMySQLClient , TransactionalDBClient ):
@@ -307,7 +273,7 @@ def __init__(self, connection: AwsMySQLClient) -> None:
307273 self .connection_name = connection .connection_name
308274 self ._connection = connection ._connection
309275 self ._lock = asyncio .Lock ()
310- self ._savepoint : str | None = None
276+ self ._savepoint : Optional [ str ] = None
311277 self ._finalized : bool = False
312278 self ._parent = connection
313279
@@ -373,14 +339,14 @@ async def release_savepoint(self):
373339 self ._finalized = True
374340
375341 @translate_exceptions
376- async def execute_many (self , query : str , values : list [ list ]) -> None :
342+ async def execute_many (self , query : str , values : List [ List [ Any ] ]) -> None :
377343 """Execute many queries without autocommit handling (already in transaction)."""
378344 async with self .acquire_connection () as connection :
379345 logger .debug (f"{ query } : { values } " )
380346 async with connection .cursor () as cursor :
381347 await cursor .executemany (query , values )
382348
383349
384- def _gen_savepoint_name (_c = count ()) -> str :
350+ def _gen_savepoint_name (_c : count = count ()) -> str :
385351 """Generate a unique savepoint name."""
386352 return f"tortoise_savepoint_{ next (_c )} "
0 commit comments