This repository has been archived by the owner on Oct 17, 2024. It is now read-only.
forked from newrelic/newrelic-python-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tox.ini
537 lines (520 loc) · 27 KB
/
tox.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
; Formatting Conventions
; Each part of the env name
; 1. Services required to be present to run test suite. Allows us to select which Github Actions runner to place the test suite on.
; Examples: postgres, mysql, python (pure python, no service required)
; 2. Folder under tests/ that includes the test suite.
; Requires an entry under changedir to run the test suite from the correct folder.
; Should be prepended to any deps definitions as well to prevent environments from colliding.
; Examples: adapter_gunicorn, datastore_asyncpg, framework_aiohttp
; changedir =
; adapter_gunicorn: tests/adapter_gunicorn
; datastore_asyncpg: tests/datastore_asyncpg
; framework_aiohttp: tests/framework_aiohttp
; deps =
; adapter_gunicorn-gunicornlatest: gunicorn
; datastore_asyncpg: asyncpg
; 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,pypy310
; 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
; deps =
; adapter_uvicorn-uvicorn03: uvicorn<0.4
; adapter_uvicorn-uvicornlatest: uvicorn
; framework_cherrypy-CherryPy0302: CherryPy<3.3.0
; framework_cherrypy-CherryPy0303: CherryPy<3.4.0
; 5. With or without New Relic C extensions (Optional). Used for testing agent features.
; Examples: with_extensions, without_extensions
; envlist =
; python-agent_features-pypy310-without_extensions,
; python-agent_streaming-py37-{with,without}_extensions,
;
; Full Format:
; services_required-tests_folder-python_version-library_and_version[optional]-with/without_c_extensions[optional]
;
; Full Examples:
; - memcached-datastore_bmemcached-py37-memcached030
; - python-agent_unittests-py38-with_extensions
; - python-adapter_gevent-py27
[tox]
requires = virtualenv<20.22.0
setupdir = {toxinidir}
; Fail tests when interpreters are missing.
skip_missing_interpreters = false
envlist =
elasticsearchserver07-datastore_elasticsearch-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310}-elasticsearch07,
elasticsearchserver08-datastore_elasticsearch-{py37,py38,py39,py310,py311,py312,pypy310}-elasticsearch08,
firestore-datastore_firestore-{py37,py38,py39,py310,py311,py312},
grpc-framework_grpc-{py37,py38,py39,py310,py311,py312}-grpclatest,
grpc-framework_grpc-py27-grpc0125,
kafka-messagebroker_confluentkafka-{py27,py39}-confluentkafka{0107,0106},
kafka-messagebroker_confluentkafka-{py37,py38,py39,py310,py311,py312}-confluentkafkalatest,
; 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-{py27,py38}-kafkapython{020001,020000},
kafka-messagebroker_kafkapython-{pypy27,py27,py37,py38,pypy310}-kafkapythonlatest,
memcached-datastore_bmemcached-{pypy27,py27,py37,py38,py39,py310,py311,py312}-memcached030,
memcached-datastore_memcache-{py37,py38,py39,py310,py311,py312,pypy310}-memcached01,
memcached-datastore_pylibmc-{py27,py37},
memcached-datastore_pymemcache-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
mongodb-datastore_pymongo-{py27,py37,py38,py39,py310,py311,py312,pypy27}-pymongo03,
mongodb-datastore_pymongo-{py37,py38,py39,py310,py311,py312,pypy27,pypy310}-pymongo04,
mssql-datastore_pymssql-{py37,py38,py39,py310,py311,py312},
mysql-datastore_mysql-mysql080023-py27,
mysql-datastore_mysql-mysqllatest-{py37,py38,py39,py310,py311,py312},
mysql-datastore_pymysql-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
postgres16-datastore_asyncpg-{py37,py38,py39,py310,py311,py312},
postgres16-datastore_psycopg-{py38,py39,py310,py311,py312,pypy310}-psycopglatest,
postgres16-datastore_psycopg-py312-psycopg_{purepython,binary,compiled}0301,
postgres16-datastore_psycopg2-{py27,py37,py38,py39,py310,py311,py312}-psycopg2latest,
postgres16-datastore_psycopg2cffi-{py27,pypy27,py37,py38,py39,py310,py311,py312}-psycopg2cffilatest,
postgres16-datastore_pyodbc-{py27,py37,py38,py39,py310,py311,py312}-pyodbclatest,
postgres9-datastore_postgresql-{py37,py38,py39},
python-adapter_asgiref-{py37,py38,py39,py310,py311,py312,pypy310}-asgireflatest,
python-adapter_asgiref-py310-asgiref{0303,0304,0305,0306,0307},
python-adapter_cheroot-{py27,py37,py38,py39,py310,py311,py312},
python-adapter_daphne-{py37,py38,py39,py310,py311,py312}-daphnelatest,
python-adapter_gevent-{py27,py37,py38,py310,py311,py312},
python-adapter_gunicorn-{py37,py38,py39,py310,py311,py312}-aiohttp03-gunicornlatest,
python-adapter_hypercorn-{py38,py39,py310,py311,py312}-hypercornlatest,
python-adapter_hypercorn-py38-hypercorn{0010,0011,0012,0013},
python-adapter_uvicorn-{py37,py38,py39,py310,py311,py312}-uvicornlatest,
python-adapter_uvicorn-py38-uvicorn014,
python-adapter_waitress-{py37,py38,py39,py310,py311,py312}-waitresslatest,
python-adapter_waitress-{py37,py38,py39,py310}-waitress02,
python-adapter_waitress-{py37,py38,py39}-waitress010404,
python-agent_features-{py27,py37,py38,py39,py310,py311,py312}-{with,without}_extensions,
python-agent_features-{pypy27,pypy310}-without_extensions,
python-agent_streaming-{py37,py38,py39,py310,py311,py312}-protobuf04-{with,without}_extensions,
python-agent_streaming-py27-grpc0125-{with,without}_extensions,
python-agent_streaming-py39-protobuf{03,0319}-{with,without}_extensions,
python-agent_unittests-{py27,py37,py38,py39,py310,py311,py312}-{with,without}_extensions,
python-agent_unittests-{pypy27,pypy310}-without_extensions,
python-application_celery-{py37,py38,py39,py310,py311,py312,pypy310}-celerylatest,
python-application_celery-py311-celery{0503,0502,0501},
python-component_djangorestframework-{py37,py38,py39,py310,py311,py312}-djangorestframeworklatest,
python-component_flask_rest-{py38,py39,py310,py311,py312,pypy310}-flaskrestxlatest,
python-component_flask_rest-{py27,pypy27}-flaskrestx051,
python-component_flask_rest-py37-flaskrestx110,
python-component_graphqlserver-{py37,py38,py39,py310,py311,py312},
python-component_tastypie-{py37,py38,py39,py310,py311,py312,pypy310}-tastypielatest,
python-coroutines_asyncio-{py37,py38,py39,py310,py311,py312,pypy310},
python-cross_agent-{py27,py37,py38,py39,py310,py311,py312}-{with,without}_extensions,
python-cross_agent-pypy27-without_extensions,
python-datastore_sqlite-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
python-external_aiobotocore-{py38,py39,py310,py311,py312}-aiobotocorelatest,
python-external_botocore-{py38,py39,py310,py311,py312}-botocorelatest,
python-external_botocore-{py311}-botocorelatest-langchain,
python-external_botocore-py310-botocore0125,
python-external_botocore-py311-botocore128,
python-external_feedparser-py27-feedparser{05,06},
python-external_http-{py27,py37,py38,py39,py310,py311,py312,pypy27},
python-external_httplib-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
python-external_httplib2-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
python-external_httpx-{py37,py38,py39,py310,py311,py312},
python-external_requests-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
python-external_urllib3-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310}-urllib3latest,
python-external_urllib3-{py27,py37,pypy27}-urllib3{0109},
python-framework_aiohttp-{py37,py38,py39,py310,py311,py312,pypy310}-aiohttp03,
python-framework_ariadne-{py37,py38,py39,py310,py311,py312}-ariadnelatest,
python-framework_ariadne-py37-ariadne{0011,0012,0013},
python-framework_bottle-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310}-bottle0012,
python-framework_cherrypy-{py37,py38,py39,py310,py311,py312,pypy310}-CherryPylatest,
python-framework_django-{py37,py38,py39,py310,py311,py312}-Djangolatest,
python-framework_django-{py39}-Django{0202,0300,0301,0302,0401},
python-framework_falcon-{py37,py312}-falcon0300,
python-framework_falcon-{py37,py38,py39,py310,py311,py312,pypy310}-falcon{latest,master},
python-framework_fastapi-{py37,py38,py39,py310,py311,py312},
python-framework_flask-py37-flask020205,
python-framework_flask-{py38,py39,py310,py311,py312,pypy310}-flask{020205,latest,master},
python-framework_graphene-{py37,py38,py39,py310,py311,py312}-graphenelatest,
python-framework_graphql-{py37,py38,py39,py310,py311,py312,pypy310}-graphql03,
; temporarily disabling graphqlmaster tests
python-framework_graphql-{py37,py38,py39,py310,py311,py312,pypy310}-graphqllatest,
python-framework_graphql-py37-graphql{0300,0301,0302},
python-framework_pyramid-{py37,py38,py39,py310,py311,py312,pypy310}-Pyramidlatest,
python-framework_pyramid-{py37,py38,py39,py310,py311,py312,pypy310}-Pyramid0110-cornice,
python-framework_sanic-{py37,py38,py39,py310,py311,py312,pypy310}-saniclatest,
python-framework_sanic-{py38,pypy310}-sanic{200904,210300,2109,2112,2203,2290},
python-framework_starlette-{py310,pypy310}-starlette{0014,0015,0019,0028},
python-framework_starlette-{py37,py38,py39,py310,py311,py312,pypy310}-starlettelatest,
python-framework_starlette-{py37,py38}-starlette{002001},
python-framework_strawberry-{py37,py38,py39,py310,py311,py312}-strawberrylatest,
python-framework_tornado-{py38,py39,py310,py311,py312}-tornado{latest,master},
python-logger_logging-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
python-logger_loguru-{py37,py38,py39,py310,py311,py312,pypy310}-logurulatest,
python-logger_loguru-py39-loguru{06,05},
python-logger_structlog-{py37,py38,py39,py310,py311,py312,pypy310}-structloglatest,
; langchain dependency faiss-cpu isn't compatible with 3.12 yet.
python-mlmodel_langchain-{py38,py39,py310,py311},
python-mlmodel_openai-openai0-{py37,py38,py39,py310,py311,py312},
python-mlmodel_openai-openai107-py312,
python-mlmodel_openai-openailatest-{py37,py38,py39,py310,py311,py312},
python-mlmodel_sklearn-{py37}-scikitlearn0101,
python-mlmodel_sklearn-{py38,py39,py310,py311,py312}-scikitlearnlatest,
python-template_genshi-{py27,py37,py38,py39,py310,py311,py312}-genshilatest,
python-template_jinja2-{py38,py39,py310,py311,py312}-jinja2latest,
python-template_jinja2-py37-jinja2030103,
python-template_mako-{py27,py37,py38,py39,py310,py311,py312},
rabbitmq-messagebroker_pika-{py37,py38,py39,py310,py311,py312,pypy310}-pikalatest,
redis-datastore_redis-{py37,py38,py39,py310,py311,py312,pypy310}-redis{0400,latest},
rediscluster-datastore_rediscluster-{py37,py311,py312,pypy310}-redislatest,
solr-datastore_pysolr-{py27,py37,py38,py39,py310,py311,py312,pypy27,pypy310},
[testenv]
deps =
# Base Dependencies
{py38,py39,py310,py311,py312,pypy310}: pytest==8.2.1
py37: pytest==7.4.4
{py27,pypy27}: pytest==4.6.11
iniconfig
coverage
WebTest==2.0.35
# Test Suite Dependencies
adapter_asgiref-asgireflatest: asgiref
adapter_asgiref-asgiref0303: asgiref<3.4
adapter_asgiref-asgiref0304: asgiref<3.5
adapter_asgiref-asgiref0305: asgiref<3.6
adapter_asgiref-asgiref0306: asgiref<3.7
adapter_asgiref-asgiref0307: asgiref<3.8
adapter_cheroot: cheroot
adapter_daphne-daphnelatest: daphne
adapter_gevent: WSGIProxy2
adapter_gevent: gevent
adapter_gevent: urllib3
adapter_gunicorn-aiohttp03: aiohttp<4.0
adapter_gunicorn-aiohttp03-py312: aiohttp==3.9.0rc0
adapter_gunicorn-gunicorn19: gunicorn<20
adapter_gunicorn-gunicornlatest: gunicorn
; Temporarily pinned. Needs to be addressed
adapter_hypercorn-hypercornlatest: hypercorn<0.16
adapter_hypercorn-hypercorn0013: hypercorn<0.14
adapter_hypercorn-hypercorn0012: hypercorn<0.13
adapter_hypercorn-hypercorn0011: hypercorn<0.12
adapter_hypercorn-hypercorn0010: hypercorn<0.11
adapter_uvicorn-uvicorn014: uvicorn<0.15
adapter_uvicorn-uvicornlatest: uvicorn
adapter_uvicorn: typing-extensions
adapter_waitress: WSGIProxy2
adapter_waitress-waitress02: waitress<2.1
adapter_waitress-waitresslatest: waitress
agent_features: beautifulsoup4
agent_features-{py37,py38,py39,py310,py311,py312,pypy310}: protobuf
agent_features-{py27,pypy27}: protobuf<3.18.0
application_celery-celerylatest: celery[pytest]
application_celery-celery0503: celery[pytest]<5.4
application_celery-celery0502: celery[pytest]<5.3
application_celery-celery0501: celery[pytest]<5.2
application_celery-{py37,pypy310}: importlib-metadata<5.0
mlmodel_sklearn: pandas
mlmodel_sklearn: protobuf
mlmodel_sklearn: numpy
mlmodel_sklearn-scikitlearnlatest: scikit-learn
mlmodel_sklearn-scikitlearnlatest: scipy
mlmodel_sklearn-scikitlearn0101: scikit-learn<1.1
mlmodel_sklearn-scikitlearn0101: scipy<1.11.0
component_djangorestframework-djangorestframeworklatest: Django
component_djangorestframework-djangorestframeworklatest: djangorestframework
component_flask_rest: flask-restful
component_flask_rest: jinja2
component_flask_rest: itsdangerous
component_flask_rest-flaskrestxlatest: flask
component_flask_rest-flaskrestxlatest: flask-restx
; flask-restx only supports Flask v3 after flask-restx v1.3.0
component_flask_rest-flaskrestx110: Flask<3.0
component_flask_rest-flaskrestx110: flask-restx<1.2
component_flask_rest-flaskrestx051: Flask<3.0
component_flask_rest-flaskrestx051: flask-restx<1.0
component_graphqlserver: graphql-server[sanic,flask]==3.0.0b5
component_graphqlserver: sanic>20
component_graphqlserver: Flask
component_graphqlserver: markupsafe<2.1
component_graphqlserver: jinja2<3.1
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+
coroutines_asyncio-{py37,py38,py39,py310,py311,py312}: uvloop
cross_agent: mock==1.0.1
cross_agent: requests
datastore_asyncpg: asyncpg
datastore_bmemcached-memcached030: python-binary-memcached<0.31
datastore_bmemcached-memcached030: uhashring<2.0
datastore_elasticsearch: requests
datastore_elasticsearch-elasticsearch07: elasticsearch<8.0
datastore_elasticsearch-elasticsearch08: elasticsearch<9.0
datastore_firestore: google-cloud-firestore
datastore_memcache-memcached01: python-memcached<2
datastore_mysql-mysqllatest: mysql-connector-python
datastore_mysql-mysql080023: mysql-connector-python<8.0.24
datastore_mysql: protobuf<4
datastore_postgresql: py-postgresql
datastore_psycopg-psycopglatest: psycopg[binary]>=3
datastore_psycopg-psycopg_purepython0301: psycopg<3.2
datastore_psycopg-psycopg_binary0301: psycopg[binary]<3.2
datastore_psycopg-psycopg_compiled0301: psycopg[c]<3.2
datastore_psycopg2-psycopg2latest: psycopg2-binary
datastore_psycopg2cffi-psycopg2cffilatest: psycopg2cffi
datastore_pyodbc-pyodbclatest: pyodbc
datastore_pylibmc: pylibmc
datastore_pymemcache: pymemcache
datastore_pymongo-pymongo03: pymongo<4.0
datastore_pymongo-pymongo04: pymongo<5.0
datastore_pymssql: pymssql
datastore_pymysql: PyMySQL<0.11
datastore_pysolr: pysolr<4.0
datastore_redis-redislatest: redis
datastore_rediscluster-redislatest: redis
datastore_redis-redis0400: redis<4.1
external_aiobotocore-aiobotocorelatest: aiobotocore[awscli]
external_aiobotocore-aiobotocorelatest: flask
external_aiobotocore-aiobotocorelatest: flask-cors
external_aiobotocore-aiobotocorelatest: moto[all]
external_aiobotocore-aiobotocorelatest: aiohttp
external_botocore-botocorelatest: botocore
external_botocore-botocorelatest: boto3
external_botocore-botocorelatest-langchain: langchain
external_botocore-botocore128: botocore<1.29
external_botocore-botocore0125: botocore<1.26
external_botocore-{py38,py39,py310,py311,py312}: moto
external_feedparser-feedparser05: feedparser<6
external_feedparser-feedparser06: feedparser<7
external_httplib2: httplib2<1.0
external_httpx: httpx<0.17
external_requests: urllib3
external_requests: requests
external_urllib3-urllib30109: urllib3<1.10
external_urllib3-urllib3latest: urllib3
framework_aiohttp-aiohttp03: aiohttp<4
framework_aiohttp-aiohttp030900rc0: aiohttp==3.9.0rc0
framework_ariadne-ariadnelatest: ariadne
framework_ariadne-ariadne0011: ariadne<0.12
framework_ariadne-ariadne0012: ariadne<0.13
framework_ariadne-ariadne0013: ariadne<0.14
framework_bottle-bottle0012: bottle<0.13.0
framework_bottle: jinja2<3.1
framework_bottle: markupsafe<2.1
framework_cherrypy: routes
framework_cherrypy: CherryPy
framework_django-Django0202: Django<2.3
framework_django-Django0300: Django<3.1
framework_django-Django0301: Django<3.2
framework_django-Django0302: Django<3.3
framework_django-Django0401: Django<4.2
framework_django-Djangolatest: Django
framework_django-Djangomaster: https://github.com/django/django/archive/main.zip
framework_falcon-falcon0300: falcon<3.1
framework_falcon-falconlatest: falcon
framework_falcon-falconmaster: https://github.com/falconry/falcon/archive/master.zip
framework_fastapi: fastapi
framework_fastapi: asyncio
framework_flask: Flask-Compress
framework_flask-flask020205: jinja2<3.1.3
framework_flask-flask020205: flask[async]<2.3
framework_flask-flasklatest: markupsafe
framework_flask-flasklatest: jinja2
framework_flask-flasklatest: flask[async]
framework_flask-flaskmaster: https://github.com/pallets/werkzeug/archive/main.zip
framework_flask-flaskmaster: https://github.com/pallets/flask/archive/main.zip
framework_flask-flaskmaster: asgiref
framework_graphene-graphenelatest: graphene
framework_graphql-graphqllatest: graphql-core
framework_graphql-graphql03: graphql-core<4
framework_graphql-graphql0300: graphql-core<3.1
framework_graphql-graphql0301: graphql-core<3.2
framework_graphql-graphql0302: graphql-core<3.3
framework_graphql-graphqlmaster: https://github.com/graphql-python/graphql-core/archive/main.zip
framework_grpc-grpclatest: protobuf
framework_grpc-grpclatest: grpcio
framework_grpc-grpclatest: grpcio-tools
grpc0125: grpcio<1.26
grpc0125: grpcio-tools<1.26
grpc0125: protobuf<3.18.0
protobuf0319: protobuf<3.20
protobuf03: protobuf<4
protobuf04: protobuf<5
framework_pyramid: routes
framework_pyramid-cornice: cornice!=5.0.0
framework_pyramid-Pyramidlatest: Pyramid
framework_sanic-sanic200904: sanic<20.9.5
framework_sanic-sanic210300: sanic<21.3.1
framework_sanic-sanic2109: sanic<21.10
framework_sanic-sanic2112: sanic<21.13
framework_sanic-sanic2203: sanic<22.4
framework_sanic-sanic2290: sanic<22.9.1
framework_sanic-saniclatest: sanic
framework_sanic-sanic{200904,210300,2109,2112,2203,2290}: websockets<11
; For test_exception_in_middleware test, anyio is used:
; https://github.com/encode/starlette/pull/1157
; but anyiolatest creates breaking changes to our tests
; (but not the instrumentation):
; https://github.com/agronholm/anyio/releases/tag/4.0.0
framework_starlette: anyio<4
framework_starlette-starlette0014: starlette<0.15
framework_starlette-starlette0015: starlette<0.16
framework_starlette-starlette0019: starlette<0.20
framework_starlette-starlette002001: starlette==0.20.1
framework_starlette-starlette0028: starlette<0.29
framework_starlette-starlettelatest: starlette<0.35
framework_strawberry: starlette
framework_strawberry-strawberrylatest: strawberry-graphql
framework_tornado: pycurl
framework_tornado-tornadolatest: tornado
framework_tornado-tornadomaster: https://github.com/tornadoweb/tornado/archive/master.zip
mlmodel_openai-openai0: openai[datalib]<1.0
mlmodel_openai-openai107: openai[datalib]<1.8
mlmodel_openai-openailatest: openai[datalib]
; Required for openai testing
mlmodel_openai: protobuf
; Pinning to 0.1.16 while adding support for with_structured_output in chain tests
mlmodel_langchain: langchain<0.1.17
mlmodel_langchain: langchain-community
mlmodel_langchain: openai[datalib]
; Required for langchain testing
mlmodel_langchain: pypdf
mlmodel_langchain: tiktoken
mlmodel_langchain: faiss-cpu
mlmodel_langchain: mock
mlmodel_langchain: asyncio
mlmodel_langchain: langchain-openai
logger_loguru-logurulatest: loguru
logger_loguru-loguru06: loguru<0.7
logger_loguru-loguru05: loguru<0.6
logger_structlog-structloglatest: structlog
messagebroker_pika-pikalatest: pika
messagebroker_pika: tornado<5
messagebroker_pika-{py27,pypy27}: enum34
messagebroker_confluentkafka-confluentkafkalatest: confluent-kafka
messagebroker_confluentkafka-confluentkafka0108: confluent-kafka<1.9
messagebroker_confluentkafka-confluentkafka0107: confluent-kafka<1.8
messagebroker_confluentkafka-confluentkafka0106: confluent-kafka<1.7
messagebroker_kafkapython-kafkapythonlatest: kafka-python
messagebroker_kafkapython-kafkapython020001: kafka-python<2.0.2
messagebroker_kafkapython-kafkapython020000: kafka-python<2.0.1
template_genshi-genshilatest: genshi
template_jinja2-jinja2latest: Jinja2
template_jinja2-jinja2030103: Jinja2<3.1.4
template_mako: mako
setenv =
PYTHONPATH={toxinidir}/tests
TOX_ENV_DIR={envdir}
COVERAGE_FILE={envdir}/.coverage.{envname}
COVERAGE_RCFILE={toxinidir}/tox.ini
with_extensions: NEW_RELIC_EXTENSIONS = true
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-{py38,py39,py310,py311,py312}: PYCURL_SSL_LIBRARY=openssl
framework_tornado-{py38,py39,py310,py311,py312}: LDFLAGS=-L/usr/local/opt/openssl/lib
framework_tornado-{py38,py39,py310,py311,py312}: CPPFLAGS=-I/usr/local/opt/openssl/include
passenv =
NEW_RELIC_DEVELOPER_MODE
NEW_RELIC_LICENSE_KEY
NEW_RELIC_HOST
GITHUB_ACTIONS
commands =
framework_grpc: python -m grpc_tools.protoc \
framework_grpc: --proto_path={toxinidir}/tests/framework_grpc/sample_application \
framework_grpc: --python_out={toxinidir}/tests/framework_grpc/sample_application \
framework_grpc: --grpc_python_out={toxinidir}/tests/framework_grpc/sample_application \
framework_grpc: /{toxinidir}/tests/framework_grpc/sample_application/sample_application.proto
framework_tornado-{py38,py39,py310,py311,py312}: pip install --ignore-installed --config-settings="--build-option=--with-openssl" pycurl
coverage run -m pytest -v []
allowlist_externals={toxinidir}/.github/scripts/*
install_command=
{toxinidir}/.github/scripts/retry.sh 3 pip install {opts} {packages}
extras =
agent_streaming: infinite-tracing
changedir =
adapter_asgiref: tests/adapter_asgiref
adapter_cheroot: tests/adapter_cheroot
adapter_daphne: tests/adapter_daphne
adapter_gevent: tests/adapter_gevent
adapter_gunicorn: tests/adapter_gunicorn
adapter_hypercorn: tests/adapter_hypercorn
adapter_uvicorn: tests/adapter_uvicorn
adapter_waitress: tests/adapter_waitress
agent_features: tests/agent_features
agent_streaming: tests/agent_streaming
agent_unittests: tests/agent_unittests
application_celery: tests/application_celery
component_djangorestframework: tests/component_djangorestframework
component_flask_rest: tests/component_flask_rest
component_graphqlserver: tests/component_graphqlserver
component_tastypie: tests/component_tastypie
coroutines_asyncio: tests/coroutines_asyncio
cross_agent: tests/cross_agent
datastore_asyncpg: tests/datastore_asyncpg
datastore_bmemcached: tests/datastore_bmemcached
datastore_elasticsearch: tests/datastore_elasticsearch
datastore_firestore: tests/datastore_firestore
datastore_memcache: tests/datastore_memcache
datastore_mysql: tests/datastore_mysql
datastore_postgresql: tests/datastore_postgresql
datastore_psycopg: tests/datastore_psycopg
datastore_psycopg2: tests/datastore_psycopg2
datastore_psycopg2cffi: tests/datastore_psycopg2cffi
datastore_pylibmc: tests/datastore_pylibmc
datastore_pymemcache: tests/datastore_pymemcache
datastore_pymongo: tests/datastore_pymongo
datastore_pymssql: tests/datastore_pymssql
datastore_pymysql: tests/datastore_pymysql
datastore_pyodbc: tests/datastore_pyodbc
datastore_pysolr: tests/datastore_pysolr
datastore_redis: tests/datastore_redis
datastore_rediscluster: tests/datastore_rediscluster
datastore_sqlite: tests/datastore_sqlite
external_aiobotocore: tests/external_aiobotocore
external_botocore: tests/external_botocore
external_feedparser: tests/external_feedparser
external_http: tests/external_http
external_httplib: tests/external_httplib
external_httplib2: tests/external_httplib2
external_httpx: tests/external_httpx
external_requests: tests/external_requests
external_urllib3: tests/external_urllib3
framework_aiohttp: tests/framework_aiohttp
framework_ariadne: tests/framework_ariadne
framework_bottle: tests/framework_bottle
framework_cherrypy: tests/framework_cherrypy
framework_django: tests/framework_django
framework_falcon: tests/framework_falcon
framework_fastapi: tests/framework_fastapi
framework_flask: tests/framework_flask
framework_graphene: tests/framework_graphene
framework_graphql: tests/framework_graphql
framework_grpc: tests/framework_grpc
framework_pyramid: tests/framework_pyramid
framework_sanic: tests/framework_sanic
framework_starlette: tests/framework_starlette
framework_strawberry: tests/framework_strawberry
framework_tornado: tests/framework_tornado
logger_logging: tests/logger_logging
logger_loguru: tests/logger_loguru
logger_structlog: tests/logger_structlog
messagebroker_confluentkafka: tests/messagebroker_confluentkafka
messagebroker_kafkapython: tests/messagebroker_kafkapython
messagebroker_pika: tests/messagebroker_pika
mlmodel_langchain: tests/mlmodel_langchain
mlmodel_openai: tests/mlmodel_openai
mlmodel_sklearn: tests/mlmodel_sklearn
template_genshi: tests/template_genshi
template_jinja2: tests/template_jinja2
template_mako: tests/template_mako
[pytest]
usefixtures =
collector_available_fixture
collector_agent_registration
[coverage:run]
branch = True
disable_warnings = couldnt-parse
source = newrelic
[coverage:paths]
source =
newrelic/
.tox/**/site-packages/newrelic/
/__w/**/site-packages/newrelic/
[coverage:html]
directory = ${TOX_ENV_DIR-.}/htmlcov
[coverage:xml]
output = ${TOX_ENV_DIR-.}/coverage.xml