connect = generators.connect
execute = generators.execute
-NoticeCallback = Callable[[e.Diagnostic], None]
+NoticeHandler = Callable[[e.Diagnostic], None]
class BaseConnection:
self._autocommit = False
self.dumpers: proto.DumpersMap = {}
self.loaders: proto.LoadersMap = {}
- self._notice_callbacks: List[NoticeCallback] = []
+ self._notice_handlers: List[NoticeHandler] = []
# name of the postgres encoding (in bytes)
self._pgenc = b""
wself = ref(self)
- pgconn.notice_callback = partial(
- BaseConnection._notice_callback, wself
- )
+ pgconn.notice_handler = partial(BaseConnection._notice_handler, wself)
@property
def closed(self) -> bool:
else:
return "UTF8"
- def add_notice_callback(self, callback: NoticeCallback) -> None:
- self._notice_callbacks.append(callback)
+ def add_notice_handler(self, callback: NoticeHandler) -> None:
+ self._notice_handlers.append(callback)
- def remove_notice_callback(self, callback: NoticeCallback) -> None:
- self._notice_callbacks.remove(callback)
+ def remove_notice_handler(self, callback: NoticeHandler) -> None:
+ self._notice_handlers.remove(callback)
@staticmethod
- def _notice_callback(
+ def _notice_handler(
wself: "ReferenceType[BaseConnection]", res: pq.proto.PGresult
) -> None:
self = wself()
- if self is None or not self._notice_callback:
+ if self is None or not self._notice_handler:
return
diag = e.Diagnostic(res, self.codec.name)
- for cb in self._notice_callbacks:
+ for cb in self._notice_handlers:
try:
cb(diag)
except Exception as ex:
class PGconn:
__slots__ = (
"pgconn_ptr",
- "notice_callback",
+ "notice_handler",
"_notice_receiver",
"__weakref__",
)
def __init__(self, pgconn_ptr: impl.PGconn_struct):
self.pgconn_ptr: Optional[impl.PGconn_struct] = pgconn_ptr
- self.notice_callback: Optional[Callable[..., None]] = None
+ self.notice_handler: Optional[Callable[..., None]] = None
w = ref(self)
arg: Any, result_ptr: impl.PGresult_struct
) -> None:
pgconn = w()
- if pgconn is None or pgconn.notice_callback is None:
+ if pgconn is None or pgconn.notice_handler is None:
return
res = PGresult(result_ptr)
try:
- pgconn.notice_callback(res)
+ pgconn.notice_handler(res)
except Exception as e:
logger.exception("error in notice receiver: %s", e)
@staticmethod
cdef PGconn _from_ptr(impl.PGconn *ptr)
- cdef public object notice_callback
+ cdef public object notice_handler
cdef int _ensure_pgconn(self) except 0
cdef char *_call_bytes(self, conn_bytes_f func) except NULL
cdef void notice_receiver(void *arg, const impl.PGresult *res_ptr):
cdef PGconn pgconn = <object>arg
- if pgconn.notice_callback is None:
+ if pgconn.notice_handler is None:
return
cdef PGresult res = PGresult._from_ptr(<impl.PGresult *>res_ptr)
try:
- pgconn.notice_callback(res)
+ pgconn.notice_handler(res)
except Exception as e:
logger.exception("error in notice receiver: %s", e)
class PGconn(Protocol):
- notice_callback: Optional[Callable[["PGresult"], None]]
+ notice_handler: Optional[Callable[["PGresult"], None]]
@classmethod
def connect(cls, conninfo: bytes) -> "PGconn":
assert res.status == pq.ExecStatus.NONFATAL_ERROR
msgs.append(res.error_field(pq.DiagnosticField.MESSAGE_PRIMARY))
- pgconn.notice_callback = callback
+ pgconn.notice_handler = callback
res = pgconn.exec_(
b"do $$begin raise notice 'hello notice'; end$$ language plpgsql"
)
def callback(res):
raise Exception("hello error")
- pgconn.notice_callback = callback
+ pgconn.notice_handler = callback
res = pgconn.exec_(
b"do $$begin raise notice 'hello notice'; end$$ language plpgsql"
)
assert aconn.closed
-def test_notice_callbacks(aconn, loop, caplog):
+def test_notice_handlers(aconn, loop, caplog):
caplog.set_level(logging.WARNING, logger="psycopg3")
messages = []
severities = []
def cb2(res):
raise Exception("hello from cb2")
- aconn.add_notice_callback(cb1)
- aconn.add_notice_callback(cb2)
- aconn.add_notice_callback("the wrong thing")
- aconn.add_notice_callback(
+ aconn.add_notice_handler(cb1)
+ aconn.add_notice_handler(cb2)
+ aconn.add_notice_handler("the wrong thing")
+ aconn.add_notice_handler(
lambda diag: severities.append(diag.severity_nonlocalized)
)
assert rec.levelno == logging.ERROR
assert "the wrong thing" in rec.message
- aconn.remove_notice_callback(cb1)
- aconn.remove_notice_callback("the wrong thing")
+ aconn.remove_notice_handler(cb1)
+ aconn.remove_notice_handler("the wrong thing")
loop.run_until_complete(
cur.execute(
"do $$begin raise warning 'hello warning'; end$$ language plpgsql"
assert severities == ["NOTICE", "WARNING"]
with pytest.raises(ValueError):
- aconn.remove_notice_callback(cb1)
+ aconn.remove_notice_handler(cb1)
assert conn.closed
-def test_notice_callbacks(conn, caplog):
+def test_notice_handlers(conn, caplog):
caplog.set_level(logging.WARNING, logger="psycopg3")
messages = []
severities = []
def cb2(res):
raise Exception("hello from cb2")
- conn.add_notice_callback(cb1)
- conn.add_notice_callback(cb2)
- conn.add_notice_callback("the wrong thing")
- conn.add_notice_callback(
+ conn.add_notice_handler(cb1)
+ conn.add_notice_handler(cb2)
+ conn.add_notice_handler("the wrong thing")
+ conn.add_notice_handler(
lambda diag: severities.append(diag.severity_nonlocalized)
)
assert rec.levelno == logging.ERROR
assert "the wrong thing" in rec.message
- conn.remove_notice_callback(cb1)
- conn.remove_notice_callback("the wrong thing")
+ conn.remove_notice_handler(cb1)
+ conn.remove_notice_handler("the wrong thing")
cur.execute(
"do $$begin raise warning 'hello warning'; end$$ language plpgsql"
)
assert severities == ["NOTICE", "WARNING"]
with pytest.raises(ValueError):
- conn.remove_notice_callback(cb1)
+ conn.remove_notice_handler(cb1)
@pytest.mark.parametrize("enc", ["utf8", "latin9"])
def test_diag_encoding(conn, enc):
msgs = []
- conn.add_notice_callback(lambda diag: msgs.append(diag.message_primary))
+ conn.add_notice_handler(lambda diag: msgs.append(diag.message_primary))
conn.set_client_encoding(enc)
cur = conn.cursor()
cur.execute(