Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(psycopg): support async iteration [backport 2.9] #10000

Merged
merged 2 commits into from
Aug 1, 2024

Commits on Jul 30, 2024

  1. fix(psycopg): support async iteration (#9940)

    Motivation:
    
    Previously, using async iteration with `psycopg` (`async for`) would
    throw an exception.
    
    Example:
    
    ```
    def connect_to_db():
        # db connection logic...
    
    async def testfunc():
        connectstr = get_conn_str()
        async with AsyncConnectionPool(
            conninfo=connectstr, min_size=4, max_size=30
        ) as async_pool:
            async with async_pool.connection() as conn:
                async with conn.cursor() as cur:
                    await cur.execute(
                        sql.SQL(
                            """
                            SELECT
                                *
                            FROM table1
                            LIMIT 5
                        """
                        )
                    )
                    async for row in cur:
                        print(row)
    ```
    
    Running `ddtrace-run python test.py` would return `TypeError: 'async
    for' requires an object with __aiter__ method, got
    Psycopg3TracedAsyncCursor`.
    
    This fix implements the `__aiter__` method for the `TracedAsyncCursor`
    parent class, and has `Psycopg3TracedAsyncCursor` inherit from it.
    
    ## Checklist
    - [x] PR author has checked that all the criteria below are met
    - The PR description includes an overview of the change
    - The PR description articulates the motivation for the change
    - The change includes tests OR the PR description describes a testing
    strategy
    - The PR description notes risks associated with the change, if any
    - Newly-added code is easy to change
    - The change follows the [library release note
    guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
    - The change includes or references documentation updates if necessary
    - Backport labels are set (if
    [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))
    
    ## Reviewer Checklist
    - [x] Reviewer has checked that all the criteria below are met
    - Title is accurate
    - All changes are related to the pull request's stated goal
    - Avoids breaking
    [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
    changes
    - Testing strategy adequately addresses listed risks
    - Newly-added code is easy to change
    - Release note makes sense to a user of the library
    - If necessary, author has acknowledged and discussed the performance
    implications of this PR as reported in the benchmarks PR comment
    - Backport labels are set in a manner that is consistent with the
    [release branch maintenance
    policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)
    
    ---------
    
    Co-authored-by: Munir Abdinur <[email protected]>
    (cherry picked from commit d51fa8d)
    quinna-h authored and github-actions[bot] committed Jul 30, 2024
    Configuration menu
    Copy the full SHA
    c83b27c View commit details
    Browse the repository at this point in the history

Commits on Aug 1, 2024

  1. Configuration menu
    Copy the full SHA
    880a6f0 View commit details
    Browse the repository at this point in the history