From 306c30a0c79f259770dfca25b26a1110d2897bac Mon Sep 17 00:00:00 2001 From: Ali Hamdan Date: Sat, 28 Oct 2023 16:09:39 +0200 Subject: [PATCH] psycopg2: Fix missing `Protocol` base class in file protocols (#10943) This is an error I introduced in #10630 because I didn't know protocols need to be explicitly inherited from in other protocol subclasses. The added test shows the change. Basically these protocols were unusable. --- stubs/psycopg2/@tests/test_cases/check_extensions.py | 6 ++++++ stubs/psycopg2/psycopg2/_psycopg.pyi | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/stubs/psycopg2/@tests/test_cases/check_extensions.py b/stubs/psycopg2/@tests/test_cases/check_extensions.py index 3252e9ace..d8a2fb8d1 100644 --- a/stubs/psycopg2/@tests/test_cases/check_extensions.py +++ b/stubs/psycopg2/@tests/test_cases/check_extensions.py @@ -1,5 +1,6 @@ from __future__ import annotations +import io from typing_extensions import assert_type import psycopg2.extensions @@ -54,3 +55,8 @@ assert_type(dconn.cursor("test-dcur"), psycopg2.extras.DictCursor) assert_type(dconn.cursor("test-dcur", None), psycopg2.extras.DictCursor) assert_type(dconn.cursor("test-dcur", cursor_factory=None), psycopg2.extras.DictCursor) assert_type(dconn.cursor("test-dcur", cursor_factory=MyCursor), MyCursor) + +# file protocols +# -------------- +cur = conn.cursor() +cur.copy_from(io.StringIO(), "table") diff --git a/stubs/psycopg2/psycopg2/_psycopg.pyi b/stubs/psycopg2/psycopg2/_psycopg.pyi index 1902f3fbb..45cdead90 100644 --- a/stubs/psycopg2/psycopg2/_psycopg.pyi +++ b/stubs/psycopg2/psycopg2/_psycopg.pyi @@ -83,8 +83,8 @@ threadsafety: int __libpq_version__: int -class _SupportsReadAndReadline(SupportsRead[str], SupportsReadline[str]): ... -class _SupportsReadAndReadlineAndWrite(_SupportsReadAndReadline, SupportsWrite[str]): ... +class _SupportsReadAndReadline(SupportsRead[str], SupportsReadline[str], Protocol): ... +class _SupportsReadAndReadlineAndWrite(_SupportsReadAndReadline, SupportsWrite[str], Protocol): ... class cursor: arraysize: int