plexspaces 0.1.2__tar.gz → 0.1.5__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.
- {plexspaces-0.1.2 → plexspaces-0.1.5}/PKG-INFO +1 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/actor/v1/__init__.py +3 -3
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/application/v1/__init__.py +30 -65
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/config/v1/__init__.py +1 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/dashboard/v1/__init__.py +464 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/metrics/v1/__init__.py +1 -2
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/node/v1/__init__.py +18 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/security/v1/__init__.py +230 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/services/prv/__init__.py +3 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/storage/v1/__init__.py +4 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/wasm/v1/__init__.py +1 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/runtime.py +25 -3
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/PKG-INFO +1 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/pyproject.toml +1 -1
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_runtime.py +4 -3
- {plexspaces-0.1.2 → plexspaces-0.1.5}/README.md +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/actor_id.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/decorators.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/buf/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/buf/validate/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/google/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/google/api/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/gateway/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/gateway/protoc_gen_openapiv2/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/gateway/protoc_gen_openapiv2/options/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/actor/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/application/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/behaviors/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/behaviors/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/channel/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/channel/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/circuitbreaker/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/circuitbreaker/prv/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/common/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/common/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/config/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/dashboard/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/facets/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/facets/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/firecracker/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/firecracker/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/grpc/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/grpc/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/journaling/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/journaling/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/keyvalue/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/keyvalue/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/locks/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/locks/prv/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/mailbox/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/mailbox/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/metrics/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/node/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/object_registry/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/object_registry/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/persistence/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/persistence/prv/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/pool/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/pool/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/processgroups/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/processgroups/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/scheduling/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/scheduling/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/security/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/services/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/storage/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/supervision/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/supervision/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/system/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/system/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/timer/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/timer/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/tuplespace/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/tuplespace/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/wasm/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/workflow/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/workflow/v1/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/host.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/leader_worker.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/proto_wire.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/workflow.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/SOURCES.txt +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/dependency_links.txt +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/entry_points.txt +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/requires.txt +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/top_level.txt +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces_cli/__init__.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces_cli/build.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/setup.cfg +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_abstractions_contract.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_actor_id.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_application_metrics_host.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_decorators.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_host.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_host_collective.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_host_tuple_space.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_http_fetch_wire.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_lock_wire.py +0 -0
- {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_workflow_retry.py +0 -0
|
@@ -607,8 +607,8 @@ class Actor(betterproto.Message):
|
|
|
607
607
|
|
|
608
608
|
## Migration Strategy
|
|
609
609
|
```
|
|
610
|
-
Version 1 → 2: Add new field with default value (
|
|
611
|
-
Version 2 → 3: Remove
|
|
610
|
+
Version 1 → 2: Add new field with default value (no migration needed)
|
|
611
|
+
Version 2 → 3: Remove field (no migration needed)
|
|
612
612
|
Version 3 → 4: Change field type (BREAKING - requires explicit migration function)
|
|
613
613
|
Version 4 → 5: Restructure nested fields (BREAKING - requires migration)
|
|
614
614
|
```
|
|
@@ -771,7 +771,7 @@ class ActorConfig(betterproto.Message):
|
|
|
771
771
|
// Version 1: Simple timeout config
|
|
772
772
|
properties: {"timeout_ms": 5000}
|
|
773
773
|
|
|
774
|
-
// Version 2: Added retry config
|
|
774
|
+
// Version 2: Added retry config
|
|
775
775
|
properties: {
|
|
776
776
|
"timeout_ms": 5000,
|
|
777
777
|
"max_retries": 3, // NEW: defaults to 3
|
{plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/application/v1/__init__.py
RENAMED
|
@@ -258,102 +258,68 @@ class ApplicationSpec(betterproto.Message):
|
|
|
258
258
|
|
|
259
259
|
name: str = betterproto.string_field(1)
|
|
260
260
|
"""
|
|
261
|
-
Application name (unique identifier within node)
|
|
261
|
+
Application name (unique identifier within node).
|
|
262
|
+
Serves as the namespace for all actors spawned by this application.
|
|
262
263
|
Examples: "byzantine-generals", "genomics-coordinator"
|
|
263
264
|
"""
|
|
264
265
|
|
|
265
266
|
tenant_id: str = betterproto.string_field(2)
|
|
266
267
|
"""
|
|
267
268
|
Tenant ID for multi-tenancy isolation.
|
|
268
|
-
Extracted from JWT token during deployment.
|
|
269
|
-
All actors spawned by this application will be scoped to this tenant.
|
|
270
|
-
This is the source of truth for tenant isolation - ActorFactory enforces it.
|
|
269
|
+
Extracted from JWT token during deployment; fallback from app-config.toml.
|
|
271
270
|
"""
|
|
272
271
|
|
|
273
|
-
|
|
274
|
-
"""
|
|
275
|
-
Namespace for actor isolation within a tenant.
|
|
276
|
-
All actors spawned by this application will be registered in this namespace.
|
|
277
|
-
If empty, defaults to application_id during deployment.
|
|
278
|
-
Examples: "bank-test", "genomics-prod", "dev-sandbox"
|
|
279
|
-
"""
|
|
280
|
-
|
|
281
|
-
version: str = betterproto.string_field(4)
|
|
272
|
+
version: str = betterproto.string_field(3)
|
|
282
273
|
"""
|
|
283
274
|
Application version (semantic versioning)
|
|
284
275
|
Examples: "0.1.0", "1.2.3"
|
|
285
276
|
"""
|
|
286
277
|
|
|
287
|
-
description: str = betterproto.string_field(
|
|
278
|
+
description: str = betterproto.string_field(4)
|
|
288
279
|
"""Human-readable description"""
|
|
289
280
|
|
|
290
|
-
type: "ApplicationType" = betterproto.enum_field(
|
|
281
|
+
type: "ApplicationType" = betterproto.enum_field(5)
|
|
291
282
|
"""Application type (library or active)"""
|
|
292
283
|
|
|
293
|
-
dependencies: List[str] = betterproto.string_field(
|
|
294
|
-
"""
|
|
295
|
-
Dependencies (other applications that must start first)
|
|
296
|
-
e.g., ["plexspaces-core", "plexspaces-tuplespace"]
|
|
297
|
-
"""
|
|
284
|
+
dependencies: List[str] = betterproto.string_field(6)
|
|
285
|
+
"""Dependencies (other applications that must start first)"""
|
|
298
286
|
|
|
299
287
|
env: Dict[str, str] = betterproto.map_field(
|
|
300
|
-
|
|
288
|
+
7, betterproto.TYPE_STRING, betterproto.TYPE_STRING
|
|
301
289
|
)
|
|
302
290
|
"""Application-level environment variables"""
|
|
303
291
|
|
|
304
292
|
supervisor: Optional["__supervision_v1__.SupervisorSpec"] = (
|
|
305
|
-
betterproto.message_field(
|
|
293
|
+
betterproto.message_field(8, optional=True)
|
|
306
294
|
)
|
|
307
295
|
"""Supervision tree (only for active applications)"""
|
|
308
296
|
|
|
309
|
-
enabled: bool = betterproto.bool_field(
|
|
310
|
-
"""
|
|
311
|
-
Whether application is enabled (false = skip loading)
|
|
312
|
-
Default: true
|
|
313
|
-
"""
|
|
297
|
+
enabled: bool = betterproto.bool_field(9)
|
|
298
|
+
"""Whether application is enabled (false = skip loading). Default: true"""
|
|
314
299
|
|
|
315
|
-
auto_start: bool = betterproto.bool_field(
|
|
300
|
+
auto_start: bool = betterproto.bool_field(10)
|
|
316
301
|
"""
|
|
317
|
-
Whether to start application automatically on node boot
|
|
318
|
-
Default: true
|
|
319
|
-
Future: false allows manual start via ApplicationService API
|
|
302
|
+
Whether to start application automatically on node boot. Default: true
|
|
320
303
|
"""
|
|
321
304
|
|
|
322
|
-
shutdown_timeout: timedelta = betterproto.message_field(
|
|
323
|
-
"""
|
|
324
|
-
Shutdown timeout (force kill if exceeded)
|
|
325
|
-
Default: 60 seconds
|
|
326
|
-
"""
|
|
305
|
+
shutdown_timeout: timedelta = betterproto.message_field(11)
|
|
306
|
+
"""Shutdown timeout (force kill if exceeded). Default: 60 seconds"""
|
|
327
307
|
|
|
328
|
-
shutdown_strategy: "ShutdownStrategy" = betterproto.enum_field(
|
|
329
|
-
"""
|
|
330
|
-
Shutdown strategy (graceful or immediate)
|
|
331
|
-
Default: GRACEFUL
|
|
332
|
-
"""
|
|
308
|
+
shutdown_strategy: "ShutdownStrategy" = betterproto.enum_field(12)
|
|
309
|
+
"""Shutdown strategy (graceful or immediate). Default: GRACEFUL"""
|
|
333
310
|
|
|
334
|
-
metadata: "__common_v1__.Metadata" = betterproto.message_field(
|
|
335
|
-
"""
|
|
336
|
-
Application metadata (tags, labels, annotations)
|
|
337
|
-
Examples:
|
|
338
|
-
- environment: "production"
|
|
339
|
-
- team: "genomics"
|
|
340
|
-
- criticality: "high"
|
|
341
|
-
"""
|
|
311
|
+
metadata: "__common_v1__.Metadata" = betterproto.message_field(13)
|
|
312
|
+
"""Application metadata (tags, labels, annotations)"""
|
|
342
313
|
|
|
343
|
-
seed_nodes: List[str] = betterproto.string_field(
|
|
314
|
+
seed_nodes: List[str] = betterproto.string_field(14)
|
|
344
315
|
"""
|
|
345
316
|
Seed nodes (gRPC addresses) to connect to when this application is deployed.
|
|
346
|
-
The node will connect to these addresses if not already connected, so
|
|
347
|
-
leader-worker and scatter/gather can use workers on other nodes.
|
|
348
|
-
Example: ["localhost:8091", "localhost:8093"]
|
|
349
317
|
"""
|
|
350
318
|
|
|
351
319
|
required_service_links: List["ApplicationServiceLinkRequirement"] = (
|
|
352
|
-
betterproto.message_field(
|
|
320
|
+
betterproto.message_field(15)
|
|
353
321
|
)
|
|
354
|
-
"""
|
|
355
|
-
External service links this application expects at deploy time (validated against node catalog).
|
|
356
|
-
"""
|
|
322
|
+
"""External service links this application expects at deploy time."""
|
|
357
323
|
|
|
358
324
|
|
|
359
325
|
@dataclass(eq=False, repr=False)
|
|
@@ -556,25 +522,24 @@ class ApplicationInfo(betterproto.Message):
|
|
|
556
522
|
"""Application ID"""
|
|
557
523
|
|
|
558
524
|
name: str = betterproto.string_field(2)
|
|
559
|
-
"""
|
|
525
|
+
"""
|
|
526
|
+
Application name (also serves as the namespace for actors in this application)
|
|
527
|
+
"""
|
|
560
528
|
|
|
561
529
|
tenant_id: str = betterproto.string_field(3)
|
|
562
530
|
"""Tenant ID for visibility and isolation."""
|
|
563
531
|
|
|
564
|
-
|
|
565
|
-
"""Namespace for application-scoped actors and filters."""
|
|
566
|
-
|
|
567
|
-
version: str = betterproto.string_field(5)
|
|
532
|
+
version: str = betterproto.string_field(4)
|
|
568
533
|
"""Application version"""
|
|
569
534
|
|
|
570
|
-
status: "ApplicationStatus" = betterproto.enum_field(
|
|
535
|
+
status: "ApplicationStatus" = betterproto.enum_field(5)
|
|
571
536
|
"""Current status"""
|
|
572
537
|
|
|
573
|
-
deployed_at: datetime = betterproto.message_field(
|
|
538
|
+
deployed_at: datetime = betterproto.message_field(6)
|
|
574
539
|
"""When the application was deployed"""
|
|
575
540
|
|
|
576
541
|
metrics: Optional["ApplicationMetrics"] = betterproto.message_field(
|
|
577
|
-
|
|
542
|
+
7, optional=True
|
|
578
543
|
)
|
|
579
544
|
"""Application metrics (optional)"""
|
|
580
545
|
|
|
@@ -96,7 +96,7 @@ class S3Config(betterproto.Message):
|
|
|
96
96
|
|
|
97
97
|
use_path_style: bool = betterproto.bool_field(4)
|
|
98
98
|
"""
|
|
99
|
-
Use path-style URLs (required for
|
|
99
|
+
Use path-style URLs (required for embedded and some S3-compatible stores)
|
|
100
100
|
"""
|
|
101
101
|
|
|
102
102
|
|