]> git.ipfire.org Git - thirdparty/psycopg.git/log
thirdparty/psycopg.git
2 years agodocs: add news entry about libp1 17 close functions support 603/head
Daniele Varrazzo [Tue, 1 Aug 2023 14:23:37 +0000 (15:23 +0100)] 
docs: add news entry about libp1 17 close functions support

2 years agotest: add CI jobs to run libpq with PG master
Jelte Fennema [Tue, 1 Aug 2023 13:07:15 +0000 (15:07 +0200)] 
test: add CI jobs to run libpq with PG master

2 years agotest: add tests for close_prepared/portal for unsupported libpq
Jelte Fennema [Tue, 1 Aug 2023 12:39:32 +0000 (14:39 +0200)] 
test: add tests for close_prepared/portal for unsupported libpq

2 years agofix: fix pq close wrappers Python implementation
Jelte Fennema [Mon, 31 Jul 2023 15:05:01 +0000 (17:05 +0200)] 
fix: fix pq close wrappers Python implementation

Co-authored-by: Denis Laxalde <denis@laxalde.org>
2 years agotest: add tests for close pq wrappers
Jelte Fennema [Tue, 25 Jul 2023 14:41:00 +0000 (16:41 +0200)] 
test: add tests for close pq wrappers

2 years agofix: add close wrappers to FinishedPGconn too
Jelte Fennema [Tue, 25 Jul 2023 14:23:28 +0000 (16:23 +0200)] 
fix: add close wrappers to FinishedPGconn too

2 years agofeat: add Close wrappers to pgconn.pyx
Jelte Fennema [Wed, 12 Jul 2023 21:41:51 +0000 (23:41 +0200)] 
feat: add Close wrappers to pgconn.pyx

2 years agodocs: fix release version of json bytes dump support
Daniele Varrazzo [Tue, 1 Aug 2023 10:11:50 +0000 (11:11 +0100)] 
docs: fix release version of json bytes dump support

It is to be released in 3.1.10, not already released in 3.1.9... See #568

2 years agoMerge branch 'py312'
Daniele Varrazzo [Tue, 1 Aug 2023 02:53:54 +0000 (03:53 +0100)] 
Merge branch 'py312'

2 years agodocs: mention Python 3.12 support in news file
Daniele Varrazzo [Tue, 1 Aug 2023 02:48:52 +0000 (03:48 +0100)] 
docs: mention Python 3.12 support in news file

2 years agoci: bump Python 3.12 test version to beta 4
Daniele Varrazzo [Mon, 31 Jul 2023 23:56:51 +0000 (00:56 +0100)] 
ci: bump Python 3.12 test version to beta 4

2 years agotest: mark tests as failing to monitoring strange behaviour with Python 3.12
Daniele Varrazzo [Wed, 24 May 2023 23:09:09 +0000 (01:09 +0200)] 
test: mark tests as failing to monitoring strange behaviour with Python 3.12

With Python 3.12a7 and Cython-3.0.0b3, these two tests fails. It seems
that when an exception is involved the __del__ method is not called.

2 years agoci: set up test grid to test Python 3.12
Daniele Varrazzo [Wed, 24 May 2023 23:14:09 +0000 (01:14 +0200)] 
ci: set up test grid to test Python 3.12

2 years agochore: declare Python 3.12 supported in classifiers
Daniele Varrazzo [Wed, 24 May 2023 23:08:50 +0000 (01:08 +0200)] 
chore: declare Python 3.12 supported in classifiers

2 years agochore: upgrade Cython to stable 3.0.0
Daniele Varrazzo [Wed, 24 May 2023 23:08:26 +0000 (01:08 +0200)] 
chore: upgrade Cython to stable 3.0.0

2 years agofix: fix "can't adapt" error message on Python 3.11
Daniele Varrazzo [Mon, 31 Jul 2023 23:49:04 +0000 (00:49 +0100)] 
fix: fix "can't adapt" error message on Python 3.11

It appeared like "using placeholder '%PyFormat.TEXT'" because of the
change in the Enum display already fixed elsewhere.

Spotted in the conversation in #611.

Also fix unneeded nested exception in the Python version of the code.

2 years agofix: fix resetting read_only/deferrable to default using None 612/head
Daniele Varrazzo [Mon, 31 Jul 2023 22:52:45 +0000 (23:52 +0100)] 
fix: fix resetting read_only/deferrable to default using None

2 years agoFix spelling in from_pg2
Šarūnas Nejus [Sun, 30 Jul 2023 14:34:30 +0000 (15:34 +0100)] 
Fix spelling in from_pg2

2 years agodocs: add clarification about transaction characteristics attributes
Daniele Varrazzo [Tue, 25 Jul 2023 14:52:00 +0000 (15:52 +0100)] 
docs: add clarification about transaction characteristics attributes

They don't affect autocommit connections as they used to in psycopg2, so
note it as a difference from psycopg2. Add more explicit warning about
this limitation.

https://www.postgresql.org/message-id/DB7PR07MB39163E0AFB907413EE5C10F68738A%40DB7PR07MB3916.eurprd07.prod.outlook.com

2 years agoMerge branch 'fix-591'
Daniele Varrazzo [Mon, 24 Jul 2023 10:18:04 +0000 (11:18 +0100)] 
Merge branch 'fix-591'

2 years agofix: fix possible errors calling __repr__ from __del__.
Daniele Varrazzo [Sun, 23 Jul 2023 19:33:05 +0000 (20:33 +0100)] 
fix: fix possible errors calling __repr__ from __del__.

The errors get ignored but print a warning on program exit and eclipse a
genuine warning.

The error is caused by the `pq.misc` module getting gc'd on interpreter
shutdown before `connection_summary()` is called. The solution is to
import `connection_summary` in the module namespace, which is similar to
the solution that proved working for #198. It is less robust than the
solution used by the Python devs to import the function in the method
via an argument default, but it should work adequately (as nobody
complained about #198 anymore).

In #591 discussion, I proposed that connection_summary is too complex to
be considered safe to call on __del__. Actually, looking at it, it seems
innocent enough, as it only calls objects methods, no functions from
module namespaces. As a consequence we assume that this commit fixes the
issue. As I can't reproduce it, will ask the OP if this is the case.

Close #591.

2 years agoMerge branch 'fix-copy-cancel-clobbering-exception'
Daniele Varrazzo [Sun, 23 Jul 2023 18:56:06 +0000 (19:56 +0100)] 
Merge branch 'fix-copy-cancel-clobbering-exception'

2 years agofix: don't clobber a Python exception on COPY FROM with QueryCanceled
Daniele Varrazzo [Fri, 21 Jul 2023 01:10:01 +0000 (02:10 +0100)] 
fix: don't clobber a Python exception on COPY FROM with QueryCanceled

We trigger the server to raise the QueryCanceled; however, the original
exception has more information (the traceback). We can consider the
server exception just a notification that cancellation worked as
expected.

This is a mild change in behaviour, as the fixed tests state. However,
raising QueryCanceled is not explicitly documented and not part of a
strict interface, so we can probably change the exception raised without
needing to wait for psycopg 4.

Close #593

2 years agoUpdate documentation related to async and Ctrl-C
James Johnston [Wed, 12 Jul 2023 00:08:10 +0000 (17:08 -0700)] 
Update documentation related to async and Ctrl-C

Now that #543 is fixed, users shouldn't need to manually set up
signal handlers to cancel operations any more.  Update the documentation
to reflect this.

2 years agochore: bump mypy to 1.4.1
Denis Laxalde [Wed, 12 Jul 2023 06:39:51 +0000 (08:39 +0200)] 
chore: bump mypy to 1.4.1

The issue previously mentioned about '# type: ignore[arg-type]' in
rows.py got resolved.

The new '# type: ignore[comparison-overlap]' in test_pipeline*.py are
due to https://github.com/python/mypy/issues/15509, a known regression
from Mypy 1.4. We use the workaround documented in the release blog post
https://mypy-lang.blogspot.com/2023/06/mypy-140-released.html (section
"Narrowing Enum Values Using “==”").

2 years agoops: fix broken build on Windows amd64
Daniele Varrazzo [Sun, 18 Jun 2023 17:18:09 +0000 (19:18 +0200)] 
ops: fix broken build on Windows amd64

2 years agodocs: fix links generation broken by sphinx_autodoc_typehints
Daniele Varrazzo [Tue, 13 Jun 2023 16:12:06 +0000 (18:12 +0200)] 
docs: fix links generation broken by sphinx_autodoc_typehints

Still don't know what we will lose in the docs, but we can clean them up
once they don't totally suck anymore.

2 years agoMark test_ctrl_c_handler as timing sensitive
Sandro [Tue, 13 Jun 2023 09:34:55 +0000 (11:34 +0200)] 
Mark test_ctrl_c_handler as timing sensitive

psycopg> =================================== FAILURES ===================================
psycopg> _____________________________ test_ctrl_c_handler ______________________________
psycopg>         t0 = time.time()
psycopg>         proc = sp.Popen([sys.executable, "-s", "-c", script], creationflags=creationflags)
psycopg>         proc.communicate()
psycopg>         t = time.time() - t0
psycopg>         assert proc.returncode == 0
psycopg> >       assert 1 < t < 2
psycopg> E       assert 3.7456982135772705 < 2
psycopg>
psycopg> tests/test_concurrency.py:293: AssertionError

2 years agodocs: add more details about getting results from executemany
Daniele Varrazzo [Tue, 13 Jun 2023 14:02:31 +0000 (16:02 +0200)] 
docs: add more details about getting results from executemany

2 years agoMerge pull request #570 from dlax/error-pgconn
Daniele Varrazzo [Tue, 13 Jun 2023 12:12:29 +0000 (14:12 +0200)] 
Merge pull request #570 from dlax/error-pgconn

finish the PGconn upon connection failure

2 years agodocs(pool): document that using idle_session_timeout is not a good idea
Daniele Varrazzo [Thu, 8 Jun 2023 14:44:53 +0000 (16:44 +0200)] 
docs(pool): document that using idle_session_timeout is not a good idea

2 years agofix(pool): check connections' max_lifetime on ``check()``
Daniele Varrazzo [Thu, 8 Jun 2023 13:56:22 +0000 (15:56 +0200)] 
fix(pool): check connections' max_lifetime on ``check()``

Close #482.

2 years agofix: finish the PGconn upon connection failure 570/head
Denis Laxalde [Fri, 19 May 2023 07:06:55 +0000 (09:06 +0200)] 
fix: finish the PGconn upon connection failure

Attaching the non-finished PGconn to exceptions raised in connect() is
causing problem, as described in issue #565, because the PGconn might
not get finished soon enough in application code and the socket would
remain open.

On the other hand, just removing the pgconn attribute from Error would
be a breaking change and we'd loose the inspection features introduced
in commit 9220293dc023b757f2a57702c14b1460ff8f25b0.

As an alternative, we define a new PGconn implementation that is
error-specific: it captures all attributes of the original PGconn and
fails upon other operations (methods call). Some attributes have a
default value since they are not available in old PostgreSQL versions.

Finally, the (real) PGconn is finished before raising exception in
generators.connect().

2 years agochore: add a trailing comma in Error.__init__() to make black happy
Denis Laxalde [Fri, 19 May 2023 07:06:55 +0000 (09:06 +0200)] 
chore: add a trailing comma in Error.__init__() to make black happy

2 years agotests: check that OperationalError raised by connect() holds a pgconn
Denis Laxalde [Tue, 16 May 2023 11:28:37 +0000 (13:28 +0200)] 
tests: check that OperationalError raised by connect() holds a pgconn

Sort of a non-regression test for the part of commit
9220293dc023b757f2a57702c14b1460ff8f25b0 concerning generators. It used
roughly the same logic as tests/pq/test_pgconn.py::test_used_password()
to determine if the test connection needs a password and gets skipped
otherwise.

2 years agoMerge pull request #586 from dlax/issue-585
Daniele Varrazzo [Mon, 12 Jun 2023 20:13:28 +0000 (22:13 +0200)] 
Merge pull request #586 from dlax/issue-585

fix: always validate PrepareManager cache in pipeline mode

2 years agofix: always validate PrepareManager cache in pipeline mode 586/head
Denis Laxalde [Thu, 8 Jun 2023 09:21:42 +0000 (11:21 +0200)] 
fix: always validate PrepareManager cache in pipeline mode

Previously, when processing results in pipeline mode
(BasePipeline._process_results()), we'd run
'cursor._check_results(results)' early before calling
_prepared.validate() with prepared statement information. However, if
this check step fails, for example if the pipeline got aborted due to a
previous error, the latter step (PrepareManager cache validation) was
not run.

We fix this by reversing the logic, and checking results last.

However, this is not enough, because the results processing logic in
BasePipeline._fetch_gen() or _communicate_gen(), which sequentially
walked through fetched results, would typically stop at the first
exception and thus possibly never go through the step of validating
PrepareManager cache if a previous error happened.

We fix that by making sure that *all* results are processed, possibly
capturing the first exception and then re-raising it. In both
_communicate_gen() and _fetch_gen(), we no longer store results in the
'to_process' like, but process then upon reception as this logic is no
longer needed.

Fix #585.

2 years agodocs: adjust PrepareManager.validate() docstring
Denis Laxalde [Thu, 8 Jun 2023 12:03:18 +0000 (14:03 +0200)] 
docs: adjust PrepareManager.validate() docstring

From commit bfabe88aba4769e0a44206e1ace7c299991a957d, the method does
not return a command, but it records it through _rotate().

2 years agodocs: remove outdated comments in PrepareManager's docstrings
Denis Laxalde [Thu, 8 Jun 2023 11:38:44 +0000 (13:38 +0200)] 
docs: remove outdated comments in PrepareManager's docstrings

PrepareManager's methods maybe_add_to_cache() and validate() are said to
only be used in pipeline mode, but this is wrong as can be seen in
BaseCursor._maybe_prepare_gen(). (Comments are probably a left-over from
a prior implementation of the pipeline mode.)

2 years agodocs: add notes about using IS with placeholders
Daniele Varrazzo [Sun, 4 Jun 2023 23:18:03 +0000 (01:18 +0200)] 
docs: add notes about using IS with placeholders

See #582.

2 years agoMerge pull request #568 from lionel-panhaleux/master
Daniele Varrazzo [Sun, 4 Jun 2023 22:29:27 +0000 (00:29 +0200)] 
Merge pull request #568 from lionel-panhaleux/master

Allow binary JSON dumps

2 years agofeat: allow binary JSON dumps 568/head
Lionel Panhaleux [Fri, 19 May 2023 12:03:29 +0000 (14:03 +0200)] 
feat: allow binary JSON dumps

Some JSON libraries, in particular the widespread
[orjson](https://github.com/ijl/orjson#quickstart) library, directly
dump data in binary format.

This change allows it and avoids having to decode/encode in these cases
by testing the return type of the `dumps` function.

2 years agodocs: add info about DateStyle support
Daniele Varrazzo [Mon, 22 May 2023 00:15:28 +0000 (02:15 +0200)] 
docs: add info about DateStyle support

Close #571

2 years agodocs: add note regarding the differences in date/time domains
Daniele Varrazzo [Tue, 16 May 2023 00:17:51 +0000 (02:17 +0200)] 
docs: add note regarding the differences in date/time domains

2 years agoAdded minimal Django integration tests.
Florian Apolloner [Sat, 15 Apr 2023 08:13:34 +0000 (10:13 +0200)] 
Added minimal Django integration tests.

2 years agochore: bump psycopg package version to 3.1.9
Daniele Varrazzo [Tue, 2 May 2023 10:56:24 +0000 (12:56 +0200)] 
chore: bump psycopg package version to 3.1.9

2 years agoMerge pull request #551 from psycopg/fix-json-dump-dict
Daniele Varrazzo [Tue, 2 May 2023 10:16:59 +0000 (12:16 +0200)] 
Merge pull request #551 from psycopg/fix-json-dump-dict

fix(json): allow to register json dumpers on dict or other objects

2 years agotest(json): fix dict registration test on crdb 551/head
Daniele Varrazzo [Mon, 17 Apr 2023 21:52:06 +0000 (23:52 +0200)] 
test(json): fix dict registration test on crdb

2 years agofix(json): allow to register json dumpers on dict or other objects
Daniele Varrazzo [Mon, 10 Apr 2023 20:55:44 +0000 (22:55 +0200)] 
fix(json): allow to register json dumpers on dict or other objects

2 years agofix: don't reuse the same Transformer in composite dumper
Daniele Varrazzo [Sun, 16 Apr 2023 01:30:37 +0000 (03:30 +0200)] 
fix: don't reuse the same Transformer in composite dumper

We need different dumpers because, in case a composite contains another
composite, we need to call `dump_sequence()` on different sequences, so
we row dumpers must be distinct.

Close #547

2 years agodocs: fix cursor -> connection in the context of transaction management
Daniele Varrazzo [Thu, 13 Apr 2023 21:23:14 +0000 (23:23 +0200)] 
docs: fix cursor -> connection in the context of transaction management

Close #548

2 years agofix: don't use select as wait function if possible
Daniele Varrazzo [Sun, 9 Apr 2023 18:59:55 +0000 (20:59 +0200)] 
fix: don't use select as wait function if possible

select is marginally faster than others, but has the limitation of not
allowing FD > 1024, so it is not a good default.

If people need performance, they will use wait_c anyway, which is based
on poll, and doesn't have the limitation.

2 years agofix: fix loading of different 'record' types in the same query
Daniele Varrazzo [Sun, 9 Apr 2023 19:31:27 +0000 (21:31 +0200)] 
fix: fix loading of different 'record' types in the same query

Different records in the same query might have different types.
Use a separate transformer for each sequence of types.

2 years agofix: don't use select as wait function if possible
Daniele Varrazzo [Sun, 9 Apr 2023 18:59:55 +0000 (20:59 +0200)] 
fix: don't use select as wait function if possible

select is marginally faster than others, but has the limitation of not
allowing FD > 1024, so it is not a good default.

If people need performance, they will use wait_c anyway, which is based
on poll, and doesn't have the limitation.

2 years agofix: shorter traceback on ctrl-c interrupt
Daniele Varrazzo [Sun, 9 Apr 2023 18:45:09 +0000 (20:45 +0200)] 
fix: shorter traceback on ctrl-c interrupt

2 years agofix(async): cancel query upon receiving CanceledError in async wait
Daniele Varrazzo [Sun, 9 Apr 2023 18:29:44 +0000 (20:29 +0200)] 
fix(async): cancel query upon receiving CanceledError in async wait

This interrupt a running query upon Ctrl-C for example, which wasn't
working as it was on sync connection.

Close #543.

2 years agochore: bump mypy to 1.2
Daniele Varrazzo [Sun, 9 Apr 2023 23:42:14 +0000 (01:42 +0200)] 
chore: bump mypy to 1.2

2 years agoFix typo in docs
Jay Turner [Thu, 30 Mar 2023 08:11:18 +0000 (09:11 +0100)] 
Fix typo in docs

2 years agochore: fix declaration of PQsetTraceFlags in pyi
Denis Laxalde [Tue, 28 Mar 2023 09:45:57 +0000 (11:45 +0200)] 
chore: fix declaration of PQsetTraceFlags in pyi

Running 'python -m psycopg.pq._pq_ctypes' currently produces a diff
because _PQsetTraceFlags is not present in .pyi but PQsetTraceFlags is.

2 years agochore: bump psycopg_pool package version to 3.1.7
Daniele Varrazzo [Mon, 27 Mar 2023 00:07:50 +0000 (02:07 +0200)] 
chore: bump psycopg_pool package version to 3.1.7

2 years agotests: skip test_sql::test_invalid_name if not a super-user
Denis Laxalde [Thu, 23 Mar 2023 08:52:39 +0000 (09:52 +0100)] 
tests: skip test_sql::test_invalid_name if not a super-user

Creating a base type, as done in that test, requires being a superuser.

2 years agoMerge branch 'fix-509'
Daniele Varrazzo [Mon, 20 Mar 2023 02:34:12 +0000 (02:34 +0000)] 
Merge branch 'fix-509'

2 years agotest(pool): skip cancellation tests on Python 3.7
Daniele Varrazzo [Sun, 19 Mar 2023 19:41:14 +0000 (19:41 +0000)] 
test(pool): skip cancellation tests on Python 3.7

The test hangs forever on Python 3.7, no the gather() statement, and
wait_for() doesn't solve the problem.

2 years agofix(pool): reinforce handling of errors in queued clients
Daniele Varrazzo [Thu, 16 Mar 2023 21:15:51 +0000 (22:15 +0100)] 
fix(pool): reinforce handling of errors in queued clients

Unlike the async counterpart, I have no idea how to test this condition,
because I don't think you can cancel a Python thread. I could put the
pool and the first client in threads and use the main thread as queued
client, but it seems pretty convoluted.

However, an error handling in the same place that fixed #509 in the
async pools doesn't hurt.

2 years agofix(pool): fix handling of errors in queued async tasks
Daniele Varrazzo [Thu, 16 Mar 2023 21:07:05 +0000 (22:07 +0100)] 
fix(pool): fix handling of errors in queued async tasks

Failing to do so, cancelled tasks still in the queue end up consuming
a connection without a chance of returning it, depleting the pool.

Close #509

2 years agotest: mark some scheduler tests time-sensitive
Daniele Varrazzo [Wed, 15 Mar 2023 03:29:32 +0000 (04:29 +0100)] 
test: mark some scheduler tests time-sensitive

Close #502

2 years agofix(c): fix incomplete error message for timestamp too small
Daniele Varrazzo [Wed, 15 Mar 2023 03:24:39 +0000 (04:24 +0100)] 
fix(c): fix incomplete error message for timestamp too small

Close #521.

2 years agodoc: fix pg2pyenc() docstring
Denis Laxalde [Wed, 8 Mar 2023 09:49:54 +0000 (10:49 +0100)] 
doc: fix pg2pyenc() docstring

2 years agoMerge branch 'dshick/support-async-reconn-failed-cb'
Daniele Varrazzo [Wed, 15 Mar 2023 02:54:02 +0000 (03:54 +0100)] 
Merge branch 'dshick/support-async-reconn-failed-cb'

2 years agorefactor(pool): rename SyncConnectFailedCB to ConnectFailedCB 525/head
Daniele Varrazzo [Wed, 15 Mar 2023 02:46:54 +0000 (03:46 +0100)] 
refactor(pool): rename SyncConnectFailedCB to ConnectFailedCB

For every other object in the codebase of which there are sync and
async versions, the sync one doesn't have a prefix.

2 years agodocs(pool): mention async reconnect_failed support in docs and news
Daniele Varrazzo [Wed, 15 Mar 2023 02:46:18 +0000 (03:46 +0100)] 
docs(pool): mention async reconnect_failed support in docs and news

2 years agochore: use TypeAlias to clean up verbose types
Dan Shick [Tue, 14 Mar 2023 20:09:04 +0000 (16:09 -0400)] 
chore: use TypeAlias to clean up verbose types

2 years agofix: define reconnect_failed callback in each pool implementation, allow async functi...
Dan Shick [Tue, 14 Mar 2023 17:32:52 +0000 (13:32 -0400)] 
fix: define reconnect_failed callback in each pool implementation, allow async functions in async pool

reuse existing test with pytest parameterization

2 years agoMerge branch 'cython-3.0b1'
Daniele Varrazzo [Tue, 14 Mar 2023 19:09:02 +0000 (20:09 +0100)] 
Merge branch 'cython-3.0b1'

2 years agofix(c): add type cast to notice receiver callback
Daniele Varrazzo [Tue, 14 Mar 2023 18:36:20 +0000 (19:36 +0100)] 
fix(c): add type cast to notice receiver callback

Necessary starting from Cython 3.0b1

2 years agofix(c): solve Cython compile warnings
Daniele Varrazzo [Tue, 14 Mar 2023 18:35:57 +0000 (19:35 +0100)] 
fix(c): solve Cython compile warnings

2 years agoMaterialize `TAIL` -> `SUBSCRIBE`
umanwizard [Thu, 16 Feb 2023 14:20:36 +0000 (09:20 -0500)] 
Materialize `TAIL` -> `SUBSCRIBE`

2 years agochore: upgrade to mypy 1.0.0
Denis Laxalde [Sat, 11 Feb 2023 09:51:35 +0000 (10:51 +0100)] 
chore: upgrade to mypy 1.0.0

Some "type: ignore" no longer needed, some need a different kind.

2 years agotests: mark as flaky tests seen failing randomly on release
Daniele Varrazzo [Mon, 6 Feb 2023 21:29:32 +0000 (21:29 +0000)] 
tests: mark as flaky tests seen failing randomly on release

2 years agotest: use Windows asyncio policy in "non-asyncio" pool tests 507/head
Denis Laxalde [Sun, 5 Feb 2023 17:40:16 +0000 (18:40 +0100)] 
test: use Windows asyncio policy in "non-asyncio" pool tests

In commit b6cc8343159fc0a27365e09a3beef06433f3f1b5, we drop the global
asyncio.set_event_loop_policy() for Windows in conftest.py, replacing it
with asyncio_options to be used by the anyio test runner. However, test
cases in test_pool_async_noasyncio.py are not "async def" so they would
not use that anyio runner (nor did they use pytest-asyncio's runner
before); but they need the event loop policy for Windows still.
Accordingly, we configure the loop from "anyio_backend_options" in
asyncio_run() fixture.

2 years agotest: use anyio instead of pytest-asyncio 352/head
Denis Laxalde [Wed, 17 Aug 2022 13:59:31 +0000 (15:59 +0200)] 
test: use anyio instead of pytest-asyncio

This is in preparation for adding support for other async libraries,
through anyio. AnyIO pytest plugin is used in replacement for
pytest-asyncio:

- either the pytest.mark.asyncio is replaced by pytest.mark.anyio, or,
- we rely on the 'anyio_backend' fixture that is pulled in 'aconn_cls'
  fixture (and hence 'aconn') providing automatic detection for test
  functions using it.

The 'anyio_backend' fixture is parametrized to only use asyncio and
selects the event loop policy we need on Windows platform as previously
done in pytest_sessionstart(), but only for Python version 3.8 or
higher.

This fixture is defined in main conftest.py, as well as in
pool/conftest.py since we'll change the former to support more async
backend while keeping the later asyncio-only for now.

Function test_concurrency_async.py::test_ctrl_c is no longer 'async'
because its code does not directly use asyncio (it's done through a
subprocess); but the 'async def' was needed before in order for
pytest-asyncio to run it since the test module had a global
pytest.mark.asyncio (and we were using the "auto" mode).

2 years agoMerge branch 'set-results'
Daniele Varrazzo [Sat, 4 Feb 2023 11:32:09 +0000 (12:32 +0100)] 
Merge branch 'set-results'

2 years agorefactor: set cursor result in _maybe_prepare_gen() 480/head
Denis Laxalde [Tue, 24 Jan 2023 15:18:24 +0000 (16:18 +0100)] 
refactor: set cursor result in _maybe_prepare_gen()

When not in pipeline mode, we can actually set the results on the cursor
directly in this method instead of letting the caller handle this.

2 years agorefactor: merge BaseCursor's _set_results() and _set_results_from_pipeline()
Denis Laxalde [Mon, 9 Jan 2023 20:26:46 +0000 (21:26 +0100)] 
refactor: merge BaseCursor's _set_results() and _set_results_from_pipeline()

Per refactoring of previous commits, these are similar: the only
difference is the use of "first_batch" flag in the execute() branch when
not in pipeline mode, but in that case since there is actually only one
"batch", the behavior is actually preserved.

Since _set_results_from_pipeline() previously included a call to
_check_results() but _set_results() does not, that is reported in caller
(BasePipeline._process_results()).

2 years agorefactor: handle returning-executemany() in _set_results()
Denis Laxalde [Sat, 7 Jan 2023 07:49:16 +0000 (08:49 +0100)] 
refactor: handle returning-executemany() in _set_results()

2 years agorefactor: introduce BaseCursor._set_results()
Denis Laxalde [Sat, 7 Jan 2023 07:31:41 +0000 (08:31 +0100)] 
refactor: introduce BaseCursor._set_results()

Similar to _set_results_from_pipeline(), this applies to the
non-pipeline case and reduce code repetition.

2 years agoMerge branch 'sqlalchemy_pipeline'
Daniele Varrazzo [Sat, 4 Feb 2023 11:13:16 +0000 (12:13 +0100)] 
Merge branch 'sqlalchemy_pipeline'

2 years agoci: add colors to pytest sqlalchemy run 490/head
Daniele Varrazzo [Sat, 4 Feb 2023 10:15:55 +0000 (11:15 +0100)] 
ci: add colors to pytest sqlalchemy run

2 years agoci: allow better job visualization in Action page
Daniele Varrazzo [Sat, 4 Feb 2023 10:08:48 +0000 (11:08 +0100)] 
ci: allow better job visualization in Action page

2 years agoci: fix postgres service in 3rd party workflow
Daniele Varrazzo [Sat, 4 Feb 2023 10:05:11 +0000 (11:05 +0100)] 
ci: fix postgres service in 3rd party workflow

2 years agoci: add sqlalchemy integration pipeline
Federico Caselli [Tue, 17 Jan 2023 21:51:02 +0000 (22:51 +0100)] 
ci: add sqlalchemy integration pipeline

2 years agoMerge branch 'fix-503'
Daniele Varrazzo [Sat, 4 Feb 2023 09:48:08 +0000 (10:48 +0100)] 
Merge branch 'fix-503'

2 years agodocs: add news entry about TypeInfo.fetch() with sql_ascii connection fix 504/head
Daniele Varrazzo [Wed, 1 Feb 2023 01:08:33 +0000 (02:08 +0100)] 
docs: add news entry about TypeInfo.fetch() with sql_ascii connection fix

2 years agotest: test hstore registration using different encodings
Daniele Varrazzo [Wed, 1 Feb 2023 01:04:04 +0000 (02:04 +0100)] 
test: test hstore registration using different encodings

Reproduce the "emerging" bug reported in #503.

2 years agofix: fix TypeInfo.fetch() with a sql_ascii encoding connection
Daniele Varrazzo [Wed, 1 Feb 2023 00:59:01 +0000 (01:59 +0100)] 
fix: fix TypeInfo.fetch() with a sql_ascii encoding connection

Close #503

2 years agotest: add TypeInfo.fetch() test with autocommit transaction
Daniele Varrazzo [Wed, 1 Feb 2023 00:52:57 +0000 (01:52 +0100)] 
test: add TypeInfo.fetch() test with autocommit transaction

2 years agotest: reproduce the error in TypeInfo.fetch() in sql_ascii connection
Daniele Varrazzo [Wed, 1 Feb 2023 00:39:51 +0000 (01:39 +0100)] 
test: reproduce the error in TypeInfo.fetch() in sql_ascii connection

Reported in #503.

2 years agofixed broken link to pip docs
Harry Lees [Fri, 3 Feb 2023 11:57:50 +0000 (11:57 +0000)] 
fixed broken link to pip docs

2 years agochore: upgrade black to 23.1.0
Daniele Varrazzo [Wed, 1 Feb 2023 10:25:26 +0000 (11:25 +0100)] 
chore: upgrade black to 23.1.0

Code reformatted to adhere to the new style requested (stricter on
redundant tuples unpacking brackets and blank lines at blocks start).

2 years agochore: bump psycopg_pool package version to 3.1.6
Daniele Varrazzo [Sat, 28 Jan 2023 16:52:26 +0000 (17:52 +0100)] 
chore: bump psycopg_pool package version to 3.1.6