diff --git a/.github/actions/setup-python-matrix/action.yml b/.github/actions/setup-python-matrix/action.yml deleted file mode 100644 index a11e2197c..000000000 --- a/.github/actions/setup-python-matrix/action.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: "setup-python-matrix" -description: "Sets up all versions of python required for matrix testing in this repo." -runs: - using: "composite" - steps: - - uses: actions/setup-python@v4 - with: - python-version: "pypy-3.7" - architecture: x64 - - # - uses: actions/setup-python@v4 - # with: - # python-version: "pypy-2.7" - # architecture: x64 - - - uses: actions/setup-python@v4 - with: - python-version: "3.7" - architecture: x64 - - - uses: actions/setup-python@v4 - with: - python-version: "3.8" - architecture: x64 - - - uses: actions/setup-python@v4 - with: - python-version: "3.9" - architecture: x64 - - - uses: actions/setup-python@v4 - with: - python-version: "3.10" - architecture: x64 - - - uses: actions/setup-python@v4 - with: - python-version: "3.11" - architecture: x64 - - # - uses: actions/setup-python@v4 - # with: - # python-version: "2.7" - # architecture: x64 - - - name: Install Dependencies - shell: bash - run: | - python3.10 -m pip install -U pip - python3.10 -m pip install -U wheel setuptools tox 'virtualenv<20.22.0' diff --git a/.github/containers/Dockerfile b/.github/containers/Dockerfile index 260c01d89..8d3a187cc 100644 --- a/.github/containers/Dockerfile +++ b/.github/containers/Dockerfile @@ -79,7 +79,7 @@ RUN echo 'eval "$(pyenv init -)"' >>$HOME/.bashrc && \ pyenv update # Install Python -ARG PYTHON_VERSIONS="3.10 3.9 3.8 3.7 3.11 2.7 pypy2.7-7.3.11 pypy3.7" +ARG PYTHON_VERSIONS="3.10 3.9 3.8 3.7 3.11 2.7 pypy2.7-7.3.11 pypy3.8" COPY --chown=1000:1000 --chmod=+x ./install-python.sh /tmp/install-python.sh COPY ./requirements.txt /requirements.txt RUN /tmp/install-python.sh && \ diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f4cb8b822..52576c155 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -119,7 +119,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -164,7 +164,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -209,7 +209,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -269,7 +269,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -332,7 +332,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -395,7 +395,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -453,7 +453,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -513,7 +513,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -571,7 +571,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -630,7 +630,7 @@ jobs: # runs-on: ubuntu-20.04 # container: - # image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + # image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 # options: >- # --add-host=host.docker.internal:host-gateway # timeout-minutes: 30 @@ -710,7 +710,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -768,7 +768,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -828,7 +828,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 @@ -889,7 +889,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: ghcr.io/newrelic/newrelic-python-agent-ci:latest + image: ghcr.io/newrelic/newrelic-python-agent-ci:sha-b0ffe8bdbb28ba0579377076ad680054da8fbc28 options: >- --add-host=host.docker.internal:host-gateway timeout-minutes: 30 diff --git a/tox.ini b/tox.ini index 94722ce8b..29b74feae 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ ; framework_aiohttp-aiohttp01: aiohttp<2 ; framework_aiohttp-aiohttp0202: aiohttp<2.3 ; 3. Python version required. Uses the standard tox definitions. (https://tox.readthedocs.io/en/latest/config.html#tox-environments) -; Examples: py27,py37,py38,py39,pypy27,pypy37 +; Examples: py27,py37,py38,py39,pypy27,pypy38 ; 4. Library and version (Optional). Used when testing multiple versions of the library, and may be omitted when only testing a single version. ; Versions should be specified with 2 digits per version number, so <3 becomes 02 and <3.5 becomes 0304. latest and master are also acceptable versions. ; Examples: uvicorn03, CherryPy0302, uvicornlatest @@ -28,7 +28,7 @@ ; 5. With or without New Relic C extensions (Optional). Used for testing agent features. ; Examples: with_extensions, without_extensions ; envlist = -; python-agent_features-pypy37-without_extensions, +; python-agent_features-pypy38-without_extensions, ; python-agent_streaming-py37-{with,without}_extensions, ; ; Full Format: @@ -42,6 +42,8 @@ [tox] requires = virtualenv<20.22.0 setupdir = {toxinidir} +; Fail tests when interpreters are missing. +skip_missing_interpreters = false envlist = python-adapter_cheroot-{py27,py37,py38,py39,py310,py311}, python-adapter_daphne-{py37,py38,py39,py310,py311}-daphnelatest, @@ -56,29 +58,29 @@ envlist = python-adapter_waitress-{py37,py38,py39,py310}-waitress02, python-adapter_waitress-{py37,py38,py39,py310,py311}-waitresslatest, python-agent_features-{py27,py37,py38,py39,py310,py311}-{with,without}_extensions, - python-agent_features-{pypy27,pypy37}-without_extensions, + python-agent_features-{pypy27,pypy38}-without_extensions, python-agent_streaming-py27-grpc0125-{with,without}_extensions, python-agent_streaming-{py37,py38,py39,py310,py311}-protobuf04-{with,without}_extensions, python-agent_streaming-py39-protobuf{03,0319}-{with,without}_extensions, python-agent_unittests-{py27,py37,py38,py39,py310,py311}-{with,without}_extensions, - python-agent_unittests-{pypy27,pypy37}-without_extensions, - python-application_celery-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, + python-agent_unittests-{pypy27,pypy38}-without_extensions, + python-application_celery-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, gearman-application_gearman-{py27,pypy27}, python-component_djangorestframework-py27-djangorestframework0300, python-component_djangorestframework-{py37,py38,py39,py310,py311}-djangorestframeworklatest, - python-component_flask_rest-{py37,py38,py39,pypy37}-flaskrestxlatest, + python-component_flask_rest-{py37,py38,py39,pypy38}-flaskrestxlatest, python-component_flask_rest-{py27,pypy27}-flaskrestx051, python-component_graphqlserver-{py37,py38,py39,py310,py311}, python-component_tastypie-{py27,pypy27}-tastypie0143, - python-component_tastypie-{py37,py38,py39,pypy37}-tastypie{0143,latest}, - python-coroutines_asyncio-{py37,py38,py39,py310,py311,pypy37}, + python-component_tastypie-{py37,py38,py39,pypy38}-tastypie{0143,latest}, + python-coroutines_asyncio-{py37,py38,py39,py310,py311,pypy38}, python-cross_agent-{py27,py37,py38,py39,py310,py311}-{with,without}_extensions, python-cross_agent-pypy27-without_extensions, postgres-datastore_asyncpg-{py37,py38,py39,py310,py311}, memcached-datastore_bmemcached-{pypy27,py27,py37,py38,py39,py310,py311}-memcached030, - elasticsearchserver07-datastore_elasticsearch-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}-elasticsearch07, - elasticsearchserver08-datastore_elasticsearch-{py37,py38,py39,py310,py311,pypy37}-elasticsearch08, - memcached-datastore_memcache-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}-memcached01, + elasticsearchserver07-datastore_elasticsearch-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}-elasticsearch07, + elasticsearchserver08-datastore_elasticsearch-{py37,py38,py39,py310,py311,pypy38}-elasticsearch08, + memcached-datastore_memcache-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}-memcached01, mysql-datastore_mysql-mysql080023-py27, mysql-datastore_mysql-mysqllatest-{py37,py38,py39,py310,py311}, postgres-datastore_postgresql-{py37,py38,py39}, @@ -86,83 +88,83 @@ envlist = postgres-datastore_psycopg2cffi-{py27,pypy27,py37,py38,py39,py310,py311}-psycopg2cffilatest, postgres-datastore_pyodbc-{py27,py37,py311}-pyodbclatest memcached-datastore_pylibmc-{py27,py37}, - memcached-datastore_pymemcache-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, + memcached-datastore_pymemcache-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, mongodb-datastore_pymongo-{py27,py37,py38,py39,py310,py311,pypy27}-pymongo{03}, - mongodb-datastore_pymongo-{py37,py38,py39,py310,py311,pypy27,pypy37}-pymongo04, + mongodb-datastore_pymongo-{py37,py38,py39,py310,py311,pypy27,pypy38}-pymongo04, mssql-datastore_pymssql-{py37,py38,py39,py310,py311}, - mysql-datastore_pymysql-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, - solr-datastore_pysolr-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, - redis-datastore_redis-{py27,py37,py38,pypy27,pypy37}-redis03, - redis-datastore_redis-{py37,py38,py39,py310,py311,pypy37}-redis{0400,latest}, - redis-datastore_aioredis-{py37,py38,py39,py310,pypy37}-aioredislatest, - redis-datastore_aioredis-{py37,py38,py39,py310,py311,pypy37}-redislatest, - redis-datastore_aredis-{py37,py38,py39,pypy37}-aredislatest, + mysql-datastore_pymysql-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, + solr-datastore_pysolr-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, + redis-datastore_redis-{py27,py37,py38,pypy27,pypy38}-redis03, + redis-datastore_redis-{py37,py38,py39,py310,py311,pypy38}-redis{0400,latest}, + redis-datastore_aioredis-{py37,py38,py39,py310,pypy38}-aioredislatest, + redis-datastore_aioredis-{py37,py38,py39,py310,py311,pypy38}-redislatest, + redis-datastore_aredis-{py37,py38,py39,pypy38}-aredislatest, solr-datastore_solrpy-{py27,pypy27}-solrpy{00,01}, - python-datastore_sqlite-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, + python-datastore_sqlite-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, python-external_boto3-{py27,py37,py38,py39,py310,py311}-boto01, python-external_botocore-{py37,py38,py39,py310,py311}-botocorelatest, python-external_botocore-{py311}-botocore128, python-external_botocore-py310-botocore0125, python-external_feedparser-py27-feedparser{05,06}, python-external_http-{py27,py37,py38,py39,py310,py311,pypy27}, - python-external_httplib-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, - python-external_httplib2-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, + python-external_httplib-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, + python-external_httplib2-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, python-external_httpx-{py37,py38,py39,py310,py311}, - python-external_requests-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, + python-external_requests-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, python-external_urllib3-{py27,py37,pypy27}-urllib3{0109}, - python-external_urllib3-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}-urllib3latest, - python-framework_aiohttp-{py37,py38,py39,py310,py311,pypy37}-aiohttp03, + python-external_urllib3-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}-urllib3latest, + python-framework_aiohttp-{py37,py38,py39,py310,py311,pypy38}-aiohttp03, python-framework_ariadne-{py37,py38,py39,py310,py311}-ariadnelatest, python-framework_ariadne-py37-ariadne{0011,0012,0013}, python-framework_bottle-py27-bottle{0008,0009,0010}, - python-framework_bottle-{py27,py37,py38,py39,pypy37}-bottle{0011,0012}, + python-framework_bottle-{py27,py37,py38,py39,pypy38}-bottle{0011,0012}, python-framework_bottle-{py310,py311}-bottle0012, python-framework_bottle-pypy27-bottle{0008,0009,0010,0011,0012}, ; CherryPy still uses inspect.getargspec, deprecated in favor of inspect.getfullargspec. Not supported in 3.11 - python-framework_cherrypy-{py37,py38,py39,py310,py311,pypy37}-CherryPylatest, + python-framework_cherrypy-{py37,py38,py39,py310,py311,pypy38}-CherryPylatest, python-framework_django-{pypy27,py27}-Django0103, python-framework_django-{pypy27,py27,py37}-Django0108, python-framework_django-{py39}-Django{0200,0201,0202,0300,0301,latest}, python-framework_django-{py37,py38,py39,py310,py311}-Django0302, - python-framework_falcon-{py27,py37,py38,py39,pypy27,pypy37}-falcon0103, - python-framework_falcon-{py37,py38,py39,py310,pypy37}-falcon{0200,master}, + python-framework_falcon-{py27,py37,py38,py39,pypy27,pypy38}-falcon0103, + python-framework_falcon-{py37,py38,py39,py310,pypy38}-falcon{0200,master}, # Falcon master branch failing on 3.11 currently. python-framework_falcon-py311-falcon0200, python-framework_fastapi-{py37,py38,py39,py310,py311}, python-framework_flask-{pypy27,py27}-flask0012, - python-framework_flask-{pypy27,py27,py37,py38,py39,py310,py311,pypy37}-flask0101, + python-framework_flask-{pypy27,py27,py37,py38,py39,py310,py311,pypy38}-flask0101, ; temporarily disabling flaskmaster tests - python-framework_flask-{py37,py38,py39,py310,py311,pypy37}-flask{latest}, + python-framework_flask-{py37,py38,py39,py310,py311,pypy38}-flask{latest}, python-framework_graphene-{py37,py38,py39,py310,py311}-graphenelatest, - python-framework_graphene-{py27,py37,py38,py39,pypy27,pypy37}-graphene{0200,0201}, + python-framework_graphene-{py27,py37,py38,py39,pypy27,pypy38}-graphene{0200,0201}, python-framework_graphene-{py310,py311}-graphene0201, - python-framework_graphql-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}-graphql02, - python-framework_graphql-{py37,py38,py39,py310,py311,pypy37}-graphql03, + python-framework_graphql-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}-graphql02, + python-framework_graphql-{py37,py38,py39,py310,py311,pypy38}-graphql03, ; temporarily disabling graphqlmaster tests python-framework_graphql-py37-graphql{0202,0203,0300,0301,0302}, grpc-framework_grpc-py27-grpc0125, grpc-framework_grpc-{py37,py38,py39,py310,py311}-grpclatest, python-framework_pyramid-{pypy27,py27,py38}-Pyramid0104, - python-framework_pyramid-{pypy27,py27,pypy37,py37,py38,py39,py310,py311}-Pyramid0110-cornice, - python-framework_pyramid-{py37,py38,py39,py310,py311,pypy37}-Pyramidlatest, - python-framework_sanic-{py38,pypy37}-sanic{190301,1906,1912,200904,210300,2109,2112,2203,2290}, - python-framework_sanic-{py37,py38,py39,py310,py311,pypy37}-saniclatest, - python-framework_starlette-{py310,pypy37}-starlette{0014,0015,0019}, + python-framework_pyramid-{pypy27,py27,pypy38,py37,py38,py39,py310,py311}-Pyramid0110-cornice, + python-framework_pyramid-{py37,py38,py39,py310,py311,pypy38}-Pyramidlatest, + python-framework_sanic-{py38,pypy38}-sanic{190301,1906,1912,200904,210300,2109,2112,2203,2290}, + python-framework_sanic-{py37,py38,py39,py310,py311,pypy38}-saniclatest, + python-framework_starlette-{py310,pypy38}-starlette{0014,0015,0019}, python-framework_starlette-{py37,py38}-starlette{002001}, - python-framework_starlette-{py37,py38,py39,py310,py311,pypy37}-starlettelatest, + python-framework_starlette-{py37,py38,py39,py310,py311,pypy38}-starlettelatest, python-framework_strawberry-{py37,py38,py39,py310,py311}-strawberrylatest, - python-logger_logging-{py27,py37,py38,py39,py310,py311,pypy27,pypy37}, - python-logger_loguru-{py37,py38,py39,py310,py311,pypy37}-logurulatest, + python-logger_logging-{py27,py37,py38,py39,py310,py311,pypy27,pypy38}, + python-logger_loguru-{py37,py38,py39,py310,py311,pypy38}-logurulatest, python-logger_loguru-py39-loguru{06,05,04,03}, - python-framework_tornado-{py37,py38,py39,py310,py311,pypy37}-tornado0600, + python-framework_tornado-{py38,py39,py310,py311}-tornadolatest, python-framework_tornado-{py38,py39,py310,py311}-tornadomaster, - rabbitmq-messagebroker_pika-{py27,py37,py38,py39,pypy27,pypy37}-pika0.13, - rabbitmq-messagebroker_pika-{py37,py38,py39,py310,py311,pypy37}-pikalatest, + rabbitmq-messagebroker_pika-{py27,py37,py38,py39,pypy27,pypy38}-pika0.13, + rabbitmq-messagebroker_pika-{py37,py38,py39,py310,py311,pypy38}-pikalatest, kafka-messagebroker_confluentkafka-{py27,py37,py38,py39,py310,py311}-confluentkafkalatest, kafka-messagebroker_confluentkafka-{py27,py39}-confluentkafka{0107,0106}, ; confluent-kafka had a bug in 1.8.2's setup.py file which was incompatible with 2.7. kafka-messagebroker_confluentkafka-{py39}-confluentkafka{0108}, - kafka-messagebroker_kafkapython-{pypy27,py27,py37,py38,pypy37}-kafkapythonlatest, + kafka-messagebroker_kafkapython-{pypy27,py27,py37,py38,pypy38}-kafkapythonlatest, kafka-messagebroker_kafkapython-{py27,py38}-kafkapython{020001,020000,0104}, python-template_genshi-{py27,py37,py311}-genshilatest python-template_mako-{py27,py37,py310,py311} @@ -170,7 +172,7 @@ envlist = [testenv] deps = # Base Dependencies - {py37,py38,py39,py310,py311,pypy37}: pytest==7.2.2 + {py37,py38,py39,py310,py311,pypy38}: pytest==7.2.2 {py27,pypy27}: pytest==4.6.11 iniconfig coverage @@ -202,7 +204,7 @@ deps = adapter_waitress-waitresslatest: waitress agent_features: beautifulsoup4 application_celery: celery<6.0 - application_celery-{py37,pypy37}: importlib-metadata<5.0 + application_celery-{py37,pypy38}: importlib-metadata<5.0 application_gearman: gearman<3.0.0 component_djangorestframework-djangorestframework0300: Django<1.9 component_djangorestframework-djangorestframework0300: djangorestframework<3.1 @@ -221,8 +223,8 @@ deps = component_graphqlserver: jinja2<3.1 component_tastypie-tastypie0143: django-tastypie<0.14.4 component_tastypie-{py27,pypy27}-tastypie0143: django<1.12 - component_tastypie-{py37,py38,py39,py310,py311,pypy37}-tastypie0143: django<3.0.1 - component_tastypie-{py37,py38,py39,py310,py311,pypy37}-tastypie0143: asgiref<3.7.1 # asgiref==3.7.1 only suppport Python 3.10+ + component_tastypie-{py37,py38,py39,py310,py311,pypy38}-tastypie0143: django<3.0.1 + component_tastypie-{py37,py38,py39,py310,py311,pypy38}-tastypie0143: asgiref<3.7.1 # asgiref==3.7.1 only suppport Python 3.10+ component_tastypie-tastypielatest: django-tastypie component_tastypie-tastypielatest: django<4.1 component_tastypie-tastypielatest: asgiref<3.7.1 # asgiref==3.7.1 only suppport Python 3.10+ @@ -360,7 +362,7 @@ deps = framework_strawberry: starlette framework_strawberry-strawberrylatest: strawberry-graphql framework_tornado: pycurl - framework_tornado-tornado0600: tornado<6.1 + framework_tornado-tornadolatest: tornado framework_tornado-tornadomaster: https://github.com/tornadoweb/tornado/archive/master.zip logger_loguru-logurulatest: loguru logger_loguru-loguru06: loguru<0.7 @@ -391,9 +393,9 @@ setenv = without_extensions: NEW_RELIC_EXTENSIONS = false agent_features: NEW_RELIC_APDEX_T = 1000 framework_grpc: PYTHONPATH={toxinidir}/tests/:{toxinidir}/tests/framework_grpc/sample_application - framework_tornado: PYCURL_SSL_LIBRARY=openssl - framework_tornado: LDFLAGS=-L/usr/local/opt/openssl/lib - framework_tornado: CPPFLAGS=-I/usr/local/opt/openssl/include + framework_tornado-{py38,py39,py310,py311}: PYCURL_SSL_LIBRARY=openssl + framework_tornado-{py38,py39,py310,py311}: LDFLAGS=-L/usr/local/opt/openssl/lib + framework_tornado-{py38,py39,py310,py311}: CPPFLAGS=-I/usr/local/opt/openssl/include passenv = NEW_RELIC_DEVELOPER_MODE @@ -408,7 +410,7 @@ commands = framework_grpc: --grpc_python_out={toxinidir}/tests/framework_grpc/sample_application \ framework_grpc: /{toxinidir}/tests/framework_grpc/sample_application/sample_application.proto - framework_tornado: pip install --ignore-installed --config-settings="--build-option=--with-openssl" pycurl + framework_tornado-{py38,py39,py310,py311}: pip install --ignore-installed --config-settings="--build-option=--with-openssl" pycurl coverage run -m pytest -v [] allowlist_externals={toxinidir}/.github/scripts/*