context manager support для sync
В рамках задачи #51 (closed) Connection.connect() был сделан фабричным методом класса, однако для управления временем жизни соединения сейчас всё ещё требуется явно вызывать close():
connection = Connection.connect(dsn)
try:
cursor = connection.cursor()
cursor.execute("SELECT 1")
finally:
connection.close()
В psycopg3 соединение поддерживает протокол контекстного менеджера, поэтому можно использовать фабричный connect(...) напрямую в with:
with psycopg.connect(dsn) as connection:
...
Предлагается добавить поддержку контекстного менеджера для picopyn.synchronous.Connection, чтобы публичный API был ближе к psycopg3 и позволял безопасно закрывать соединение без ручного try/finally.
Ожидаемый результат:
with picopyn.synchronous.connect(dsn) as connection:
cursor = connection.cursor()
cursor.execute("SELECT 1")
with Connection.connect(dsn) as connection:
cursor = connection.cursor()
cursor.execute("SELECT 1")
Оба варианта должны возвращать открытый объект Connection внутри блока with и закрывать соединение при выходе из блока.
Предлагается, что нужно будет добавить методы __enter__ и __exit__
Исключения внутри блока with не должны подавляться.
Pool в рамках этой задачи можно не менять.