diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 185b05a..4627087 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,4 +1,8 @@ -on: [ push, pull_request ] +on: + pull_request: + push: + branches: + - dev jobs: pytest: @@ -7,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.7, 3.8, 3.9, '3.10', '3.11' ] + python-version: [ 3.8, 3.9, '3.10', '3.11', '3.12', '3.13' ] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/README.md b/README.md index 4cbc401..2e87a9c 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ An event dispatching/handling library for FastAPI, and Starlette. [![](https://github.com/melvinkcx/fastapi-events/actions/workflows/tests.yml/badge.svg?branch=dev&event=push)](https://github.com/melvinkcx/fastapi-events/actions/workflows/tests.yml) ![PyPI - Downloads](https://img.shields.io/pypi/dw/fastapi-events) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fastapi-events) + Features: diff --git a/pytest.ini b/pytest.ini index 88242a8..3e0b589 100644 --- a/pytest.ini +++ b/pytest.ini @@ -5,9 +5,11 @@ minversion = 6.2 python_files = middleware/test_*.py test_*.py -asyncio_mode=auto +asyncio_mode = auto +asyncio_default_fixture_loop_scope = function env = AWS_ACCESS_KEY_ID=testing AWS_SECRET_ACCESS_KEY=testing AWS_SECURITY_TOKEN=testing AWS_SESSION_TOKEN=testing + diff --git a/setup.py b/setup.py index 3a91713..127dd14 100644 --- a/setup.py +++ b/setup.py @@ -37,11 +37,12 @@ def get_long_description(): "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", }, python_requires=">=3.7", keywords=["starlette", "fastapi", "starlite", "pydantic"], diff --git a/tests/middleware/test_starlite.py b/tests/middleware/test_starlite.py index 3377699..0835a2d 100644 --- a/tests/middleware/test_starlite.py +++ b/tests/middleware/test_starlite.py @@ -60,6 +60,7 @@ def global_exception_handler(request, exc): exception_handlers[ValueError] = global_exception_handler client = create_test_client( + [root], exception_handlers=exception_handlers, middleware=[ DefineMiddleware( @@ -67,7 +68,6 @@ def global_exception_handler(request, exc): handlers=[dummy_handler_1, dummy_handler_2], ), ], - route_handlers=[root], ) with suppress(ValueError): diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index b987d3c..62ec54c 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -2,7 +2,7 @@ import functools import os import uuid -from datetime import datetime +from datetime import datetime, timezone from enum import Enum from typing import Optional @@ -64,7 +64,7 @@ async def test_suppression_of_events_in_req_res_cycle( @pytest.mark.asyncio @pytest.mark.parametrize( "event_payload,should_raise_error", - (({"user_id": uuid.uuid4(), "created_at": datetime.utcnow()}, False), + (({"user_id": uuid.uuid4(), "created_at": datetime.now(timezone.utc)}, False), ({"user_id": uuid.uuid4()}, True), ({}, True), (None, True))) diff --git a/tox.ini b/tox.ini index 27a6b88..db24f28 100644 --- a/tox.ini +++ b/tox.ini @@ -4,25 +4,27 @@ requires = env_list = flake8 isort - py{37,38,39,310,311}-starlite - py{37,38,39,310,311}-fastapi{092,093,094,095,096,097,098,099}-pydantic{1} - py{37,38,39,310,311}-fastapi{0100,0101}-pydantic{1,2} + py{38,39,310,311,312,313}-starlite + py{38,39,310,311}-fastapi{092,093,094,095,096,097,098,099}-pydantic{1} + py{38,39,310,311}-fastapi{0100,0101}-pydantic{1,2} + py{311,312,313}-fastapi{0102,0103,0104,0105,0106,0107,0108,0109,0111,0112,0113,0114,0115}-pydantic{2} [gh] python = - 3.11 = flake8, isort, py311-starlite, py311-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py311-fastapi{0100,0101}-pydantic{1} - 3.10 = py310-starlite, py310-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py310-fastapi{0100,0101}-pydantic{1} + 3.13 = flake8, isort, py313-starlite, py313-fastapi{0102,0103,0104,0105,0106,0107,0108,0109,0111,0112,0113,0114,0115}-pydantic{2} + 3.12 = flake8, isort, py312-starlite, py312-fastapi{0102,0103,0104,0105,0106,0107,0108,0109,0111,0112,0113,0114,0115}-pydantic{2} + 3.11 = flake8, isort, py311-starlite, py311-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py311-fastapi{0100,0101}-pydantic{1,2}, py311-fastapi{0102,0103,0104,0105,0106,0107,0108,0109,0111,0112,0113,0114,0115}-pydantic{2} + 3.10 = py310-starlite, py310-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py310-fastapi{0100,0101}-pydantic{1,2} 3.9 = py39-starlite, py39-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py39-fastapi{0100,0101}-pydantic{1} 3.8 = py38-starlite, py38-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py38-fastapi{0100,0101}-pydantic{1} - 3.7 = py37-starlite, py37-fastapi{092,093,094,095,096,097,098,099}-pydantic{1}, py37-fastapi{0100,0101}-pydantic{1} [base] deps = - pytest>=6.2.4 - pytest-asyncio>=0.18.3 - pytest-env>=0.6.2 - pytest-mock>=3.6.1 - moto[sqs]>=4.2.14 + pytest>=8.3.4 + pytest-asyncio>=0.24.0 + pytest-env>=1.1.5 + pytest-mock>=3.14.0 + moto[sqs]>=4.2.14,<5 mypy>=0.971 pytest-mypy>=0.9.1 @@ -34,7 +36,7 @@ deps = opentelemetry-test-utils>=0.33b0 opentelemetry-sdk>=1.12.0 - httpx>=0.23.0 + httpx>=0.23.0,<0.28 [testenv:flake8] description = run flake8 @@ -48,7 +50,7 @@ deps = isort>=5.10.1 commands = isort --check-only ./fastapi_events ./tests -[testenv:py{37,38,39,310,311}-starlite] +[testenv:py{38,39,310,311,312}-starlite] description : run test for starlite deps = {[base]deps} @@ -56,6 +58,17 @@ deps = starlite>=1.38.0,<=2 commands = pytest tests/middleware/test_starlite.py +[testenv:py{313}-starlite] +description : run test for starlite +deps = + ; see: https://github.com/jcrist/msgspec/issues/698 + git+https://github.com/jcrist/msgspec.git@main + {[base]deps} + pydantic>=1.0,<2.0 + starlite>=1.38.0,<=2 +commands = + pytest tests/middleware/test_starlite.py + [testenv] description = run pytest for fastapi @@ -70,7 +83,21 @@ deps = fastapi098: fastapi>=0.98,<0.99 fastapi099: fastapi>=0.99,<0.100 fastapi0100: fastapi>=0.100,<0.101 - fastapi0101: fastapi>=0.101 + fastapi0101: fastapi>=0.101,<0.102 + fastapi0102: fastapi>=0.102,<0.103 + fastapi0103: fastapi>=0.103,<0.104 + fastapi0104: fastapi>=0.104,<0.105 + fastapi0105: fastapi>=0.105,<0.106 + fastapi0106: fastapi>=0.106,<0.107 + fastapi0107: fastapi>=0.107,<0.108 + fastapi0108: fastapi>=0.108,<0.109 + fastapi0109: fastapi>=0.109,<0.110 + fastapi0110: fastapi>=0.110,<0.111 + fastapi0111: fastapi>=0.111,<0.112 + fastapi0112: fastapi>=0.112,<0.113 + fastapi0113: fastapi>=0.113,<0.114 + fastapi0114: fastapi>=0.114,<0.115 + fastapi0115: fastapi>=0.115 pydantic1: pydantic[email]>=1.0,<2 pydantic2: pydantic[email]>=2.0,<3 commands =