vercel-queue-bundle 0.7.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vercel/queue/__init__.py +8 -0
- vercel/queue/__main__.py +10 -0
- vercel/queue/_internal/__init__.py +1 -0
- vercel/queue/_internal/api_async.py +219 -0
- vercel/queue/_internal/api_common.py +104 -0
- vercel/queue/_internal/api_sync.py +137 -0
- vercel/queue/_internal/asgi.py +145 -0
- vercel/queue/_internal/asynctools.py +40 -0
- vercel/queue/_internal/cli.py +313 -0
- vercel/queue/_internal/client.py +1109 -0
- vercel/queue/_internal/client_sync.py +432 -0
- vercel/queue/_internal/config.py +160 -0
- vercel/queue/_internal/constants.py +50 -0
- vercel/queue/_internal/devserver.py +205 -0
- vercel/queue/_internal/embedded.py +1900 -0
- vercel/queue/_internal/errors.py +262 -0
- vercel/queue/_internal/http.py +634 -0
- vercel/queue/_internal/lease.py +1007 -0
- vercel/queue/_internal/log.py +143 -0
- vercel/queue/_internal/messages.py +122 -0
- vercel/queue/_internal/multipart.py +255 -0
- vercel/queue/_internal/names.py +101 -0
- vercel/queue/_internal/polling.py +200 -0
- vercel/queue/_internal/push.py +246 -0
- vercel/queue/_internal/response.py +111 -0
- vercel/queue/_internal/retry.py +86 -0
- vercel/queue/_internal/streams.py +313 -0
- vercel/queue/_internal/subscribers.py +1025 -0
- vercel/queue/_internal/transports.py +363 -0
- vercel/queue/_internal/types.py +300 -0
- vercel/queue/_internal/typeutils.py +203 -0
- vercel/queue/_vendor/LICENSE.python-multipart.txt +202 -0
- vercel/queue/_vendor/__init__.py +1 -0
- vercel/queue/_vendor/multipart/__init__.py +38 -0
- vercel/queue/_vendor/multipart/decoders.py +1 -0
- vercel/queue/_vendor/multipart/exceptions.py +1 -0
- vercel/queue/_vendor/multipart/multipart.py +1 -0
- vercel/queue/_vendor/python_multipart/__init__.py +35 -0
- vercel/queue/_vendor/python_multipart/decoders.py +185 -0
- vercel/queue/_vendor/python_multipart/exceptions.py +34 -0
- vercel/queue/_vendor/python_multipart/multipart.py +1925 -0
- vercel/queue/devserver.py +24 -0
- vercel/queue/embedded.py +50 -0
- vercel/queue/py.typed +1 -0
- vercel/queue/sync.py +8 -0
- vercel/queue/testing/__init__.py +14 -0
- vercel/queue/testing/pytest.py +42 -0
- vercel/queue/testing/state.py +32 -0
- vercel/queue/version.py +3 -0
- vercel_queue_bundle-0.7.1.dist-info/METADATA +683 -0
- vercel_queue_bundle-0.7.1.dist-info/RECORD +54 -0
- vercel_queue_bundle-0.7.1.dist-info/WHEEL +4 -0
- vercel_queue_bundle-0.7.1.dist-info/licenses/LICENSE +21 -0
- vercel_queue_bundle-0.7.1.dist-info/licenses/vercel/queue/_vendor/LICENSE.python-multipart.txt +202 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Standalone queue development server."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from ._internal.devserver import (
|
|
6
|
+
EmbeddedQueueDevServer,
|
|
7
|
+
QueueClientAsgiDevServer,
|
|
8
|
+
embedded_queue_dev_server,
|
|
9
|
+
main,
|
|
10
|
+
queue_client_asgi_dev_server,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
# Only add public symbols to __all__; internal helpers must stay unexported.
|
|
14
|
+
__all__ = (
|
|
15
|
+
"EmbeddedQueueDevServer",
|
|
16
|
+
"QueueClientAsgiDevServer",
|
|
17
|
+
"embedded_queue_dev_server",
|
|
18
|
+
"main",
|
|
19
|
+
"queue_client_asgi_dev_server",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if __name__ == "__main__":
|
|
24
|
+
raise SystemExit(main())
|
vercel/queue/embedded.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Embedded local queue server for in-process Queue API development.
|
|
2
|
+
|
|
3
|
+
This module provides a dependency-light Queue API implementation for embedded
|
|
4
|
+
local runtime code. It preserves the same client and push-delivery path as the
|
|
5
|
+
hosted service: callers send through ``QueueClient``, messages are stored
|
|
6
|
+
in a local server, visible messages are leased, and a dispatcher invokes
|
|
7
|
+
subscribers through ``accept_and_handle`` with synthetic Vercel Queue push
|
|
8
|
+
headers. Successful handlers are acknowledged by the normal client follow-up
|
|
9
|
+
path, and failures retry through lease expiry or explicit visibility changes.
|
|
10
|
+
|
|
11
|
+
Use this for embedded, single-process local mode and tests.
|
|
12
|
+
|
|
13
|
+
Run an embedded queue server in a test and use a client that sends to
|
|
14
|
+
it directly:
|
|
15
|
+
|
|
16
|
+
from vercel.internal._vendor import anyio
|
|
17
|
+
import vercel.queue as vq
|
|
18
|
+
import vercel.queue.embedded as vq_embedded
|
|
19
|
+
|
|
20
|
+
@vq.subscribe(topic="jobs*", consumer_group="just-testing")
|
|
21
|
+
async def handle_job(message: vq.Message[dict[str, object]]) -> None:
|
|
22
|
+
print(message.payload)
|
|
23
|
+
|
|
24
|
+
async def main() -> None:
|
|
25
|
+
async with vq_embedded.embedded_queue_service() as service:
|
|
26
|
+
client = service.get_async_client()
|
|
27
|
+
await client.send("email", {"subject": "hi"})
|
|
28
|
+
|
|
29
|
+
anyio.run(main)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Enable the pytest fixture and use it in tests:
|
|
33
|
+
|
|
34
|
+
pytest_plugins = ["vercel.queue.testing.pytest"]
|
|
35
|
+
|
|
36
|
+
async def test_queue(embedded_queue_server):
|
|
37
|
+
client = embedded_queue_server.get_async_client()
|
|
38
|
+
message_id = await client.send("emails", {"subject": "hi"}, retention=60)
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
from ._internal.embedded import (
|
|
42
|
+
create_embedded_queue_app,
|
|
43
|
+
embedded_queue_service,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Only add public symbols to __all__; internal helpers must stay unexported.
|
|
47
|
+
__all__ = (
|
|
48
|
+
"create_embedded_queue_app",
|
|
49
|
+
"embedded_queue_service",
|
|
50
|
+
)
|
vercel/queue/py.typed
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
vercel/queue/sync.py
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""Synchronous Vercel Queue client APIs."""
|
|
2
|
+
# ruff: noqa: F403
|
|
3
|
+
|
|
4
|
+
from ._internal import api_common as _api_common, api_sync as _api_sync
|
|
5
|
+
from ._internal.api_common import *
|
|
6
|
+
from ._internal.api_sync import *
|
|
7
|
+
|
|
8
|
+
__all__ = _api_common.__all__ + _api_sync.__all__
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Testing helpers for Vercel Queue."""
|
|
2
|
+
|
|
3
|
+
from .state import (
|
|
4
|
+
clear_subscriptions,
|
|
5
|
+
reset_default_async_queue_clients,
|
|
6
|
+
reset_default_queue_clients,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
# Only add public symbols to __all__; internal helpers must stay unexported.
|
|
10
|
+
__all__ = (
|
|
11
|
+
"clear_subscriptions",
|
|
12
|
+
"reset_default_async_queue_clients",
|
|
13
|
+
"reset_default_queue_clients",
|
|
14
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Pytest fixtures for the embedded queue server."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Iterator
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from vercel.queue.devserver import EmbeddedQueueDevServer, embedded_queue_dev_server
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@pytest.fixture(scope="session")
|
|
13
|
+
def _embedded_queue_server_session() -> Iterator[EmbeddedQueueDevServer]:
|
|
14
|
+
"""Run one embedded queue server process for the test session."""
|
|
15
|
+
with embedded_queue_dev_server() as server:
|
|
16
|
+
yield server
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture
|
|
20
|
+
def embedded_queue_server(
|
|
21
|
+
_embedded_queue_server_session: EmbeddedQueueDevServer,
|
|
22
|
+
) -> Iterator[EmbeddedQueueDevServer]:
|
|
23
|
+
"""Return an isolated embedded queue server state for a test."""
|
|
24
|
+
_embedded_queue_server_session.reset()
|
|
25
|
+
try:
|
|
26
|
+
yield _embedded_queue_server_session
|
|
27
|
+
finally:
|
|
28
|
+
_embedded_queue_server_session.reset()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@pytest.fixture
|
|
32
|
+
def eqs(embedded_queue_server: EmbeddedQueueDevServer) -> EmbeddedQueueDevServer:
|
|
33
|
+
"""Alias for the embedded queue server fixture."""
|
|
34
|
+
return embedded_queue_server
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Only add public symbols to __all__; internal helpers must stay unexported.
|
|
38
|
+
__all__ = (
|
|
39
|
+
"EmbeddedQueueDevServer",
|
|
40
|
+
"embedded_queue_server",
|
|
41
|
+
"eqs",
|
|
42
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Queue test state helpers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .._internal import subscribers as queue_subscribers
|
|
6
|
+
from .._internal.http import (
|
|
7
|
+
reset_async_http_client_pool_for_tests,
|
|
8
|
+
reset_http_client_pools_for_tests,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def reset_default_queue_clients() -> None:
|
|
13
|
+
"""Reset cached default Queue clients for tests."""
|
|
14
|
+
reset_http_client_pools_for_tests()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
async def reset_default_async_queue_clients() -> None:
|
|
18
|
+
"""Reset cached default asynchronous Queue clients for tests."""
|
|
19
|
+
await reset_async_http_client_pool_for_tests()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def clear_subscriptions() -> None:
|
|
23
|
+
"""Clear registered subscribers and embedded dispatchers for tests."""
|
|
24
|
+
queue_subscribers.clear_subscriptions_for_tests()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Only add public symbols to __all__; internal helpers must stay unexported.
|
|
28
|
+
__all__ = (
|
|
29
|
+
"clear_subscriptions",
|
|
30
|
+
"reset_default_async_queue_clients",
|
|
31
|
+
"reset_default_queue_clients",
|
|
32
|
+
)
|
vercel/queue/version.py
ADDED