rappel 0.4.1__py3-none-win_amd64.whl → 0.8.1__py3-none-win_amd64.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.
Potentially problematic release.
This version of rappel might be problematic. Click here for more details.
- proto/ast_pb2.py +79 -75
- proto/ast_pb2.pyi +155 -135
- proto/messages_pb2.py +49 -49
- proto/messages_pb2.pyi +77 -3
- rappel/__init__.py +6 -1
- rappel/actions.py +32 -5
- rappel/bin/boot-rappel-singleton.exe +0 -0
- rappel/bin/rappel-bridge.exe +0 -0
- rappel/bin/start-workers.exe +0 -0
- rappel/bridge.py +48 -48
- rappel/dependencies.py +21 -7
- rappel/exceptions.py +7 -0
- rappel/ir_builder.py +1177 -453
- rappel/registry.py +38 -2
- rappel/schedule.py +80 -12
- rappel/serialization.py +75 -1
- rappel/workflow.py +32 -13
- rappel/workflow_runtime.py +156 -6
- rappel-0.8.1.data/scripts/boot-rappel-singleton.exe +0 -0
- {rappel-0.4.1.data → rappel-0.8.1.data}/scripts/rappel-bridge.exe +0 -0
- {rappel-0.4.1.data → rappel-0.8.1.data}/scripts/start-workers.exe +0 -0
- {rappel-0.4.1.dist-info → rappel-0.8.1.dist-info}/METADATA +24 -5
- rappel-0.8.1.dist-info/RECORD +32 -0
- rappel-0.4.1.data/scripts/boot-rappel-singleton.exe +0 -0
- rappel-0.4.1.dist-info/RECORD +0 -32
- {rappel-0.4.1.dist-info → rappel-0.8.1.dist-info}/WHEEL +0 -0
- {rappel-0.4.1.dist-info → rappel-0.8.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rappel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.1
|
|
4
4
|
Summary: Distributed & durable background events in Python
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Requires-Dist: googleapis-common-protos>=1.72.0
|
|
@@ -155,19 +155,38 @@ If you have a particular workflow that you think should be working but isn't yet
|
|
|
155
155
|
|
|
156
156
|
The main rappel configuration is done through env vars, which is what you'll typically use in production when using a docker deployment pipeline. If we can't find an environment parameter we will fallback to looking for an .env that specifies it within your local filesystem.
|
|
157
157
|
|
|
158
|
+
These are the primary environment parameters that you'll likely want to customize for your deployment:
|
|
159
|
+
|
|
158
160
|
| Environment Variable | Description | Default | Example |
|
|
159
161
|
|---------------------|-------------|---------|---------|
|
|
160
|
-
| `
|
|
161
|
-
| `RAPPEL_HTTP_ADDR` | HTTP bind address for `rappel-bridge` | `127.0.0.1:24117` | `0.0.0.0:24117` |
|
|
162
|
-
| `RAPPEL_GRPC_ADDR` | gRPC bind address for `rappel-bridge` | HTTP port + 1 | `0.0.0.0:24118` |
|
|
162
|
+
| `RAPPEL_DATABASE_URL` | PostgreSQL connection string for the rappel server | (required on bridge &workers ) | `postgresql://user:pass@localhost:5433/rappel` |
|
|
163
163
|
| `RAPPEL_WORKER_COUNT` | Number of Python worker processes | `num_cpus` | `8` |
|
|
164
164
|
| `RAPPEL_CONCURRENT_PER_WORKER` | Max concurrent actions per worker | `10` | `20` |
|
|
165
165
|
| `RAPPEL_USER_MODULE` | Python module preloaded into each worker | none | `my_app.actions` |
|
|
166
166
|
| `RAPPEL_POLL_INTERVAL_MS` | Poll interval for the dispatch loop (ms) | `100` | `50` |
|
|
167
|
-
| `
|
|
167
|
+
| `RAPPEL_MAX_ACTION_LIFECYCLE` | Max actions per worker before recycling (see below) | none (no limit) | `1000` |
|
|
168
168
|
| `RAPPEL_WEBAPP_ENABLED` | Enable the web dashboard | `false` | `true` |
|
|
169
169
|
| `RAPPEL_WEBAPP_ADDR` | Web dashboard bind address | `0.0.0.0:24119` | `0.0.0.0:8080` |
|
|
170
170
|
|
|
171
|
+
We expect that you won't need to modify the following env parameters, but we provide them for convenience:
|
|
172
|
+
|
|
173
|
+
| Environment Variable | Description | Default | Example |
|
|
174
|
+
|---------------------|-------------|---------|---------|
|
|
175
|
+
| `RAPPEL_HTTP_ADDR` | HTTP bind address for `rappel-bridge` | `127.0.0.1:24117` | `0.0.0.0:24117` |
|
|
176
|
+
| `RAPPEL_GRPC_ADDR` | gRPC bind address for `rappel-bridge` | HTTP port + 1 | `0.0.0.0:24118` |
|
|
177
|
+
| `RAPPEL_BATCH_SIZE` | Max actions fetched per poll | `workers * concurrent_per_worker` | `200` |
|
|
178
|
+
| `RAPPEL_GC_INTERVAL_MS` | Garbage collection interval (ms) | `none` (disabled) | `60000` |
|
|
179
|
+
| `RAPPEL_GC_RETENTION_SECONDS` | Minimum age for completed/failed instances before cleanup | `86400` | `604800` |
|
|
180
|
+
| `RAPPEL_GC_BATCH_SIZE` | Max instances cleaned per GC cycle | `100` | `500` |
|
|
181
|
+
|
|
182
|
+
### Worker Recycling
|
|
183
|
+
|
|
184
|
+
The `RAPPEL_MAX_ACTION_LIFECYCLE` setting controls how many actions a Python worker process can execute before being automatically recycled (shut down and replaced with a fresh process). This can help mitigate memory leaks in third-party libraries that may accumulate memory over time.
|
|
185
|
+
|
|
186
|
+
When a worker reaches its action limit, rappel spawns a replacement worker before retiring the old one. Any in-flight actions on the old worker will complete normally before the process terminates. This ensures zero downtime during recycling.
|
|
187
|
+
|
|
188
|
+
By default, this is set to `None` (no limit), meaning workers run indefinitely. If you notice memory growth in your workers over time, try setting this to a value like `1000` or `10000` depending on your action characteristics.
|
|
189
|
+
|
|
171
190
|
## Philosophy
|
|
172
191
|
|
|
173
192
|
Background jobs in webapps are so frequently used that they should really be a primitive of your fullstack library: database, backend, frontend, _and_ background jobs. Otherwise you're stuck in a situation where users either have to always make blocking requests to an API or you spin up ephemeral tasks that will be killed during re-deployments or an accidental docker crash.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
proto/ast_pb2.py,sha256=cYsU8cIKylnJmhhuw9t7tnqChxUZSUuYcaLnfMoj6PI,13919
|
|
2
|
+
proto/ast_pb2.pyi,sha256=Lf9TrNyVOq5imfk8SuCa9jxxZ_mjn1FJFO7onZgEMB4,52436
|
|
3
|
+
proto/ast_pb2_grpc.py,sha256=o2pCTeLO0yrFf0G9tvXiW5FbNQcX6dTZW3Dhh2iXp4g,892
|
|
4
|
+
proto/ast_pb2_grpc.pyi,sha256=r1dIOwEi02duT6jiuPHWbC01f5z-dBoXc18gZ54pKZA,488
|
|
5
|
+
proto/messages_pb2.py,sha256=mrOpLehJT5FiyQfIXh8ibwGlK-UziG_srZ_7eBfEigA,12984
|
|
6
|
+
proto/messages_pb2.pyi,sha256=3DliL2FGH-xKC6FrrkW0No1J2VPxAe8LDMz3mz0pSKE,42430
|
|
7
|
+
proto/messages_pb2_grpc.py,sha256=6MhQxDSSTSiW55qZh7nIRtiEsuBp5t9tCbcZxiuWcF4,16252
|
|
8
|
+
proto/messages_pb2_grpc.pyi,sha256=dAauApqvlu5Ij7JncrOIhKgcQZJEeV8FrdoJydMbfRo,12702
|
|
9
|
+
rappel/__init__.py,sha256=74B_EWJ0PJZSVhvAK54l-DTM7lzs0IbfMNFPVRONpmI,1475
|
|
10
|
+
rappel/actions.py,sha256=uVfxbDWaprVh7IElsmePlmJCufjqp6Y2xso00ZlbM3I,3955
|
|
11
|
+
rappel/bridge.py,sha256=p_WXjZFyixH4aYvlfknUHT2YKtxBt_uthvxMQ1DFjGI,8356
|
|
12
|
+
rappel/dependencies.py,sha256=OkgxNG1mXMGepxmDMPxBwqd8Y4ebyIMoxOTbb33FQ9M,5789
|
|
13
|
+
rappel/exceptions.py,sha256=TogxmVclvWuui-j6UTSxUQ0kwIhVd5q0BRotsuXNHWw,587
|
|
14
|
+
rappel/formatter.py,sha256=mNLJ24nkl5zN-zXe_ObpZGeC__Pyv-7J-iPde-wLvbM,3223
|
|
15
|
+
rappel/ir_builder.py,sha256=2BcRBDNYj5OX7Ze547e3wH1MHSrO_R4EfdDJNj1w8nM,157945
|
|
16
|
+
rappel/logger.py,sha256=auFfr0gdVP9J53OiADhJlCSdS9As-1DA14WNtAqgv3Y,1157
|
|
17
|
+
rappel/registry.py,sha256=Lk03QAifc-VOCAibhCRYCYhygUQlfEH3J62Md17UJRI,3808
|
|
18
|
+
rappel/schedule.py,sha256=55smTL8Qmn9eCb5F574tF8HijarHD_35hei0UhCc-S0,12068
|
|
19
|
+
rappel/serialization.py,sha256=Q2naNTSLS72XLYi-HUswGmYuhx2dCxibjGdDeG3-s4I,11333
|
|
20
|
+
rappel/worker.py,sha256=0iZkruFbGBXLLZNmENqxGF4f-ot5v9m0HzWNt8pT24s,7027
|
|
21
|
+
rappel/workflow.py,sha256=JGupCK9tPPCZnHl3sNBbzJdsGuBmqaquw1HNFrhSdCo,9026
|
|
22
|
+
rappel/workflow_runtime.py,sha256=TcYAi5CkzneSTG_9LQI4Nn872PIC5RtKEABL1jUXLwU,9325
|
|
23
|
+
rappel/bin/boot-rappel-singleton.exe,sha256=UfciRWthMLB7KvkVMqqxB2DQUIQwgK7zZhP5YjmL3hE,4694528
|
|
24
|
+
rappel/bin/rappel-bridge.exe,sha256=_QKboGKgnW2wzPpG4wypQp54t3h4rRnitNWOmddOxgc,8730624
|
|
25
|
+
rappel/bin/start-workers.exe,sha256=hsGqkI5yI-4esOZKzLYW6Uv9QhCLgDPIdv-0kCv_bzA,16742912
|
|
26
|
+
rappel-0.8.1.dist-info/METADATA,sha256=ZQSr25SRLsbq0uvjU-S8GP39bjyVBTLB6B9AXj3EczY,16923
|
|
27
|
+
rappel-0.8.1.dist-info/entry_points.txt,sha256=h9D-AufOUWpdE7XjnyZyQCc-kER-ZIKj1Jryc1JNL_I,53
|
|
28
|
+
rappel-0.8.1.dist-info/RECORD,,
|
|
29
|
+
rappel-0.8.1.data/scripts/boot-rappel-singleton.exe,sha256=UfciRWthMLB7KvkVMqqxB2DQUIQwgK7zZhP5YjmL3hE,4694528
|
|
30
|
+
rappel-0.8.1.data/scripts/rappel-bridge.exe,sha256=_QKboGKgnW2wzPpG4wypQp54t3h4rRnitNWOmddOxgc,8730624
|
|
31
|
+
rappel-0.8.1.data/scripts/start-workers.exe,sha256=hsGqkI5yI-4esOZKzLYW6Uv9QhCLgDPIdv-0kCv_bzA,16742912
|
|
32
|
+
rappel-0.8.1.dist-info/WHEEL,sha256=phIoPJnECdbLLKrTiGU1mv92w_v6wBxRMAejLbbrKno,94
|
|
Binary file
|
rappel-0.4.1.dist-info/RECORD
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
proto/ast_pb2.py,sha256=SzKthXwCp7WcCtxwkGeXCzXM547FziGGw4reMxITgWY,13426
|
|
2
|
-
proto/ast_pb2.pyi,sha256=T7TdeA17MwGimm6oaIYyR6cftXmF-UdEf39bGFNXTDA,51866
|
|
3
|
-
proto/ast_pb2_grpc.py,sha256=o2pCTeLO0yrFf0G9tvXiW5FbNQcX6dTZW3Dhh2iXp4g,892
|
|
4
|
-
proto/ast_pb2_grpc.pyi,sha256=r1dIOwEi02duT6jiuPHWbC01f5z-dBoXc18gZ54pKZA,488
|
|
5
|
-
proto/messages_pb2.py,sha256=Zcvm0ONz-9xo2-LPMinbHKC1rLJUAtWUfm_y4h7eKEM,12592
|
|
6
|
-
proto/messages_pb2.pyi,sha256=lzv_RubGC8ZNVwh70FQr6DI9MECKHbvmVrL0hcBUDPc,39801
|
|
7
|
-
proto/messages_pb2_grpc.py,sha256=6MhQxDSSTSiW55qZh7nIRtiEsuBp5t9tCbcZxiuWcF4,16252
|
|
8
|
-
proto/messages_pb2_grpc.pyi,sha256=dAauApqvlu5Ij7JncrOIhKgcQZJEeV8FrdoJydMbfRo,12702
|
|
9
|
-
rappel/__init__.py,sha256=2jnekFrCK42PbFxBiXKLa5wzzYcIy7VQ1zFizv1ZUpo,1391
|
|
10
|
-
rappel/actions.py,sha256=wUcmBCLjMb-406T7N5S-uR73p9grKbfomXLNjsQvFpo,2735
|
|
11
|
-
rappel/bridge.py,sha256=t-j6k3rHO84qIoOB_VFCUJ87RHKwDDHejxXkNsfQfi0,8219
|
|
12
|
-
rappel/dependencies.py,sha256=40NiWV9fsn-_G5XivCUz2OMNoYC2H6cdVAQG7ziEhS0,5347
|
|
13
|
-
rappel/exceptions.py,sha256=mLkNf1a44rbRxuFZp9saiSp0Ec3Y4gXPXI7Ozkhdt1U,348
|
|
14
|
-
rappel/formatter.py,sha256=mNLJ24nkl5zN-zXe_ObpZGeC__Pyv-7J-iPde-wLvbM,3223
|
|
15
|
-
rappel/ir_builder.py,sha256=wBLdp0pndpBSmzLXGIVGZJ6p4k4OlNi30xErY2Z7ZDk,128070
|
|
16
|
-
rappel/logger.py,sha256=auFfr0gdVP9J53OiADhJlCSdS9As-1DA14WNtAqgv3Y,1157
|
|
17
|
-
rappel/registry.py,sha256=AZftT8r-Lsb0JgX6vbbnydqegheYXViYsCzF_NoqX40,2302
|
|
18
|
-
rappel/schedule.py,sha256=k_DD2BZBnJCK60VoOLlIJh6QHIIMiEnSOKsUSRved_I,9464
|
|
19
|
-
rappel/serialization.py,sha256=k4uq_Wka5ptVYp0SIjXD5zflbmgxUV05pNmQs-b5i8o,8028
|
|
20
|
-
rappel/worker.py,sha256=0iZkruFbGBXLLZNmENqxGF4f-ot5v9m0HzWNt8pT24s,7027
|
|
21
|
-
rappel/workflow.py,sha256=Jv6SzPhLxS6oNfiKFCbp7GroWK8rGY1pMd8JqoVEPDM,8270
|
|
22
|
-
rappel/workflow_runtime.py,sha256=GBLaAi1MB7rQmTtL7adAJt9rDLoWS9n52aD1YcJA-ZI,4403
|
|
23
|
-
rappel/bin/boot-rappel-singleton.exe,sha256=_qbWkDd4tfd4WkfMW6-m1Z1SxFtGE06UXgZO024TVrU,5104128
|
|
24
|
-
rappel/bin/rappel-bridge.exe,sha256=kOGR0ENIJ_c3qjpz85yFEhaVnBmvTezclXchCk-Z79g,9680896
|
|
25
|
-
rappel/bin/start-workers.exe,sha256=wKdShH7oKt0Gmhkvkhx0xBOR1TvPD-CytRBvyli0cAw,15662592
|
|
26
|
-
rappel-0.4.1.dist-info/METADATA,sha256=xUr4y0umv-V16uvqR9UO3LmaswP-eGo-DTiUjYl5Lbk,15381
|
|
27
|
-
rappel-0.4.1.dist-info/entry_points.txt,sha256=h9D-AufOUWpdE7XjnyZyQCc-kER-ZIKj1Jryc1JNL_I,53
|
|
28
|
-
rappel-0.4.1.dist-info/RECORD,,
|
|
29
|
-
rappel-0.4.1.data/scripts/boot-rappel-singleton.exe,sha256=_qbWkDd4tfd4WkfMW6-m1Z1SxFtGE06UXgZO024TVrU,5104128
|
|
30
|
-
rappel-0.4.1.data/scripts/rappel-bridge.exe,sha256=kOGR0ENIJ_c3qjpz85yFEhaVnBmvTezclXchCk-Z79g,9680896
|
|
31
|
-
rappel-0.4.1.data/scripts/start-workers.exe,sha256=wKdShH7oKt0Gmhkvkhx0xBOR1TvPD-CytRBvyli0cAw,15662592
|
|
32
|
-
rappel-0.4.1.dist-info/WHEEL,sha256=phIoPJnECdbLLKrTiGU1mv92w_v6wBxRMAejLbbrKno,94
|
|
File without changes
|
|
File without changes
|