aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gn_libs/protocols/__init__.py1
-rw-r--r--gn_libs/protocols/db.py35
2 files changed, 36 insertions, 0 deletions
diff --git a/gn_libs/protocols/__init__.py b/gn_libs/protocols/__init__.py
new file mode 100644
index 0000000..e71f1ce
--- /dev/null
+++ b/gn_libs/protocols/__init__.py
@@ -0,0 +1 @@
+from .db import DbCursor, DbConnection
diff --git a/gn_libs/protocols/db.py b/gn_libs/protocols/db.py
new file mode 100644
index 0000000..b365f8b
--- /dev/null
+++ b/gn_libs/protocols/db.py
@@ -0,0 +1,35 @@
+"""Generic database protocols."""
+from typing import Any, Protocol
+
+
+class DbCursor(Protocol):
+ """Type annotation for a generic database cursor object."""
+ def execute(self, *args, **kwargs) -> Any:
+ """Execute a single query"""
+
+ def executemany(self, *args, **kwargs) -> Any:
+ """
+ Execute parameterized SQL statement sql against all parameter sequences
+ or mappings found in the sequence parameters.
+ """
+
+ def fetchone(self, *args, **kwargs):
+ """Fetch single result if present, or `None`."""
+
+ def fetchmany(self, *args, **kwargs):
+ """Fetch many results if present or `None`."""
+
+ def fetchall(self, *args, **kwargs):
+ """Fetch all results if present or `None`."""
+
+
+class DbConnection(Protocol):
+ """Type annotation for a generic database connection object."""
+ def cursor(self) -> Any:
+ """A cursor object"""
+
+ def commit(self) -> Any:
+ """Commit the transaction."""
+
+ def rollback(self) -> Any:
+ """Rollback the transaction."""