diff --git a/README.md b/README.md index a723c2c..96439a1 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,8 @@ FastAPI + WebSockets + PubSub == ⚡💪 ❤️ async def websocket_rpc_endpoint(websocket: WebSocket): await endpoint.main_loop(websocket) ``` - see [examples/pubsub_broadcaster_server_example.py](examples/pubsub_broadcaster_server_example.py) for full usage example + see [examples/pubsub_broadcaster_server_example.py](examples/pubsub_broadcaster_server_example.py) for full usage example + Note: Requires install with dependencies e.g. `pip install fastapi_websocket_pubsub[redis]`, `pip install fastapi_websocket_pubsub[postgres]`, `pip install fastapi_websocket_pubsub[kafka]` or `pip install fastapi_websocket_pubsub[all]` to get support for all three backends diff --git a/requirements-dev.txt b/requirements-dev.txt index cc7c7e7..b4d1f17 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -5,4 +5,5 @@ twine wheel loguru uvicorn -pytest-timeout \ No newline at end of file +pytest-timeout +permit-broadcaster[redis,postgres,kafka]>=0.2.5,<3 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 9e6d6b6..4686357 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ fastapi-websocket-rpc>=0.1.25,<1 packaging>=20.4 -permit-broadcaster[redis,postgres,kafka]>=0.2.5,<3 pydantic>=1.9.1 -websockets>=10.3 +websockets>=14.0 +permit-broadcaster>=0.2.5,<3 \ No newline at end of file diff --git a/setup.py b/setup.py index 2b8e59a..b996403 100644 --- a/setup.py +++ b/setup.py @@ -30,4 +30,10 @@ def get_requirements(env=""): ], python_requires=">=3.9", install_requires=get_requirements(), + extras_require = { + "redis": ["permit-broadcaster[redis]>=0.2.5,<3"], + "postgres": ["permit-broadcaster[postgres]>=0.2.5,<3"], + "kafka": ["permit-broadcaster[kafka]>=0.2.5,<3"], + "all": ["permit-broadcaster[redis,postgres,kafka]>=0.2.5,<3"], + } ) diff --git a/tests/broadcaster_test.py b/tests/broadcaster_test.py index 58a2708..5ef606f 100644 --- a/tests/broadcaster_test.py +++ b/tests/broadcaster_test.py @@ -22,6 +22,12 @@ ) from fastapi_websocket_pubsub import PubSubEndpoint, PubSubClient +# Check if postgres backend is available +asyncpg_backend_available = True +try: + import asyncpg +except ModuleNotFoundError: + asyncpg_backend_available = False logger = get_logger("Test") logger.remove() @@ -129,6 +135,7 @@ def server(postgres): @pytest.mark.asyncio +@pytest.mark.skipif(not asyncpg_backend_available, reason="asyncpg dependency is not installed.") async def test_all_clients_get_a_topic_via_broadcast(server, repeats=1, interval=0): """ if: @@ -179,6 +186,7 @@ async def wait_for_sem(): @pytest.mark.postgres_idle_timeout(3000) @pytest.mark.asyncio +@pytest.mark.skipif(not asyncpg_backend_available, reason="asyncpg dependency is not installed.") async def test_idle_pg_broadcaster_disconnect(server): """ if: diff --git a/tests/server_notifier_callback_test.py b/tests/server_notifier_callback_test.py index 24f4633..0d48549 100644 --- a/tests/server_notifier_callback_test.py +++ b/tests/server_notifier_callback_test.py @@ -80,7 +80,7 @@ async def server_subscribe_to_topic(server, is_topic_permitted): # Create a client and subscribe to topics async with PubSubClient( - extra_headers={"headers": {"claims": {"permitted_topics": permitted_topics}}} + additional_headers={"headers": {"claims": {"permitted_topics": permitted_topics}}} ) as client: async def on_event(data, topic): @@ -116,7 +116,7 @@ async def test_server_subscribe_to_permitted_topic(server): async def server_publish_to_topic(server, is_topic_permitted): # Create a client and subscribe to topics async with PubSubClient( - extra_headers={"headers": {"claims": {"permitted_topics": ["t1", "t2"]}}} + additional_headers={"headers": {"claims": {"permitted_topics": ["t1", "t2"]}}} ) as client: # start listentining client.start_client(uri)