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.
Files changed (103) hide show
  1. {plexspaces-0.1.2 → plexspaces-0.1.5}/PKG-INFO +1 -1
  2. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/actor/v1/__init__.py +3 -3
  3. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/application/v1/__init__.py +30 -65
  4. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/config/v1/__init__.py +1 -1
  5. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/dashboard/v1/__init__.py +464 -0
  6. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/metrics/v1/__init__.py +1 -2
  7. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/node/v1/__init__.py +18 -0
  8. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/security/v1/__init__.py +230 -1
  9. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/services/prv/__init__.py +3 -0
  10. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/storage/v1/__init__.py +4 -1
  11. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/wasm/v1/__init__.py +1 -1
  12. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/runtime.py +25 -3
  13. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/PKG-INFO +1 -1
  14. {plexspaces-0.1.2 → plexspaces-0.1.5}/pyproject.toml +1 -1
  15. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_runtime.py +4 -3
  16. {plexspaces-0.1.2 → plexspaces-0.1.5}/README.md +0 -0
  17. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/__init__.py +0 -0
  18. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/actor_id.py +0 -0
  19. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/decorators.py +0 -0
  20. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/__init__.py +0 -0
  21. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/buf/__init__.py +0 -0
  22. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/buf/validate/__init__.py +0 -0
  23. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/google/__init__.py +0 -0
  24. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/google/api/__init__.py +0 -0
  25. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/__init__.py +0 -0
  26. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/gateway/__init__.py +0 -0
  27. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/gateway/protoc_gen_openapiv2/__init__.py +0 -0
  28. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/grpc/gateway/protoc_gen_openapiv2/options/__init__.py +0 -0
  29. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/__init__.py +0 -0
  30. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/actor/__init__.py +0 -0
  31. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/application/__init__.py +0 -0
  32. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/behaviors/__init__.py +0 -0
  33. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/behaviors/v1/__init__.py +0 -0
  34. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/channel/__init__.py +0 -0
  35. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/channel/v1/__init__.py +0 -0
  36. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/circuitbreaker/__init__.py +0 -0
  37. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/circuitbreaker/prv/__init__.py +0 -0
  38. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/common/__init__.py +0 -0
  39. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/common/v1/__init__.py +0 -0
  40. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/config/__init__.py +0 -0
  41. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/dashboard/__init__.py +0 -0
  42. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/facets/__init__.py +0 -0
  43. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/facets/v1/__init__.py +0 -0
  44. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/firecracker/__init__.py +0 -0
  45. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/firecracker/v1/__init__.py +0 -0
  46. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/grpc/__init__.py +0 -0
  47. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/grpc/v1/__init__.py +0 -0
  48. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/journaling/__init__.py +0 -0
  49. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/journaling/v1/__init__.py +0 -0
  50. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/keyvalue/__init__.py +0 -0
  51. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/keyvalue/v1/__init__.py +0 -0
  52. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/locks/__init__.py +0 -0
  53. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/locks/prv/__init__.py +0 -0
  54. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/mailbox/__init__.py +0 -0
  55. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/mailbox/v1/__init__.py +0 -0
  56. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/metrics/__init__.py +0 -0
  57. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/node/__init__.py +0 -0
  58. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/object_registry/__init__.py +0 -0
  59. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/object_registry/v1/__init__.py +0 -0
  60. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/persistence/__init__.py +0 -0
  61. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/persistence/prv/__init__.py +0 -0
  62. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/pool/__init__.py +0 -0
  63. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/pool/v1/__init__.py +0 -0
  64. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/processgroups/__init__.py +0 -0
  65. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/processgroups/v1/__init__.py +0 -0
  66. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/scheduling/__init__.py +0 -0
  67. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/scheduling/v1/__init__.py +0 -0
  68. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/security/__init__.py +0 -0
  69. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/services/__init__.py +0 -0
  70. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/storage/__init__.py +0 -0
  71. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/supervision/__init__.py +0 -0
  72. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/supervision/v1/__init__.py +0 -0
  73. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/system/__init__.py +0 -0
  74. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/system/v1/__init__.py +0 -0
  75. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/timer/__init__.py +0 -0
  76. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/timer/v1/__init__.py +0 -0
  77. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/tuplespace/__init__.py +0 -0
  78. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/tuplespace/v1/__init__.py +0 -0
  79. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/wasm/__init__.py +0 -0
  80. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/workflow/__init__.py +0 -0
  81. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/generated/plexspaces/workflow/v1/__init__.py +0 -0
  82. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/host.py +0 -0
  83. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/leader_worker.py +0 -0
  84. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/proto_wire.py +0 -0
  85. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces/workflow.py +0 -0
  86. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/SOURCES.txt +0 -0
  87. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/dependency_links.txt +0 -0
  88. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/entry_points.txt +0 -0
  89. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/requires.txt +0 -0
  90. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces.egg-info/top_level.txt +0 -0
  91. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces_cli/__init__.py +0 -0
  92. {plexspaces-0.1.2 → plexspaces-0.1.5}/plexspaces_cli/build.py +0 -0
  93. {plexspaces-0.1.2 → plexspaces-0.1.5}/setup.cfg +0 -0
  94. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_abstractions_contract.py +0 -0
  95. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_actor_id.py +0 -0
  96. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_application_metrics_host.py +0 -0
  97. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_decorators.py +0 -0
  98. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_host.py +0 -0
  99. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_host_collective.py +0 -0
  100. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_host_tuple_space.py +0 -0
  101. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_http_fetch_wire.py +0 -0
  102. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_lock_wire.py +0 -0
  103. {plexspaces-0.1.2 → plexspaces-0.1.5}/tests/test_workflow_retry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexspaces
3
- Version: 0.1.2
3
+ Version: 0.1.5
4
4
  Summary: PlexSpaces Python SDK - Build actors with minimal boilerplate
5
5
  Author: PlexSpaces Contributors
6
6
  License: AGPL-3.0-or-later
@@ -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 (backward compatible, no migration)
611
- Version 2 → 3: Remove deprecated field (backward compatible, no migration)
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 (backward compatible)
774
+ // Version 2: Added retry config
775
775
  properties: {
776
776
  "timeout_ms": 5000,
777
777
  "max_retries": 3, // NEW: defaults to 3
@@ -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
- namespace: str = betterproto.string_field(3)
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(5)
278
+ description: str = betterproto.string_field(4)
288
279
  """Human-readable description"""
289
280
 
290
- type: "ApplicationType" = betterproto.enum_field(6)
281
+ type: "ApplicationType" = betterproto.enum_field(5)
291
282
  """Application type (library or active)"""
292
283
 
293
- dependencies: List[str] = betterproto.string_field(7)
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
- 8, betterproto.TYPE_STRING, betterproto.TYPE_STRING
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(9, optional=True)
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(10)
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(11)
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(12)
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(13)
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(14)
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(15)
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(16)
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
- """Application name"""
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
- namespace: str = betterproto.string_field(4)
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(6)
535
+ status: "ApplicationStatus" = betterproto.enum_field(5)
571
536
  """Current status"""
572
537
 
573
- deployed_at: datetime = betterproto.message_field(7)
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
- 8, optional=True
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 MinIO and some S3-compatible stores)
99
+ Use path-style URLs (required for embedded and some S3-compatible stores)
100
100
  """
101
101
 
102
102