localqueue 0.5.0__tar.gz → 1.0.0__tar.gz
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.
- localqueue-1.0.0/.github/workflows/ci.yml +133 -0
- localqueue-1.0.0/.github/workflows/stress.yml +57 -0
- localqueue-1.0.0/.github/workflows/wheels.yml +118 -0
- localqueue-1.0.0/.gitignore +15 -0
- localqueue-1.0.0/Cargo.lock +299 -0
- localqueue-1.0.0/Cargo.toml +15 -0
- localqueue-1.0.0/PKG-INFO +131 -0
- localqueue-1.0.0/README.md +118 -0
- localqueue-1.0.0/benchmarks/README.md +33 -0
- localqueue-1.0.0/benchmarks/queue_bench.py +228 -0
- localqueue-1.0.0/docs/guarantees.md +80 -0
- localqueue-1.0.0/docs/internal/initial_idea.md +137 -0
- localqueue-1.0.0/examples/basic.py +25 -0
- localqueue-1.0.0/pyproject.toml +27 -0
- localqueue-1.0.0/python/localqueue/__init__.py +16 -0
- localqueue-1.0.0/python/localqueue/core.py +272 -0
- localqueue-1.0.0/python/localqueue/exceptions.py +5 -0
- localqueue-1.0.0/python/localqueue/job.py +25 -0
- localqueue-1.0.0/python/localqueue/localqueue.pyi +58 -0
- localqueue-1.0.0/python/localqueue/worker.py +156 -0
- localqueue-1.0.0/src/error.rs +58 -0
- localqueue-1.0.0/src/lib.rs +22 -0
- localqueue-1.0.0/src/queue.rs +655 -0
- localqueue-1.0.0/src/schema.rs +21 -0
- localqueue-1.0.0/src/storage.rs +51 -0
- localqueue-1.0.0/stress/run_soak.py +233 -0
- localqueue-1.0.0/tests/__init__.py +0 -0
- localqueue-1.0.0/tests/test_concurrency.py +108 -0
- localqueue-1.0.0/tests/test_contract.py +288 -0
- localqueue-1.0.0/tests/test_core.py +191 -0
- localqueue-1.0.0/tests/test_gil.py +52 -0
- localqueue-1.0.0/tests/test_maintenance.py +131 -0
- localqueue-1.0.0/tests/test_worker.py +240 -0
- localqueue-0.5.0/.gitignore +0 -23
- localqueue-0.5.0/CHANGELOG.md +0 -195
- localqueue-0.5.0/LICENSE +0 -21
- localqueue-0.5.0/PKG-INFO +0 -130
- localqueue-0.5.0/README.md +0 -95
- localqueue-0.5.0/docs/api.md +0 -722
- localqueue-0.5.0/docs/compare.md +0 -50
- localqueue-0.5.0/docs/develop.md +0 -137
- localqueue-0.5.0/docs/examples/pull-compose.md +0 -63
- localqueue-0.5.0/docs/examples/push-compose.md +0 -49
- localqueue-0.5.0/docs/examples/websocket-compose.md +0 -58
- localqueue-0.5.0/docs/examples.md +0 -14
- localqueue-0.5.0/docs/index.md +0 -86
- localqueue-0.5.0/docs/operational-maturity.md +0 -137
- localqueue-0.5.0/docs/plans/notification-policy-pr.md +0 -258
- localqueue-0.5.0/docs/plans/pubsub-physical-fanout-pr.md +0 -178
- localqueue-0.5.0/docs/plans/queue-architecture-roadmap.md +0 -261
- localqueue-0.5.0/docs/queues.md +0 -1117
- localqueue-0.5.0/docs/release.md +0 -47
- localqueue-0.5.0/docs/retries.md +0 -363
- localqueue-0.5.0/docs/stability.md +0 -88
- localqueue-0.5.0/docs/use-cases/local-outbox.md +0 -75
- localqueue-0.5.0/docs/use-cases/operator-recovery.md +0 -78
- localqueue-0.5.0/docs/use-cases/persistent-retries.md +0 -72
- localqueue-0.5.0/docs/use-cases.md +0 -54
- localqueue-0.5.0/examples/docker-compose/README.md +0 -11
- localqueue-0.5.0/examples/docker-compose/pull/README.md +0 -28
- localqueue-0.5.0/examples/docker-compose/pull/compose.yaml +0 -40
- localqueue-0.5.0/examples/docker-compose/pull/producer.py +0 -33
- localqueue-0.5.0/examples/docker-compose/pull/worker.py +0 -15
- localqueue-0.5.0/examples/docker-compose/push/README.md +0 -19
- localqueue-0.5.0/examples/docker-compose/push/compose.yaml +0 -16
- localqueue-0.5.0/examples/docker-compose/push/push_app.py +0 -63
- localqueue-0.5.0/examples/docker-compose/websocket/Dockerfile +0 -13
- localqueue-0.5.0/examples/docker-compose/websocket/README.md +0 -24
- localqueue-0.5.0/examples/docker-compose/websocket/compose.yaml +0 -32
- localqueue-0.5.0/examples/docker-compose/websocket/websocket_app.py +0 -71
- localqueue-0.5.0/examples/docker-compose/websocket/websocket_client.py +0 -27
- localqueue-0.5.0/examples/email_worker.py +0 -10
- localqueue-0.5.0/examples/enqueue_email.py +0 -26
- localqueue-0.5.0/examples/process_webhook.sh +0 -10
- localqueue-0.5.0/examples/retry_demo.py +0 -289
- localqueue-0.5.0/examples/sqlite_concurrency_benchmark.py +0 -313
- localqueue-0.5.0/examples/sqlite_process_harness.py +0 -455
- localqueue-0.5.0/localqueue/__init__.py +0 -239
- localqueue-0.5.0/localqueue/adapters/__init__.py +0 -15
- localqueue-0.5.0/localqueue/adapters/dispatch.py +0 -40
- localqueue-0.5.0/localqueue/adapters/notification.py +0 -211
- localqueue-0.5.0/localqueue/cli/__init__.py +0 -305
- localqueue-0.5.0/localqueue/cli/commands.py +0 -583
- localqueue-0.5.0/localqueue/cli/support.py +0 -242
- localqueue-0.5.0/localqueue/cli/worker.py +0 -318
- localqueue-0.5.0/localqueue/cli_commands.py +0 -1
- localqueue-0.5.0/localqueue/cli_support.py +0 -1
- localqueue-0.5.0/localqueue/cli_worker_commands.py +0 -1
- localqueue-0.5.0/localqueue/failure.py +0 -19
- localqueue-0.5.0/localqueue/idempotency/__init__.py +0 -17
- localqueue-0.5.0/localqueue/idempotency/stores/__init__.py +0 -13
- localqueue-0.5.0/localqueue/idempotency/stores/_shared.py +0 -22
- localqueue-0.5.0/localqueue/idempotency/stores/base.py +0 -45
- localqueue-0.5.0/localqueue/idempotency/stores/lmdb.py +0 -88
- localqueue-0.5.0/localqueue/idempotency/stores/memory.py +0 -55
- localqueue-0.5.0/localqueue/idempotency/stores/sqlite.py +0 -154
- localqueue-0.5.0/localqueue/paths.py +0 -23
- localqueue-0.5.0/localqueue/policies/__init__.py +0 -181
- localqueue-0.5.0/localqueue/policies/_types.py +0 -18
- localqueue-0.5.0/localqueue/policies/acknowledgement.py +0 -32
- localqueue-0.5.0/localqueue/policies/backpressure.py +0 -68
- localqueue-0.5.0/localqueue/policies/commit.py +0 -109
- localqueue-0.5.0/localqueue/policies/consumption.py +0 -48
- localqueue-0.5.0/localqueue/policies/dead_letter.py +0 -32
- localqueue-0.5.0/localqueue/policies/deduplication.py +0 -42
- localqueue-0.5.0/localqueue/policies/delivery.py +0 -86
- localqueue-0.5.0/localqueue/policies/dispatch.py +0 -49
- localqueue-0.5.0/localqueue/policies/lease.py +0 -41
- localqueue-0.5.0/localqueue/policies/locality.py +0 -48
- localqueue-0.5.0/localqueue/policies/notification.py +0 -57
- localqueue-0.5.0/localqueue/policies/ordering.py +0 -66
- localqueue-0.5.0/localqueue/policies/policy_set.py +0 -212
- localqueue-0.5.0/localqueue/policies/results.py +0 -56
- localqueue-0.5.0/localqueue/policies/routing.py +0 -48
- localqueue-0.5.0/localqueue/policies/semantics.py +0 -37
- localqueue-0.5.0/localqueue/policies/subscriptions.py +0 -69
- localqueue-0.5.0/localqueue/queue.py +0 -35
- localqueue-0.5.0/localqueue/queues/__init__.py +0 -26
- localqueue-0.5.0/localqueue/queues/core.py +0 -632
- localqueue-0.5.0/localqueue/queues/policies.py +0 -129
- localqueue-0.5.0/localqueue/queues/timing.py +0 -23
- localqueue-0.5.0/localqueue/queues/validation.py +0 -114
- localqueue-0.5.0/localqueue/results/__init__.py +0 -15
- localqueue-0.5.0/localqueue/results/stores/__init__.py +0 -12
- localqueue-0.5.0/localqueue/results/stores/_shared.py +0 -22
- localqueue-0.5.0/localqueue/results/stores/base.py +0 -24
- localqueue-0.5.0/localqueue/results/stores/lmdb.py +0 -52
- localqueue-0.5.0/localqueue/results/stores/memory.py +0 -29
- localqueue-0.5.0/localqueue/results/stores/sqlite.py +0 -93
- localqueue-0.5.0/localqueue/retry/__init__.py +0 -41
- localqueue-0.5.0/localqueue/retry/stores/__init__.py +0 -13
- localqueue-0.5.0/localqueue/retry/stores/_shared.py +0 -22
- localqueue-0.5.0/localqueue/retry/stores/base.py +0 -41
- localqueue-0.5.0/localqueue/retry/stores/lmdb.py +0 -80
- localqueue-0.5.0/localqueue/retry/stores/memory.py +0 -51
- localqueue-0.5.0/localqueue/retry/stores/sqlite.py +0 -148
- localqueue-0.5.0/localqueue/retry/tenacity.py +0 -794
- localqueue-0.5.0/localqueue/services/__init__.py +0 -1
- localqueue-0.5.0/localqueue/services/queue_worker.py +0 -34
- localqueue-0.5.0/localqueue/spec.py +0 -169
- localqueue-0.5.0/localqueue/stores/__init__.py +0 -14
- localqueue-0.5.0/localqueue/stores/_shared.py +0 -422
- localqueue-0.5.0/localqueue/stores/base.py +0 -139
- localqueue-0.5.0/localqueue/stores/lmdb.py +0 -567
- localqueue-0.5.0/localqueue/stores/memory.py +0 -330
- localqueue-0.5.0/localqueue/stores/sqlite.py +0 -733
- localqueue-0.5.0/localqueue/worker.py +0 -26
- localqueue-0.5.0/localqueue/workers/__init__.py +0 -51
- localqueue-0.5.0/localqueue/workers/queue.py +0 -622
- localqueue-0.5.0/localqueue/workers/runtime.py +0 -686
- localqueue-0.5.0/pyproject.toml +0 -127
- localqueue-0.5.0/tests/test_cli.py +0 -2762
- localqueue-0.5.0/tests/test_process_harness.py +0 -77
- localqueue-0.5.0/tests/test_queue.py +0 -5826
- localqueue-0.5.0/tests/test_retry.py +0 -1312
- localqueue-0.5.0/uv.lock +0 -579
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
rust-quality:
|
|
18
|
+
name: Rust format and Clippy
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- name: Check out repository
|
|
22
|
+
uses: actions/checkout@v6
|
|
23
|
+
|
|
24
|
+
- name: Install Rust
|
|
25
|
+
uses: dtolnay/rust-toolchain@stable
|
|
26
|
+
with:
|
|
27
|
+
components: rustfmt, clippy
|
|
28
|
+
|
|
29
|
+
- name: Cache Cargo dependencies
|
|
30
|
+
uses: actions/cache@v4
|
|
31
|
+
with:
|
|
32
|
+
path: |
|
|
33
|
+
~/.cargo/registry
|
|
34
|
+
~/.cargo/git
|
|
35
|
+
target
|
|
36
|
+
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.toml', 'Cargo.lock') }}
|
|
37
|
+
restore-keys: |
|
|
38
|
+
${{ runner.os }}-cargo-
|
|
39
|
+
|
|
40
|
+
- name: Check formatting
|
|
41
|
+
run: cargo fmt --all --check
|
|
42
|
+
|
|
43
|
+
- name: Run Clippy
|
|
44
|
+
run: cargo clippy --locked --all-targets --all-features -- -D warnings
|
|
45
|
+
|
|
46
|
+
msrv:
|
|
47
|
+
name: Rust MSRV 1.83
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
steps:
|
|
50
|
+
- name: Check out repository
|
|
51
|
+
uses: actions/checkout@v6
|
|
52
|
+
|
|
53
|
+
- name: Install Rust 1.83
|
|
54
|
+
uses: dtolnay/rust-toolchain@1.83
|
|
55
|
+
|
|
56
|
+
- name: Check with MSRV
|
|
57
|
+
run: cargo check --locked
|
|
58
|
+
|
|
59
|
+
python-tests:
|
|
60
|
+
name: Python tests (${{ matrix.os }}, Python ${{ matrix.python }})
|
|
61
|
+
strategy:
|
|
62
|
+
fail-fast: false
|
|
63
|
+
matrix:
|
|
64
|
+
include:
|
|
65
|
+
- os: ubuntu-latest
|
|
66
|
+
python: '3.10'
|
|
67
|
+
- os: ubuntu-latest
|
|
68
|
+
python: '3.14'
|
|
69
|
+
- os: macos-15
|
|
70
|
+
python: '3.14'
|
|
71
|
+
- os: windows-latest
|
|
72
|
+
python: '3.14'
|
|
73
|
+
runs-on: ${{ matrix.os }}
|
|
74
|
+
steps:
|
|
75
|
+
- name: Check out repository
|
|
76
|
+
uses: actions/checkout@v6
|
|
77
|
+
|
|
78
|
+
- name: Set up Python
|
|
79
|
+
uses: actions/setup-python@v6
|
|
80
|
+
with:
|
|
81
|
+
python-version: ${{ matrix.python }}
|
|
82
|
+
cache: pip
|
|
83
|
+
|
|
84
|
+
- name: Install test dependencies
|
|
85
|
+
run: python -m pip install --upgrade "maturin>=1.14,<2" "pytest>=8,<10"
|
|
86
|
+
|
|
87
|
+
- name: Build the extension in the test environment
|
|
88
|
+
run: maturin develop --release --locked
|
|
89
|
+
|
|
90
|
+
- name: Run tests
|
|
91
|
+
run: pytest -ra
|
|
92
|
+
|
|
93
|
+
wheel-smoke:
|
|
94
|
+
name: Build and smoke-test wheel
|
|
95
|
+
needs: [rust-quality, python-tests]
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
steps:
|
|
98
|
+
- name: Check out repository
|
|
99
|
+
uses: actions/checkout@v6
|
|
100
|
+
|
|
101
|
+
- name: Set up Python
|
|
102
|
+
uses: actions/setup-python@v6
|
|
103
|
+
with:
|
|
104
|
+
python-version: '3.13'
|
|
105
|
+
|
|
106
|
+
- name: Install maturin
|
|
107
|
+
run: python -m pip install --upgrade "maturin>=1.14,<2"
|
|
108
|
+
|
|
109
|
+
- name: Build wheel
|
|
110
|
+
run: maturin build --release --locked -i python
|
|
111
|
+
|
|
112
|
+
- name: Install wheel
|
|
113
|
+
shell: bash
|
|
114
|
+
run: python -m pip install --force-reinstall target/wheels/*.whl
|
|
115
|
+
|
|
116
|
+
- name: Import package outside the checkout
|
|
117
|
+
shell: bash
|
|
118
|
+
run: |
|
|
119
|
+
cd "$RUNNER_TEMP"
|
|
120
|
+
python - <<'PY'
|
|
121
|
+
import tempfile
|
|
122
|
+
|
|
123
|
+
from localqueue import SimpleQueue
|
|
124
|
+
|
|
125
|
+
with tempfile.TemporaryDirectory() as path:
|
|
126
|
+
queue = SimpleQueue(path)
|
|
127
|
+
queue.put({"source": "wheel-smoke"})
|
|
128
|
+
job = queue.get(block=False)
|
|
129
|
+
assert job.data == {"source": "wheel-smoke"}
|
|
130
|
+
queue.ack(job)
|
|
131
|
+
assert queue.stats()["acked"] == 1
|
|
132
|
+
queue.close()
|
|
133
|
+
PY
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Multiprocess stress
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
duration:
|
|
7
|
+
description: "Duração em segundos"
|
|
8
|
+
required: false
|
|
9
|
+
default: '1800'
|
|
10
|
+
messages:
|
|
11
|
+
description: "Quantidade de mensagens"
|
|
12
|
+
required: false
|
|
13
|
+
default: '50000'
|
|
14
|
+
schedule:
|
|
15
|
+
- cron: '17 3 * * 0'
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
soak:
|
|
22
|
+
name: Multiprocess soak
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
timeout-minutes: 40
|
|
25
|
+
steps:
|
|
26
|
+
- name: Check out repository
|
|
27
|
+
uses: actions/checkout@v6
|
|
28
|
+
|
|
29
|
+
- name: Set up Python
|
|
30
|
+
uses: actions/setup-python@v6
|
|
31
|
+
with:
|
|
32
|
+
python-version: '3.13'
|
|
33
|
+
|
|
34
|
+
- name: Install maturin
|
|
35
|
+
run: python -m pip install --upgrade "maturin>=1.14,<2"
|
|
36
|
+
|
|
37
|
+
- name: Build the extension
|
|
38
|
+
run: maturin develop --release --locked
|
|
39
|
+
|
|
40
|
+
- name: Run stress test
|
|
41
|
+
shell: bash
|
|
42
|
+
run: |
|
|
43
|
+
python stress/run_soak.py \
|
|
44
|
+
--duration "${{ inputs.duration || '1800' }}" \
|
|
45
|
+
--messages "${{ inputs.messages || '50000' }}" \
|
|
46
|
+
--producers 4 \
|
|
47
|
+
--consumers 8 \
|
|
48
|
+
--crash-rate 0.01 \
|
|
49
|
+
> stress-report.json
|
|
50
|
+
|
|
51
|
+
- name: Upload stress report
|
|
52
|
+
if: always()
|
|
53
|
+
uses: actions/upload-artifact@v4
|
|
54
|
+
with:
|
|
55
|
+
name: stress-report-${{ github.run_id }}
|
|
56
|
+
path: stress-report.json
|
|
57
|
+
if-no-files-found: warn
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
name: Wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
tags: ['v*']
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
name: ${{ matrix.name }}
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
include:
|
|
18
|
+
- name: linux-x86_64
|
|
19
|
+
os: ubuntu-latest
|
|
20
|
+
target: x86_64-unknown-linux-gnu
|
|
21
|
+
manylinux: '2_17'
|
|
22
|
+
- name: linux-aarch64
|
|
23
|
+
os: ubuntu-latest
|
|
24
|
+
target: aarch64-unknown-linux-gnu
|
|
25
|
+
manylinux: '2_17'
|
|
26
|
+
- name: macos-x86_64
|
|
27
|
+
os: macos-15-intel
|
|
28
|
+
target: x86_64-apple-darwin
|
|
29
|
+
manylinux: off
|
|
30
|
+
- name: macos-arm64
|
|
31
|
+
os: macos-15
|
|
32
|
+
target: aarch64-apple-darwin
|
|
33
|
+
manylinux: off
|
|
34
|
+
- name: windows-x86_64
|
|
35
|
+
os: windows-latest
|
|
36
|
+
target: x86_64-pc-windows-msvc
|
|
37
|
+
manylinux: off
|
|
38
|
+
runs-on: ${{ matrix.os }}
|
|
39
|
+
environment: pypi
|
|
40
|
+
permissions:
|
|
41
|
+
contents: read
|
|
42
|
+
id-token: write
|
|
43
|
+
steps:
|
|
44
|
+
- name: Check out repository
|
|
45
|
+
uses: actions/checkout@v6
|
|
46
|
+
|
|
47
|
+
- name: Set up QEMU for Linux ARM64
|
|
48
|
+
if: matrix.name == 'linux-aarch64'
|
|
49
|
+
uses: docker/setup-qemu-action@v3
|
|
50
|
+
|
|
51
|
+
- name: Set up Python interpreters
|
|
52
|
+
uses: actions/setup-python@v6
|
|
53
|
+
with:
|
|
54
|
+
python-version: |
|
|
55
|
+
3.10
|
|
56
|
+
3.11
|
|
57
|
+
3.12
|
|
58
|
+
3.13
|
|
59
|
+
3.14
|
|
60
|
+
|
|
61
|
+
- name: Build wheels with maturin
|
|
62
|
+
uses: PyO3/maturin-action@v1
|
|
63
|
+
with:
|
|
64
|
+
command: build
|
|
65
|
+
target: ${{ matrix.target }}
|
|
66
|
+
manylinux: ${{ matrix.manylinux }}
|
|
67
|
+
args: --release --locked --find-interpreter --compatibility pypi
|
|
68
|
+
maturin-version: v1.14.1
|
|
69
|
+
|
|
70
|
+
- name: Set up smoke-test Python
|
|
71
|
+
uses: actions/setup-python@v6
|
|
72
|
+
with:
|
|
73
|
+
python-version: '3.13'
|
|
74
|
+
|
|
75
|
+
- name: Install one wheel for smoke testing
|
|
76
|
+
if: matrix.name != 'linux-aarch64'
|
|
77
|
+
shell: bash
|
|
78
|
+
run: python -m pip install --force-reinstall --no-index target/wheels/*cp313*.whl
|
|
79
|
+
|
|
80
|
+
- name: Smoke-test installed wheel outside the checkout
|
|
81
|
+
if: matrix.name != 'linux-aarch64'
|
|
82
|
+
shell: bash
|
|
83
|
+
run: |
|
|
84
|
+
cd "$RUNNER_TEMP"
|
|
85
|
+
python - <<'PY'
|
|
86
|
+
import tempfile
|
|
87
|
+
|
|
88
|
+
from localqueue import SimpleQueue
|
|
89
|
+
|
|
90
|
+
with tempfile.TemporaryDirectory() as path:
|
|
91
|
+
queue = SimpleQueue(path)
|
|
92
|
+
queue.put({"platform": "wheel"})
|
|
93
|
+
job = queue.get(block=False)
|
|
94
|
+
queue.ack(job)
|
|
95
|
+
assert queue.stats()["acked"] == 1
|
|
96
|
+
queue.close()
|
|
97
|
+
PY
|
|
98
|
+
|
|
99
|
+
- name: Validate Linux ARM64 wheel artifact
|
|
100
|
+
if: matrix.name == 'linux-aarch64'
|
|
101
|
+
shell: bash
|
|
102
|
+
run: test -n "$(find target/wheels -name '*cp313*.whl' -print -quit)"
|
|
103
|
+
|
|
104
|
+
- name: Install release tools
|
|
105
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
106
|
+
run: python -m pip install --upgrade "maturin>=1.14,<2" uv
|
|
107
|
+
|
|
108
|
+
- name: Build and publish source distribution
|
|
109
|
+
if: matrix.name == 'linux-x86_64' && startsWith(github.ref, 'refs/tags/v')
|
|
110
|
+
shell: bash
|
|
111
|
+
run: |
|
|
112
|
+
maturin sdist --out target/dist
|
|
113
|
+
uv publish target/dist/*.tar.gz
|
|
114
|
+
|
|
115
|
+
- name: Publish wheel
|
|
116
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
117
|
+
shell: bash
|
|
118
|
+
run: uv publish target/wheels/*.whl
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
|
2
|
+
# It is not intended for manual editing.
|
|
3
|
+
version = 4
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "ahash"
|
|
7
|
+
version = "0.8.12"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"cfg-if",
|
|
12
|
+
"once_cell",
|
|
13
|
+
"version_check",
|
|
14
|
+
"zerocopy",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[[package]]
|
|
18
|
+
name = "bitflags"
|
|
19
|
+
version = "2.13.1"
|
|
20
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
21
|
+
checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
|
|
22
|
+
|
|
23
|
+
[[package]]
|
|
24
|
+
name = "cc"
|
|
25
|
+
version = "1.3.0"
|
|
26
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
27
|
+
checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8"
|
|
28
|
+
dependencies = [
|
|
29
|
+
"find-msvc-tools",
|
|
30
|
+
"shlex",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[[package]]
|
|
34
|
+
name = "cfg-if"
|
|
35
|
+
version = "1.0.4"
|
|
36
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
37
|
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
38
|
+
|
|
39
|
+
[[package]]
|
|
40
|
+
name = "fallible-iterator"
|
|
41
|
+
version = "0.3.0"
|
|
42
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
43
|
+
checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
|
|
44
|
+
|
|
45
|
+
[[package]]
|
|
46
|
+
name = "fallible-streaming-iterator"
|
|
47
|
+
version = "0.1.9"
|
|
48
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
49
|
+
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
|
|
50
|
+
|
|
51
|
+
[[package]]
|
|
52
|
+
name = "find-msvc-tools"
|
|
53
|
+
version = "0.1.9"
|
|
54
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
55
|
+
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
|
56
|
+
|
|
57
|
+
[[package]]
|
|
58
|
+
name = "hashbrown"
|
|
59
|
+
version = "0.14.5"
|
|
60
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
61
|
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
|
62
|
+
dependencies = [
|
|
63
|
+
"ahash",
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
[[package]]
|
|
67
|
+
name = "hashlink"
|
|
68
|
+
version = "0.9.1"
|
|
69
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
70
|
+
checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
|
|
71
|
+
dependencies = [
|
|
72
|
+
"hashbrown",
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
[[package]]
|
|
76
|
+
name = "heck"
|
|
77
|
+
version = "0.5.0"
|
|
78
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
79
|
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
80
|
+
|
|
81
|
+
[[package]]
|
|
82
|
+
name = "libc"
|
|
83
|
+
version = "0.2.186"
|
|
84
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
85
|
+
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
|
|
86
|
+
|
|
87
|
+
[[package]]
|
|
88
|
+
name = "libsqlite3-sys"
|
|
89
|
+
version = "0.30.1"
|
|
90
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
91
|
+
checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
|
|
92
|
+
dependencies = [
|
|
93
|
+
"cc",
|
|
94
|
+
"pkg-config",
|
|
95
|
+
"vcpkg",
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
[[package]]
|
|
99
|
+
name = "localqueue"
|
|
100
|
+
version = "1.0.0"
|
|
101
|
+
dependencies = [
|
|
102
|
+
"pyo3",
|
|
103
|
+
"rusqlite",
|
|
104
|
+
"thiserror",
|
|
105
|
+
]
|
|
106
|
+
|
|
107
|
+
[[package]]
|
|
108
|
+
name = "once_cell"
|
|
109
|
+
version = "1.21.4"
|
|
110
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
111
|
+
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
112
|
+
|
|
113
|
+
[[package]]
|
|
114
|
+
name = "pkg-config"
|
|
115
|
+
version = "0.3.33"
|
|
116
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
117
|
+
checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
|
|
118
|
+
|
|
119
|
+
[[package]]
|
|
120
|
+
name = "portable-atomic"
|
|
121
|
+
version = "1.14.0"
|
|
122
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
123
|
+
checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3"
|
|
124
|
+
|
|
125
|
+
[[package]]
|
|
126
|
+
name = "proc-macro2"
|
|
127
|
+
version = "1.0.107"
|
|
128
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
129
|
+
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
|
|
130
|
+
dependencies = [
|
|
131
|
+
"unicode-ident",
|
|
132
|
+
]
|
|
133
|
+
|
|
134
|
+
[[package]]
|
|
135
|
+
name = "pyo3"
|
|
136
|
+
version = "0.29.0"
|
|
137
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
138
|
+
checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
|
|
139
|
+
dependencies = [
|
|
140
|
+
"libc",
|
|
141
|
+
"once_cell",
|
|
142
|
+
"portable-atomic",
|
|
143
|
+
"pyo3-build-config",
|
|
144
|
+
"pyo3-ffi",
|
|
145
|
+
"pyo3-macros",
|
|
146
|
+
]
|
|
147
|
+
|
|
148
|
+
[[package]]
|
|
149
|
+
name = "pyo3-build-config"
|
|
150
|
+
version = "0.29.0"
|
|
151
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
152
|
+
checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
|
|
153
|
+
dependencies = [
|
|
154
|
+
"target-lexicon",
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
[[package]]
|
|
158
|
+
name = "pyo3-ffi"
|
|
159
|
+
version = "0.29.0"
|
|
160
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
161
|
+
checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
|
|
162
|
+
dependencies = [
|
|
163
|
+
"libc",
|
|
164
|
+
"pyo3-build-config",
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
[[package]]
|
|
168
|
+
name = "pyo3-macros"
|
|
169
|
+
version = "0.29.0"
|
|
170
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
171
|
+
checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
|
|
172
|
+
dependencies = [
|
|
173
|
+
"proc-macro2",
|
|
174
|
+
"pyo3-macros-backend",
|
|
175
|
+
"quote",
|
|
176
|
+
"syn",
|
|
177
|
+
]
|
|
178
|
+
|
|
179
|
+
[[package]]
|
|
180
|
+
name = "pyo3-macros-backend"
|
|
181
|
+
version = "0.29.0"
|
|
182
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
183
|
+
checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
|
|
184
|
+
dependencies = [
|
|
185
|
+
"heck",
|
|
186
|
+
"proc-macro2",
|
|
187
|
+
"quote",
|
|
188
|
+
"syn",
|
|
189
|
+
]
|
|
190
|
+
|
|
191
|
+
[[package]]
|
|
192
|
+
name = "quote"
|
|
193
|
+
version = "1.0.47"
|
|
194
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
195
|
+
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
|
|
196
|
+
dependencies = [
|
|
197
|
+
"proc-macro2",
|
|
198
|
+
]
|
|
199
|
+
|
|
200
|
+
[[package]]
|
|
201
|
+
name = "rusqlite"
|
|
202
|
+
version = "0.32.1"
|
|
203
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
204
|
+
checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e"
|
|
205
|
+
dependencies = [
|
|
206
|
+
"bitflags",
|
|
207
|
+
"fallible-iterator",
|
|
208
|
+
"fallible-streaming-iterator",
|
|
209
|
+
"hashlink",
|
|
210
|
+
"libsqlite3-sys",
|
|
211
|
+
"smallvec",
|
|
212
|
+
]
|
|
213
|
+
|
|
214
|
+
[[package]]
|
|
215
|
+
name = "shlex"
|
|
216
|
+
version = "2.0.1"
|
|
217
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
218
|
+
checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
|
|
219
|
+
|
|
220
|
+
[[package]]
|
|
221
|
+
name = "smallvec"
|
|
222
|
+
version = "1.15.2"
|
|
223
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
224
|
+
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
225
|
+
|
|
226
|
+
[[package]]
|
|
227
|
+
name = "syn"
|
|
228
|
+
version = "2.0.119"
|
|
229
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
230
|
+
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
|
|
231
|
+
dependencies = [
|
|
232
|
+
"proc-macro2",
|
|
233
|
+
"quote",
|
|
234
|
+
"unicode-ident",
|
|
235
|
+
]
|
|
236
|
+
|
|
237
|
+
[[package]]
|
|
238
|
+
name = "target-lexicon"
|
|
239
|
+
version = "0.13.5"
|
|
240
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
241
|
+
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
242
|
+
|
|
243
|
+
[[package]]
|
|
244
|
+
name = "thiserror"
|
|
245
|
+
version = "1.0.69"
|
|
246
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
247
|
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
|
248
|
+
dependencies = [
|
|
249
|
+
"thiserror-impl",
|
|
250
|
+
]
|
|
251
|
+
|
|
252
|
+
[[package]]
|
|
253
|
+
name = "thiserror-impl"
|
|
254
|
+
version = "1.0.69"
|
|
255
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
256
|
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
|
257
|
+
dependencies = [
|
|
258
|
+
"proc-macro2",
|
|
259
|
+
"quote",
|
|
260
|
+
"syn",
|
|
261
|
+
]
|
|
262
|
+
|
|
263
|
+
[[package]]
|
|
264
|
+
name = "unicode-ident"
|
|
265
|
+
version = "1.0.24"
|
|
266
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
267
|
+
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
268
|
+
|
|
269
|
+
[[package]]
|
|
270
|
+
name = "vcpkg"
|
|
271
|
+
version = "0.2.15"
|
|
272
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
273
|
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
|
274
|
+
|
|
275
|
+
[[package]]
|
|
276
|
+
name = "version_check"
|
|
277
|
+
version = "0.9.5"
|
|
278
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
279
|
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|
280
|
+
|
|
281
|
+
[[package]]
|
|
282
|
+
name = "zerocopy"
|
|
283
|
+
version = "0.8.54"
|
|
284
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
285
|
+
checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19"
|
|
286
|
+
dependencies = [
|
|
287
|
+
"zerocopy-derive",
|
|
288
|
+
]
|
|
289
|
+
|
|
290
|
+
[[package]]
|
|
291
|
+
name = "zerocopy-derive"
|
|
292
|
+
version = "0.8.54"
|
|
293
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
294
|
+
checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5"
|
|
295
|
+
dependencies = [
|
|
296
|
+
"proc-macro2",
|
|
297
|
+
"quote",
|
|
298
|
+
"syn",
|
|
299
|
+
]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "localqueue"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
edition = "2021"
|
|
5
|
+
rust-version = "1.83"
|
|
6
|
+
readme = "README.md"
|
|
7
|
+
|
|
8
|
+
[lib]
|
|
9
|
+
name = "localqueue"
|
|
10
|
+
crate-type = ["cdylib"]
|
|
11
|
+
|
|
12
|
+
[dependencies]
|
|
13
|
+
pyo3 = { version = "0.29", features = ["extension-module"] }
|
|
14
|
+
rusqlite = { version = "0.32", features = ["bundled"] }
|
|
15
|
+
thiserror = "1.0"
|