diff --git a/.github/workflows/instrumentations_0.yml b/.github/workflows/instrumentations_0.yml index a138621633..66d88cce88 100644 --- a/.github/workflows/instrumentations_0.yml +++ b/.github/workflows/instrumentations_0.yml @@ -16,13 +16,14 @@ jobs: py39: 3.9 py310: "3.10" py311: "3.11" + py312: "3.12" pypy3: pypy-3.8 RUN_MATRIX_COMBINATION: ${{ matrix.python-version }}-${{ matrix.package }}-${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false # ensures the entire test matrix is run, even if one permutation fails matrix: - python-version: [py38, py39, py310, py311, pypy3] + python-version: [py38, py39, py310, py311, py312, pypy3] package: # Do not add more instrumentations here, add them in instrumentations_1.yml. # The reason for this separation of instrumentations into more than one YAML file is diff --git a/.github/workflows/instrumentations_1.yml b/.github/workflows/instrumentations_1.yml index 904f2ee999..e5d5283ea1 100644 --- a/.github/workflows/instrumentations_1.yml +++ b/.github/workflows/instrumentations_1.yml @@ -16,13 +16,14 @@ jobs: py39: 3.9 py310: "3.10" py311: "3.11" + py312: "3.12" pypy3: pypy-3.8 RUN_MATRIX_COMBINATION: ${{ matrix.python-version }}-${{ matrix.package }}-${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false # ensures the entire test matrix is run, even if one permutation fails matrix: - python-version: [py38, py39, py310, py311, pypy3] + python-version: [py38, py39, py310, py311, py312, pypy3] package: - "urllib" - "urllib3" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 39afb3ee96..0180adf409 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -9,7 +9,7 @@ env: CORE_REPO_SHA: 955c92e91b5cd4bcfb43c39efcef086b040471d2 jobs: - lint-3_11: + lint-3_12: strategy: fail-fast: false # ensures the entire test matrix is run, even if one permutation fails matrix: @@ -75,10 +75,10 @@ jobs: steps: - name: Checkout Contrib Repo @ SHA - ${{ github.sha }} uses: actions/checkout@v4 - - name: Set up Python 3.11 + - name: Set up Python 3.12 uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install tox run: pip install tox - name: Cache tox environment diff --git a/CHANGELOG.md b/CHANGELOG.md index 038706f35c..c3dec6c9b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Add support for Python 3.12 + ([#2549](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2549)) - `opentelemetry-sdk-extension-aws` Register AWS resource detectors under the `opentelemetry_resource_detector` entry point ([#2382](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2382)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 743449c2a7..ac664446aa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,7 +59,7 @@ You can run `tox` with the following arguments: - `tox` to run all existing tox commands, including unit tests for all packages under multiple Python versions - `tox -e docs` to regenerate the API docs -- `tox -e py311-test-instrumentation-aiopg` to e.g. run the aiopg instrumentation unit tests under a specific +- `tox -e py312-test-instrumentation-aiopg` to e.g. run the aiopg instrumentation unit tests under a specific Python version - `tox -e spellcheck` to run a spellcheck on all the code - `tox -e lint-some-package` to run lint checks on `some-package` diff --git a/tox.ini b/tox.ini index fecc9e5af7..bcbbb6da56 100644 --- a/tox.ini +++ b/tox.ini @@ -7,53 +7,53 @@ envlist = ; for specifying supported Python versions per package. ; opentelemetry-resource-detector-container - py3{8,9,10,11}-test-resource-detector-container + py3{8,9,10,11,12}-test-resource-detector-container pypy3-test-resource-detector-container lint-resource-detector-container ; opentelemetry-sdk-extension-aws - py3{8,9,10,11}-test-sdk-extension-aws + py3{8,9,10,11,12}-test-sdk-extension-aws pypy3-test-sdk-extension-aws lint-sdk-extension-aws ; opentelemetry-distro - py3{8,9,10,11}-test-distro + py3{8,9,10,11,12}-test-distro pypy3-test-distro lint-distro ; opentelemetry-instrumentation - py3{8,9,10,11}-test-opentelemetry-instrumentation + py3{8,9,10,11,12}-test-opentelemetry-instrumentation pypy3-test-opentelemetry-instrumentation lint-opentelemetry-instrumentation ; opentelemetry-instrumentation-aiohttp-client - py3{8,9,10,11}-test-instrumentation-aiohttp-client + py3{8,9,10,11,12}-test-instrumentation-aiohttp-client pypy3-test-instrumentation-aiohttp-client lint-instrumentation-aiohttp-client ; opentelemetry-instrumentation-aiohttp-server - py3{8,9,10,11}-test-instrumentation-aiohttp-server + py3{8,9,10,11,12}-test-instrumentation-aiohttp-server pypy3-test-instrumentation-aiohttp-server lint-instrumentation-aiohttp-server ; opentelemetry-instrumentation-aiopg - py3{8,9,10,11}-test-instrumentation-aiopg + py3{8,9,10,11,12}-test-instrumentation-aiopg ; instrumentation-aiopg intentionally excluded from pypy3 lint-instrumentation-aiopg ; opentelemetry-instrumentation-aws-lambda - py3{8,9,10,11}-test-instrumentation-aws-lambda + py3{8,9,10,11,12}-test-instrumentation-aws-lambda pypy3-test-instrumentation-aws-lambda lint-instrumentation-aws-lambda ; opentelemetry-instrumentation-botocore - py3{8,9,10,11}-test-instrumentation-botocore + py3{8,9,10,11,12}-test-instrumentation-botocore ; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736 ; pypy3-test-instrumentation-botocore lint-instrumentation-botocore ; opentelemetry-instrumentation-boto3sqs - py3{8,9,10,11}-test-instrumentation-boto3sqs + py3{8,9,10,11,12}-test-instrumentation-boto3sqs ; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736 ; pypy3-test-instrumentation-boto3sqs lint-instrumentation-boto3sqs @@ -71,18 +71,18 @@ envlist = py3{8,9}-test-instrumentation-django-0 py3{8,9}-test-instrumentation-django-1 py3{8,9}-test-instrumentation-django-2 - py3{10,11}-test-instrumentation-django-1 - py3{10,11}-test-instrumentation-django-3 + py3{10,11,12}-test-instrumentation-django-1 + py3{10,11,12}-test-instrumentation-django-3 pypy3-test-instrumentation-django-{0,1} lint-instrumentation-django ; opentelemetry-instrumentation-dbapi - py3{8,9,10,11}-test-instrumentation-dbapi + py3{8,9,10,11,12}-test-instrumentation-dbapi pypy3-test-instrumentation-dbapi lint-instrumentation-dbapi ; opentelemetry-instrumentation-boto - py3{8,9,10,11}-test-instrumentation-boto + py3{8,9,10,11,12}-test-instrumentation-boto ; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736 ; pypy3-test-instrumentation-boto lint-instrumentation-boto @@ -93,7 +93,7 @@ envlist = ; 0: elasticsearch-dsl==6.4.0 elasticsearch==6.8.2 ; 1: elasticsearch-dsl==7.4.1 elasticsearch==7.17.9 ; 2: elasticsearch-dsl>=8.0,<8.13 elasticsearch>=8.0,<8.13 - py3{8,9,10,11}-test-instrumentation-elasticsearch-{0,1,2} + py3{8,9,10,11,12}-test-instrumentation-elasticsearch-{0,1,2} pypy3-test-instrumentation-elasticsearch-{0,1,2} lint-instrumentation-elasticsearch @@ -105,12 +105,12 @@ envlist = ; 1: falcon >=2.0.0,<3.0.0 ; 2: falcon >=3.0.0,<4.0.0 py3{8,9}-test-instrumentation-falcon-0 - py3{8,9,10,11}-test-instrumentation-falcon-{1,2} + py3{8,9,10,11,12}-test-instrumentation-falcon-{1,2} pypy3-test-instrumentation-falcon-{0,1,2} lint-instrumentation-falcon ; opentelemetry-instrumentation-fastapi - py3{8,9,10,11}-test-instrumentation-fastapi + py3{8,9,10,11,12}-test-instrumentation-fastapi pypy3-test-instrumentation-fastapi lint-instrumentation-fastapi @@ -120,13 +120,13 @@ envlist = ; 0: Flask ==2.1.3 Werkzeug <3.0.0 ; 1: Flask ==2.2.0 Werkzeug <3.0.0 ; 2: Flask >=3.0.0 Werkzeug >=3.0.0 - py3{8,9,10,11}-test-instrumentation-flask-{0,1} - py3{8,9,10,11}-test-instrumentation-flask-{2} + py3{8,9,10,11,12}-test-instrumentation-flask-{0,1} + py3{8,9,10,11,12}-test-instrumentation-flask-{2} pypy3-test-instrumentation-flask-{0,1} lint-instrumentation-flask ; opentelemetry-instrumentation-urllib - py3{8,9,10,11}-test-instrumentation-urllib + py3{8,9,10,11,12}-test-instrumentation-urllib pypy3-test-instrumentation-urllib lint-instrumentation-urllib @@ -135,47 +135,47 @@ envlist = ; below mean these dependencies are being used: ; 0: urllib3 >=1.0.0,<2.0.0 ; 1: urllib3 >=2.0.0,<3.0.0 - py3{8,9,10,11}-test-instrumentation-urllib3-{0,1} + py3{8,9,10,11,12}-test-instrumentation-urllib3-{0,1} pypy3-test-instrumentation-urllib3-{0,1} lint-instrumentation-urllib3 ; opentelemetry-instrumentation-requests - py3{8,9,10,11}-test-instrumentation-requests + py3{8,9,10,11,12}-test-instrumentation-requests ;pypy3-test-instrumentation-requests lint-instrumentation-requests ; opentelemetry-instrumentation-starlette - py3{8,9,10,11}-test-instrumentation-starlette + py3{8,9,10,11,12}-test-instrumentation-starlette pypy3-test-instrumentation-starlette lint-instrumentation-starlette ; opentelemetry-instrumentation-jinja2 - py3{8,9,10,11}-test-instrumentation-jinja2 + py3{8,9,10,11,12}-test-instrumentation-jinja2 pypy3-test-instrumentation-jinja2 lint-instrumentation-jinja2 ; opentelemetry-instrumentation-logging - py3{8,9,10,11}-test-instrumentation-logging + py3{8,9,10,11,12}-test-instrumentation-logging pypy3-test-instrumentation-logging lint-instrumentation-logging ; opentelemetry-exporter-richconsole - py3{8,9,10,11}-test-exporter-richconsole + py3{8,9,10,11,12}-test-exporter-richconsole pypy3-test-exporter-richconsole lint-exporter-richconsole ; opentelemetry-exporter-prometheus-remote-write - py3{8,9,10,11}-test-exporter-prometheus-remote-write + py3{8,9,10,11,12}-test-exporter-prometheus-remote-write pypy3-test-exporter-prometheus-remote-write lint-exporter-prometheus-remote-write ; opentelemetry-instrumentation-mysql - py3{8,9,10,11}-test-instrumentation-mysql + py3{8,9,10,11,12}-test-instrumentation-mysql pypy3-test-instrumentation-mysql lint-instrumentation-mysql ; opentelemetry-instrumentation-mysqlclient - py3{8,9,10,11}-test-instrumentation-mysqlclient + py3{8,9,10,11,12}-test-instrumentation-mysqlclient pypy3-test-instrumentation-mysqlclient ; prerequisite: follow the instructions here ; https://github.com/PyMySQL/mysqlclient#install @@ -183,12 +183,12 @@ envlist = lint-instrumentation-mysqlclient ; opentelemetry-instrumentation-psycopg2 - py3{8,9,10,11}-test-instrumentation-psycopg2 + py3{8,9,10,11,12}-test-instrumentation-psycopg2 ; ext-psycopg2 intentionally excluded from pypy3 lint-instrumentation-psycopg2 ; opentelemetry-instrumentation-psycopg - py3{8,9,10,11}-test-instrumentation-psycopg + py3{8,9,10,11,12}-test-instrumentation-psycopg pypy3-test-instrumentation-psycopg lint-instrumentation-psycopg @@ -200,47 +200,47 @@ envlist = ; 2: pymemcache >3.0.0,<3.4.2 ; 3: pymemcache ==3.4.2 ; 4: pymemcache ==4.0.0 - py3{8,9,10,11}-test-instrumentation-pymemcache-{0,1,2,3,4} + py3{8,9,10,11,12}-test-instrumentation-pymemcache-{0,1,2,3,4} pypy3-test-instrumentation-pymemcache-{0,1,2,3,4} lint-instrumentation-pymemcache ; opentelemetry-instrumentation-pymongo - py3{8,9,10,11}-test-instrumentation-pymongo + py3{8,9,10,11,12}-test-instrumentation-pymongo pypy3-test-instrumentation-pymongo lint-instrumentation-pymongo ; opentelemetry-instrumentation-pymysql - py3{8,9,10,11}-test-instrumentation-pymysql + py3{8,9,10,11,12}-test-instrumentation-pymysql pypy3-test-instrumentation-pymysql lint-instrumentation-pymysql ; opentelemetry-instrumentation-pyramid - py3{8,9,10,11}-test-instrumentation-pyramid + py3{8,9,10,11,12}-test-instrumentation-pyramid pypy3-test-instrumentation-pyramid lint-instrumentation-pyramid ; opentelemetry-instrumentation-asgi - py3{8,9,10,11}-test-instrumentation-asgi + py3{8,9,10,11,12}-test-instrumentation-asgi pypy3-test-instrumentation-asgi lint-instrumentation-asgi ; opentelemetry-instrumentation-asyncpg - py3{8,9,10,11}-test-instrumentation-asyncpg + py3{8,9,10,11,12}-test-instrumentation-asyncpg ; ext-asyncpg intentionally excluded from pypy3 lint-instrumentation-asyncpg ; opentelemetry-instrumentation-sqlite3 - py3{8,9,10,11}-test-instrumentation-sqlite3 + py3{8,9,10,11,12}-test-instrumentation-sqlite3 pypy3-test-instrumentation-sqlite3 lint-instrumentation-sqlite3 ; opentelemetry-instrumentation-wsgi - py3{8,9,10,11}-test-instrumentation-wsgi + py3{8,9,10,11,12}-test-instrumentation-wsgi pypy3-test-instrumentation-wsgi lint-instrumentation-wsgi ; opentelemetry-instrumentation-grpc - py3{8,9,10,11}-test-instrumentation-grpc + py3{8,9,10,11,12}-test-instrumentation-grpc pypy3-test-instrumentation-grpc lint-instrumentation-grpc @@ -249,22 +249,22 @@ envlist = ; below mean these dependencies are being used: ; 0: sqlalchemy>=1.1,<1.2 ; 1: sqlalchemy~=1.4 aiosqlite - py3{8,9,10,11}-test-instrumentation-sqlalchemy-{1} + py3{8,9,10,11,12}-test-instrumentation-sqlalchemy-{1} pypy3-test-instrumentation-sqlalchemy-{0,1} lint-instrumentation-sqlalchemy ; opentelemetry-instrumentation-redis - py3{8,9,10,11}-test-instrumentation-redis + py3{8,9,10,11,12}-test-instrumentation-redis pypy3-test-instrumentation-redis lint-instrumentation-redis ; opentelemetry-instrumentation-remoulade - py3{8,9,10,11}-test-instrumentation-remoulade + py3{8,9,10,11,12}-test-instrumentation-remoulade ; instrumentation-remoulade intentionally excluded from pypy3 lint-instrumentation-remoulade ; opentelemetry-instrumentation-celery - py3{8,9,10,11}-test-instrumentation-celery + py3{8,9,10,11,12}-test-instrumentation-celery pypy3-test-instrumentation-celery lint-instrumentation-celery @@ -273,22 +273,22 @@ envlist = lint-instrumentation-sklearn ; opentelemetry-instrumentation-system-metrics - py3{8,9,10,11}-test-instrumentation-system-metrics + py3{8,9,10,11,12}-test-instrumentation-system-metrics pypy3-test-instrumentation-system-metrics lint-instrumentation-system-metrics ; opentelemetry-instrumentation-threading - py3{8,9,10,11}-test-instrumentation-threading + py3{8,9,10,11,12}-test-instrumentation-threading pypy3-test-instrumentation-threading lint-instrumentation-threading ; opentelemetry-instrumentation-tornado - py3{8,9,10,11}-test-instrumentation-tornado + py3{8,9,10,11,12}-test-instrumentation-tornado pypy3-test-instrumentation-tornado lint-instrumentation-tornado ; opentelemetry-instrumentation-tortoiseorm - py3{8,9,10,11}-test-instrumentation-tortoiseorm + py3{8,9,10,11,12}-test-instrumentation-tortoiseorm pypy3-test-instrumentation-tortoiseorm lint-instrumentation-tortoiseorm @@ -297,21 +297,21 @@ envlist = ; below mean these dependencies are being used: ; 0: httpx>=0.18.0,<0.19.0 respx~=0.17.0 ; 1: httpx>=0.19.0 respx~=0.20.1 - py3{8,9,10,11}-test-instrumentation-httpx-{0,1} + py3{8,9,10,11,12}-test-instrumentation-httpx-{0,1} pypy3-test-instrumentation-httpx-{0,1} lint-instrumentation-httpx ; opentelemetry-util-http - py3{8,9,10,11}-test-util-http + py3{8,9,10,11,12}-test-util-http pypy3-test-util-http ; opentelemetry-propagator-aws-xray - py3{8,9,10,11}-test-propagator-aws-xray + py3{8,9,10,11,12}-test-propagator-aws-xray pypy3-test-propagator-aws-xray lint-propagator-aws-xray ; opentelemetry-propagator-ot-trace - py3{8,9,10,11}-test-propagator-ot-trace + py3{8,9,10,11,12}-test-propagator-ot-trace pypy3-test-propagator-ot-trace lint-propagator-ot-trace @@ -320,7 +320,7 @@ envlist = ; below mean these dependencies are being used: ; 0: pika>=0.12.0,<1.0.0 ; 1: pika>=1.0.0 - py3{8,9,10,11}-test-instrumentation-sio-pika-{0,1} + py3{8,9,10,11,12}-test-instrumentation-sio-pika-{0,1} pypy3-test-instrumentation-sio-pika-{0,1} lint-instrumentation-sio-pika @@ -331,31 +331,31 @@ envlist = ; 1: aio_pika==8.3.0 ; 2: aio_pika==9.0.5 ; 3: aio_pika==9.4.1 - py3{8,9,10,11}-test-instrumentation-aio-pika-{0,1,2,3} + py3{8,9,10,11,12}-test-instrumentation-aio-pika-{0,1,2,3} pypy3-test-instrumentation-aio-pika-{0,1,2,3} lint-instrumentation-aio-pika ; opentelemetry-instrumentation-kafka-python - py3{8,9,10,11}-test-instrumentation-kafka-python + py3{8,9,10,11,12}-test-instrumentation-kafka-python pypy3-test-instrumentation-kafka-python lint-instrumentation-kafka-python ; opentelemetry-instrumentation-confluent-kafka - py3{8,9,10,11}-test-instrumentation-confluent-kafka + py3{8,9,10,11,12}-test-instrumentation-confluent-kafka pypy3-test-instrumentation-confluent-kafka lint-instrumentation-confluent-kafka ; opentelemetry-instrumentation-asyncio - py3{8,9,10,11}-test-instrumentation-asyncio + py3{8,9,10,11,12}-test-instrumentation-asyncio lint-instrumentation-asyncio ; opentelemetry-instrumentation-cassandra - py3{8,9,10,11}-test-instrumentation-cassandra + py3{8,9,10,11,12}-test-instrumentation-cassandra pypy3-test-instrumentation-cassandra lint-instrumentation-cassandra ; opentelemetry-processor-baggage - py3{8,9,10,11}-test-processor-baggage + py3{8,9,10,11,12}-test-processor-baggage pypy3-test-processor-baggage ; requires snappy headers to be available on the system lint-processor-baggage @@ -409,7 +409,7 @@ commands_pre = celery: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk celery: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils py3{8,9}-test-instrumentation-celery: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-0.txt - py3{10,11}-test-instrumentation-celery: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt + py3{10,11,12}-test-instrumentation-celery: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt pypy3-test-instrumentation-celery: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt lint-instrumentation-celery: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt @@ -533,8 +533,8 @@ commands_pre = py3{8,9}-test-instrumentation-django-0: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-0.txt py3{8,9}-test-instrumentation-django-1: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt py3{8,9}-test-instrumentation-django-2: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-2.txt - py3{10,11}-test-instrumentation-django-1: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt - py3{10,11}-test-instrumentation-django-3: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-3.txt + py3{10,11,12}-test-instrumentation-django-1: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt + py3{10,11,12}-test-instrumentation-django-3: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-3.txt pypy3-test-instrumentation-django-0: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-0.txt pypy3-test-instrumentation-django-1: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt lint-instrumentation-django: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-3.txt @@ -579,7 +579,7 @@ commands_pre = psycopg: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk psycopg: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils py3{8,9}-test-instrumentation-psycopg: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-0.txt - py3{10,11}-test-instrumentation-psycopg: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt + py3{10,11,12}-test-instrumentation-psycopg: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt pypy3-test-instrumentation-psycopg: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt lint-instrumentation-psycopg: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt