Daniele Varrazzo [Tue, 14 May 2024 11:18:40 +0000 (13:18 +0200)]
fix: use the simple query protocol to execute BEGIN/COMMIT out of pipeline
We started using the extended protocol in e5079184 to fix #350, but,
probably to keep symmetry, we also changed the behaviour out of the
pipeline.
This turns out to be a problem for people connecting to the PgBouncer
admin console. They can use the `ClientCursor`, which tries to use the
simple protocol as much as it can, but they currently have to use
autocommit. With this changeset autocommit shouldn't be needed anymore.
See #808.
ci(macos): test and build macOS packages on M1 runners
Separate macos runners because:
The macos-14 runner can build amd64 images, but doesn't have Python <
3.10.
The macos-12 runner can only build x86_64 images.
Run Postgres from CI rather than from cibuildwheel, as cibw won't use a
docker image on macOS anyway. It makes it more uniform w.r.t. other
runners and doesn't require a "before" script.
Daniele Varrazzo [Sun, 31 Mar 2024 20:57:42 +0000 (20:57 +0000)]
fix: more careful stripping of error prefixes
Only strip the known prefixes, both in English and in the currently
known localizations.
Added script to generate regexp to match every backend localization. The
script was executed on PostgreSQL commit f4ad0021af (on master branch,
before v17).
fix: avoid to create reference loops in datetime adapters
Setting the reference to a bound method in the state creates a reference
loop.
The issue is minimal because the gc will be able to break these loops
anyway and because it mostly happens with exotic or unsupported
date/interval styles.
Michał Górny [Sat, 27 Jan 2024 14:28:34 +0000 (15:28 +0100)]
fix: add `libc.so` fallback for musl systems to the ctypes impl
Add a fallback to `libc.so` library name to fix loading the ctypes
implementation on musl systems. On musl, `find_library("c")` does
not work (the problem has been reported to CPython in 2014, and has not
been resolved yet), causing the module to fail on `assert libcname`.
Instead, add a fallback to using `libc.so` and let ctypes raise
an exception if such a library does not exist.
fix: perform multiple attemps if a host name resolve to multiple hosts
We now perform DNS resolution in Python both in the sync and async code.
Because the two code paths are now very similar, make sure they pass the
same tests.
Daniele Varrazzo [Wed, 13 Dec 2023 13:20:49 +0000 (14:20 +0100)]
refactor: add compiled_default option to _get_params
Make it less awkward to come out with a 5432 when we really want a port
number (in name resolution) but still allow to leave it unspecified to
avoid mangling the conninfo.
nialov [Mon, 4 Dec 2023 17:33:46 +0000 (19:33 +0200)]
test: mark flaky ref count tests
All tests that have the 'gc' fixture are now marked with the refcount mark. The
reasoning is that they demonstrate flaky behaviour and disabling them in
certain CI is necessary to ensure reliable testing. See #692
test: skip some tests that raise an error on pypy 3.9
The error is:
anyio/_backends/_asyncio.py:2039: in _cancel_all_tasks
raise cast(BaseException, task.exception())
...
> result = coro.throw(exc)
E RuntimeError: can't do async_generator.athrow().throw()
The error only happens on Pypy 3.9, and doesn't happen on master, only
in the maint 3.1 branch. 3.1 uses anyio < 4, master uses anyio >= 4, so
I would say that the error is limited to only this combination and that
it is an anyio bug.
The problem affects just two tests, so let's just skip them. Whatever.
Denis Laxalde [Thu, 30 Nov 2023 20:01:01 +0000 (21:01 +0100)]
test: let pytest show more info in summary
We add '-ra' to pytest options so as to get report about "(a)ll except
passed" tests. This is in particular useful to get the detailed message
about why some tests got skipped (especially useful in CI).
Daniele Varrazzo [Tue, 21 Nov 2023 08:49:24 +0000 (09:49 +0100)]
test: fix test failing to connect if env vars are cleaned
Add `dsn_env` fixture returning the `dsn` merged with the values in the
PG* env vars. This way the env can be cleaned but a working connection
string is still available.
Daniele Varrazzo [Mon, 13 Nov 2023 22:56:46 +0000 (23:56 +0100)]
chore: drop conninfo.resolve_hostaddr_async
The function is no more used internally and only exposed from the _dns
module with a warning. Its implementation is now an application of a few
internal functions exposed internally by the conninfo module. Move the
whole implementation into _dns.
Daniele Varrazzo [Sat, 11 Nov 2023 15:32:07 +0000 (15:32 +0000)]
chore: refresh 3rd party tests
- upgrade Python to 3.12
- test stable version of SQLAlchemy 2
- add missing SQLAlchemy test dependency
Testing Django with Python 3.12 not enabled yet as it requires pylibmc wheel
packages for Python 3.12 (https://github.com/lericson/pylibmc/issues/288).