]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
feat(copy): add 'writer' parameter to Cursor.copy()
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 11 Jun 2022 14:56:13 +0000 (16:56 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 19 Jul 2022 14:09:53 +0000 (15:09 +0100)
psycopg/psycopg/cursor.py

index 422af8a12f7d5ab9597e69de1c20952ec4062937..bab46c2d9d09f435dbdfcdb13d48863dcaaf7915 100644 (file)
@@ -15,7 +15,7 @@ from . import pq
 from . import adapt
 from . import errors as e
 from .abc import ConnectionType, Query, Params, PQGen
-from .copy import Copy
+from .copy import Copy, Writer as CopyWriter
 from .rows import Row, RowMaker, RowFactory
 from ._column import Column
 from ._cmodule import _psycopg
@@ -873,7 +873,13 @@ class Cursor(BaseCursor["Connection[Any]", Row]):
         self._scroll(value, mode)
 
     @contextmanager
-    def copy(self, statement: Query, params: Optional[Params] = None) -> Iterator[Copy]:
+    def copy(
+        self,
+        statement: Query,
+        params: Optional[Params] = None,
+        *,
+        writer: Optional[CopyWriter[Any]] = None,
+    ) -> Iterator[Copy]:
         """
         Initiate a :sql:`COPY` operation and return an object to manage it.
 
@@ -883,7 +889,7 @@ class Cursor(BaseCursor["Connection[Any]", Row]):
             with self._conn.lock:
                 self._conn.wait(self._start_copy_gen(statement, params))
 
-            with Copy(self) as copy:
+            with Copy(self, writer=writer) as copy:
                 yield copy
         except e.Error as ex:
             raise ex.with_traceback(None)