cloud-sql-python-connector icon indicating copy to clipboard operation
cloud-sql-python-connector copied to clipboard

Consider `AsyncConnector` object for async interface

Open jackwotherspoon opened this issue 1 year ago • 0 comments

Feature Description

Currently the Connector object is the main entrypoint for both synchronous and async driver implementations.

The synchronous drivers are called via connector.connect while the async drivers via connector.connect_async with the synchronous version basically just being a simple wrapper around the async method.

This issue is to keep an eye on considering moving the async drivers to a separate object and entrypoint of AsyncConnector.

This would allow for clear distinctions between the two and give flexibility in the interfaces moving forward.

Sample code

# current implementation
async def main():
    # get current running event loop to be used with Connector
    loop = asyncio.get_running_loop()
    # intialize Connector object as async context manager
    async with Connector(loop=loop) as connector:
        # create connection to Cloud SQL database
        conn: asyncpg.Connection = await connector.connect_async(
            "project:region:instance",  # Cloud SQL instance connection name
            "asyncpg",
            user="my-user",
            password="my-password",
            db="my-db-name"
            # ... additional database driver args
        )

# new AsyncConnector object
async def main():
    async with AsyncConnector() as connector:
        # create connection to Cloud SQL database
        conn: asyncpg.Connection = await connector.connect(
            "project:region:instance",  # Cloud SQL instance connection name
            "asyncpg",
            user="my-user",
            password="my-password",
            db="my-db-name"
            # ... additional database driver args
        )

Alternatives Considered

No response

Additional Details

No response

jackwotherspoon avatar Mar 30 '23 20:03 jackwotherspoon