lazycloud-shared 0.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.
Files changed (153) hide show
  1. lazycloud_shared-0.0.0/PKG-INFO +8 -0
  2. lazycloud_shared-0.0.0/pyproject.toml +20 -0
  3. lazycloud_shared-0.0.0/setup.cfg +4 -0
  4. lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/PKG-INFO +8 -0
  5. lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/SOURCES.txt +151 -0
  6. lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/dependency_links.txt +1 -0
  7. lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/requires.txt +3 -0
  8. lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/top_level.txt +1 -0
  9. lazycloud_shared-0.0.0/src/shared/__init__.py +1 -0
  10. lazycloud_shared-0.0.0/src/shared/app_identity.py +132 -0
  11. lazycloud_shared-0.0.0/src/shared/app_lifecycle.py +43 -0
  12. lazycloud_shared-0.0.0/src/shared/app_slug.py +44 -0
  13. lazycloud_shared-0.0.0/src/shared/autoscaler_state.py +52 -0
  14. lazycloud_shared-0.0.0/src/shared/autoscaling.py +371 -0
  15. lazycloud_shared-0.0.0/src/shared/aws_connections.py +584 -0
  16. lazycloud_shared-0.0.0/src/shared/billing_accounts.py +101 -0
  17. lazycloud_shared-0.0.0/src/shared/billing_plans.py +22 -0
  18. lazycloud_shared-0.0.0/src/shared/billing_quotes.py +469 -0
  19. lazycloud_shared-0.0.0/src/shared/billing_rate_card.py +620 -0
  20. lazycloud_shared-0.0.0/src/shared/bytes_transport.py +38 -0
  21. lazycloud_shared-0.0.0/src/shared/cache_records.py +19 -0
  22. lazycloud_shared-0.0.0/src/shared/callbacks.py +33 -0
  23. lazycloud_shared-0.0.0/src/shared/capacity.py +237 -0
  24. lazycloud_shared-0.0.0/src/shared/checkpoints.py +76 -0
  25. lazycloud_shared-0.0.0/src/shared/compute_enrollment.py +156 -0
  26. lazycloud_shared-0.0.0/src/shared/compute_fleet.py +89 -0
  27. lazycloud_shared-0.0.0/src/shared/compute_policy.py +255 -0
  28. lazycloud_shared-0.0.0/src/shared/container_requests.py +410 -0
  29. lazycloud_shared-0.0.0/src/shared/containers.py +82 -0
  30. lazycloud_shared-0.0.0/src/shared/contracts.py +8 -0
  31. lazycloud_shared-0.0.0/src/shared/cron.py +95 -0
  32. lazycloud_shared-0.0.0/src/shared/custom_domains.py +149 -0
  33. lazycloud_shared-0.0.0/src/shared/deployment_records.py +450 -0
  34. lazycloud_shared-0.0.0/src/shared/deployment_settings.py +25 -0
  35. lazycloud_shared-0.0.0/src/shared/deployment_subdomains.py +100 -0
  36. lazycloud_shared-0.0.0/src/shared/deployments.py +23 -0
  37. lazycloud_shared-0.0.0/src/shared/enums.py +12 -0
  38. lazycloud_shared-0.0.0/src/shared/env.py +167 -0
  39. lazycloud_shared-0.0.0/src/shared/errors.py +69 -0
  40. lazycloud_shared-0.0.0/src/shared/events.py +29 -0
  41. lazycloud_shared-0.0.0/src/shared/external_identity.py +47 -0
  42. lazycloud_shared-0.0.0/src/shared/function_payloads.py +220 -0
  43. lazycloud_shared-0.0.0/src/shared/gpu.py +256 -0
  44. lazycloud_shared-0.0.0/src/shared/http/__init__.py +1 -0
  45. lazycloud_shared-0.0.0/src/shared/http/apps.py +87 -0
  46. lazycloud_shared-0.0.0/src/shared/http/artifacts.py +78 -0
  47. lazycloud_shared-0.0.0/src/shared/http/aws_connections.py +133 -0
  48. lazycloud_shared-0.0.0/src/shared/http/base.py +16 -0
  49. lazycloud_shared-0.0.0/src/shared/http/billing.py +187 -0
  50. lazycloud_shared-0.0.0/src/shared/http/callbacks.py +23 -0
  51. lazycloud_shared-0.0.0/src/shared/http/client_manifests.py +128 -0
  52. lazycloud_shared-0.0.0/src/shared/http/collections.py +109 -0
  53. lazycloud_shared-0.0.0/src/shared/http/compute.py +378 -0
  54. lazycloud_shared-0.0.0/src/shared/http/compute_policy.py +163 -0
  55. lazycloud_shared-0.0.0/src/shared/http/concurrency.py +53 -0
  56. lazycloud_shared-0.0.0/src/shared/http/custom_domains.py +66 -0
  57. lazycloud_shared-0.0.0/src/shared/http/deployments.py +118 -0
  58. lazycloud_shared-0.0.0/src/shared/http/device_auth.py +57 -0
  59. lazycloud_shared-0.0.0/src/shared/http/endpoint_forwarding.py +277 -0
  60. lazycloud_shared-0.0.0/src/shared/http/endpoints.py +68 -0
  61. lazycloud_shared-0.0.0/src/shared/http/errors.py +84 -0
  62. lazycloud_shared-0.0.0/src/shared/http/functions.py +166 -0
  63. lazycloud_shared-0.0.0/src/shared/http/gateway.py +333 -0
  64. lazycloud_shared-0.0.0/src/shared/http/gateway_tasks.py +55 -0
  65. lazycloud_shared-0.0.0/src/shared/http/images.py +79 -0
  66. lazycloud_shared-0.0.0/src/shared/http/objects.py +96 -0
  67. lazycloud_shared-0.0.0/src/shared/http/observability.py +376 -0
  68. lazycloud_shared-0.0.0/src/shared/http/operations.py +210 -0
  69. lazycloud_shared-0.0.0/src/shared/http/pods.py +331 -0
  70. lazycloud_shared-0.0.0/src/shared/http/pricing.py +147 -0
  71. lazycloud_shared-0.0.0/src/shared/http/provider_nodes.py +106 -0
  72. lazycloud_shared-0.0.0/src/shared/http/secrets.py +128 -0
  73. lazycloud_shared-0.0.0/src/shared/http/shells.py +78 -0
  74. lazycloud_shared-0.0.0/src/shared/http/source_cache_cleanup.py +23 -0
  75. lazycloud_shared-0.0.0/src/shared/http/storage.py +90 -0
  76. lazycloud_shared-0.0.0/src/shared/http/stubs.py +170 -0
  77. lazycloud_shared-0.0.0/src/shared/http/system.py +154 -0
  78. lazycloud_shared-0.0.0/src/shared/http/task_payload.py +74 -0
  79. lazycloud_shared-0.0.0/src/shared/http/tasks.py +141 -0
  80. lazycloud_shared-0.0.0/src/shared/http/usage.py +214 -0
  81. lazycloud_shared-0.0.0/src/shared/http/users.py +117 -0
  82. lazycloud_shared-0.0.0/src/shared/http/volumes.py +250 -0
  83. lazycloud_shared-0.0.0/src/shared/http/workspace_changes.py +86 -0
  84. lazycloud_shared-0.0.0/src/shared/http/workspaces.py +169 -0
  85. lazycloud_shared-0.0.0/src/shared/http_headers.py +61 -0
  86. lazycloud_shared-0.0.0/src/shared/http_transport.py +203 -0
  87. lazycloud_shared-0.0.0/src/shared/identity.py +311 -0
  88. lazycloud_shared-0.0.0/src/shared/image_building/__init__.py +23 -0
  89. lazycloud_shared-0.0.0/src/shared/image_building/authoring.py +62 -0
  90. lazycloud_shared-0.0.0/src/shared/image_building/constants.py +31 -0
  91. lazycloud_shared-0.0.0/src/shared/image_building/context.py +52 -0
  92. lazycloud_shared-0.0.0/src/shared/image_building/credentials.py +245 -0
  93. lazycloud_shared-0.0.0/src/shared/image_building/planning.py +15 -0
  94. lazycloud_shared-0.0.0/src/shared/image_building/records.py +85 -0
  95. lazycloud_shared-0.0.0/src/shared/image_building/requirements.py +49 -0
  96. lazycloud_shared-0.0.0/src/shared/lifecycle.py +104 -0
  97. lazycloud_shared-0.0.0/src/shared/logs.py +35 -0
  98. lazycloud_shared-0.0.0/src/shared/managed_runtime_integrity.py +112 -0
  99. lazycloud_shared-0.0.0/src/shared/mounts.py +66 -0
  100. lazycloud_shared-0.0.0/src/shared/objects.py +41 -0
  101. lazycloud_shared-0.0.0/src/shared/paths.py +19 -0
  102. lazycloud_shared-0.0.0/src/shared/payments.py +431 -0
  103. lazycloud_shared-0.0.0/src/shared/process_liveness.py +88 -0
  104. lazycloud_shared-0.0.0/src/shared/provider_config.py +27 -0
  105. lazycloud_shared-0.0.0/src/shared/py.typed +1 -0
  106. lazycloud_shared-0.0.0/src/shared/queue_messages.py +21 -0
  107. lazycloud_shared-0.0.0/src/shared/realtime/__init__.py +1 -0
  108. lazycloud_shared-0.0.0/src/shared/realtime/contracts.py +302 -0
  109. lazycloud_shared-0.0.0/src/shared/realtime/streams.py +768 -0
  110. lazycloud_shared-0.0.0/src/shared/resources.py +26 -0
  111. lazycloud_shared-0.0.0/src/shared/routing.py +96 -0
  112. lazycloud_shared-0.0.0/src/shared/runtime_paths.py +15 -0
  113. lazycloud_shared-0.0.0/src/shared/scheduling.py +391 -0
  114. lazycloud_shared-0.0.0/src/shared/secrets.py +22 -0
  115. lazycloud_shared-0.0.0/src/shared/serialization.py +183 -0
  116. lazycloud_shared-0.0.0/src/shared/shell_protocol.py +121 -0
  117. lazycloud_shared-0.0.0/src/shared/signals.py +228 -0
  118. lazycloud_shared-0.0.0/src/shared/source_cache_cleanup.py +146 -0
  119. lazycloud_shared-0.0.0/src/shared/task_context.py +71 -0
  120. lazycloud_shared-0.0.0/src/shared/tasks.py +290 -0
  121. lazycloud_shared-0.0.0/src/shared/timestamps.py +20 -0
  122. lazycloud_shared-0.0.0/src/shared/transport_retry.py +126 -0
  123. lazycloud_shared-0.0.0/src/shared/urls.py +198 -0
  124. lazycloud_shared-0.0.0/src/shared/usage.py +163 -0
  125. lazycloud_shared-0.0.0/src/shared/usage_query.py +19 -0
  126. lazycloud_shared-0.0.0/src/shared/volumes.py +14 -0
  127. lazycloud_shared-0.0.0/src/shared/worker_events.py +59 -0
  128. lazycloud_shared-0.0.0/src/shared/workload_config.py +310 -0
  129. lazycloud_shared-0.0.0/src/shared/workload_keys.py +22 -0
  130. lazycloud_shared-0.0.0/src/shared/workspace_storage.py +89 -0
  131. lazycloud_shared-0.0.0/tests/test_autoscaling_semantics.py +27 -0
  132. lazycloud_shared-0.0.0/tests/test_billing_quotes.py +129 -0
  133. lazycloud_shared-0.0.0/tests/test_common_stubs.py +55 -0
  134. lazycloud_shared-0.0.0/tests/test_common_utilities.py +123 -0
  135. lazycloud_shared-0.0.0/tests/test_custom_domains.py +16 -0
  136. lazycloud_shared-0.0.0/tests/test_deployment_subdomains.py +98 -0
  137. lazycloud_shared-0.0.0/tests/test_execution_contracts.py +50 -0
  138. lazycloud_shared-0.0.0/tests/test_fleet_contracts.py +141 -0
  139. lazycloud_shared-0.0.0/tests/test_gpu_contract.py +81 -0
  140. lazycloud_shared-0.0.0/tests/test_http_json_boundaries.py +133 -0
  141. lazycloud_shared-0.0.0/tests/test_http_transport_tls.py +95 -0
  142. lazycloud_shared-0.0.0/tests/test_identity_contracts.py +84 -0
  143. lazycloud_shared-0.0.0/tests/test_image_building_credentials.py +122 -0
  144. lazycloud_shared-0.0.0/tests/test_memory_eviction_policy.py +57 -0
  145. lazycloud_shared-0.0.0/tests/test_mounts.py +24 -0
  146. lazycloud_shared-0.0.0/tests/test_process_liveness.py +38 -0
  147. lazycloud_shared-0.0.0/tests/test_serialization.py +71 -0
  148. lazycloud_shared-0.0.0/tests/test_shell_protocol.py +38 -0
  149. lazycloud_shared-0.0.0/tests/test_storage_contracts.py +126 -0
  150. lazycloud_shared-0.0.0/tests/test_transport_retry.py +39 -0
  151. lazycloud_shared-0.0.0/tests/test_urls.py +22 -0
  152. lazycloud_shared-0.0.0/tests/test_usage_contracts.py +66 -0
  153. lazycloud_shared-0.0.0/tests/test_workload_defaults.py +104 -0
@@ -0,0 +1,8 @@
1
+ Metadata-Version: 2.4
2
+ Name: lazycloud-shared
3
+ Version: 0.0.0
4
+ Summary: Boundary-safe shared primitives and HTTP payloads for the compute platform.
5
+ Requires-Python: >=3.10
6
+ Requires-Dist: certifi>=2025.1.31
7
+ Requires-Dist: croniter>=6.2.4
8
+ Requires-Dist: pydantic<3,>=2.8
@@ -0,0 +1,20 @@
1
+ [project]
2
+ name = "lazycloud-shared"
3
+ version = "0.0.0"
4
+ description = "Boundary-safe shared primitives and HTTP payloads for the compute platform."
5
+ requires-python = ">=3.10"
6
+ dependencies = [
7
+ "certifi>=2025.1.31",
8
+ "croniter>=6.2.4",
9
+ "pydantic>=2.8,<3",
10
+ ]
11
+
12
+ [build-system]
13
+ requires = ["setuptools>=68", "wheel"]
14
+ build-backend = "setuptools.build_meta"
15
+
16
+ [tool.setuptools.packages.find]
17
+ where = ["src"]
18
+
19
+ [tool.setuptools.package-data]
20
+ shared = ["py.typed"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,8 @@
1
+ Metadata-Version: 2.4
2
+ Name: lazycloud-shared
3
+ Version: 0.0.0
4
+ Summary: Boundary-safe shared primitives and HTTP payloads for the compute platform.
5
+ Requires-Python: >=3.10
6
+ Requires-Dist: certifi>=2025.1.31
7
+ Requires-Dist: croniter>=6.2.4
8
+ Requires-Dist: pydantic<3,>=2.8
@@ -0,0 +1,151 @@
1
+ pyproject.toml
2
+ src/lazycloud_shared.egg-info/PKG-INFO
3
+ src/lazycloud_shared.egg-info/SOURCES.txt
4
+ src/lazycloud_shared.egg-info/dependency_links.txt
5
+ src/lazycloud_shared.egg-info/requires.txt
6
+ src/lazycloud_shared.egg-info/top_level.txt
7
+ src/shared/__init__.py
8
+ src/shared/app_identity.py
9
+ src/shared/app_lifecycle.py
10
+ src/shared/app_slug.py
11
+ src/shared/autoscaler_state.py
12
+ src/shared/autoscaling.py
13
+ src/shared/aws_connections.py
14
+ src/shared/billing_accounts.py
15
+ src/shared/billing_plans.py
16
+ src/shared/billing_quotes.py
17
+ src/shared/billing_rate_card.py
18
+ src/shared/bytes_transport.py
19
+ src/shared/cache_records.py
20
+ src/shared/callbacks.py
21
+ src/shared/capacity.py
22
+ src/shared/checkpoints.py
23
+ src/shared/compute_enrollment.py
24
+ src/shared/compute_fleet.py
25
+ src/shared/compute_policy.py
26
+ src/shared/container_requests.py
27
+ src/shared/containers.py
28
+ src/shared/contracts.py
29
+ src/shared/cron.py
30
+ src/shared/custom_domains.py
31
+ src/shared/deployment_records.py
32
+ src/shared/deployment_settings.py
33
+ src/shared/deployment_subdomains.py
34
+ src/shared/deployments.py
35
+ src/shared/enums.py
36
+ src/shared/env.py
37
+ src/shared/errors.py
38
+ src/shared/events.py
39
+ src/shared/external_identity.py
40
+ src/shared/function_payloads.py
41
+ src/shared/gpu.py
42
+ src/shared/http_headers.py
43
+ src/shared/http_transport.py
44
+ src/shared/identity.py
45
+ src/shared/lifecycle.py
46
+ src/shared/logs.py
47
+ src/shared/managed_runtime_integrity.py
48
+ src/shared/mounts.py
49
+ src/shared/objects.py
50
+ src/shared/paths.py
51
+ src/shared/payments.py
52
+ src/shared/process_liveness.py
53
+ src/shared/provider_config.py
54
+ src/shared/py.typed
55
+ src/shared/queue_messages.py
56
+ src/shared/resources.py
57
+ src/shared/routing.py
58
+ src/shared/runtime_paths.py
59
+ src/shared/scheduling.py
60
+ src/shared/secrets.py
61
+ src/shared/serialization.py
62
+ src/shared/shell_protocol.py
63
+ src/shared/signals.py
64
+ src/shared/source_cache_cleanup.py
65
+ src/shared/task_context.py
66
+ src/shared/tasks.py
67
+ src/shared/timestamps.py
68
+ src/shared/transport_retry.py
69
+ src/shared/urls.py
70
+ src/shared/usage.py
71
+ src/shared/usage_query.py
72
+ src/shared/volumes.py
73
+ src/shared/worker_events.py
74
+ src/shared/workload_config.py
75
+ src/shared/workload_keys.py
76
+ src/shared/workspace_storage.py
77
+ src/shared/http/__init__.py
78
+ src/shared/http/apps.py
79
+ src/shared/http/artifacts.py
80
+ src/shared/http/aws_connections.py
81
+ src/shared/http/base.py
82
+ src/shared/http/billing.py
83
+ src/shared/http/callbacks.py
84
+ src/shared/http/client_manifests.py
85
+ src/shared/http/collections.py
86
+ src/shared/http/compute.py
87
+ src/shared/http/compute_policy.py
88
+ src/shared/http/concurrency.py
89
+ src/shared/http/custom_domains.py
90
+ src/shared/http/deployments.py
91
+ src/shared/http/device_auth.py
92
+ src/shared/http/endpoint_forwarding.py
93
+ src/shared/http/endpoints.py
94
+ src/shared/http/errors.py
95
+ src/shared/http/functions.py
96
+ src/shared/http/gateway.py
97
+ src/shared/http/gateway_tasks.py
98
+ src/shared/http/images.py
99
+ src/shared/http/objects.py
100
+ src/shared/http/observability.py
101
+ src/shared/http/operations.py
102
+ src/shared/http/pods.py
103
+ src/shared/http/pricing.py
104
+ src/shared/http/provider_nodes.py
105
+ src/shared/http/secrets.py
106
+ src/shared/http/shells.py
107
+ src/shared/http/source_cache_cleanup.py
108
+ src/shared/http/storage.py
109
+ src/shared/http/stubs.py
110
+ src/shared/http/system.py
111
+ src/shared/http/task_payload.py
112
+ src/shared/http/tasks.py
113
+ src/shared/http/usage.py
114
+ src/shared/http/users.py
115
+ src/shared/http/volumes.py
116
+ src/shared/http/workspace_changes.py
117
+ src/shared/http/workspaces.py
118
+ src/shared/image_building/__init__.py
119
+ src/shared/image_building/authoring.py
120
+ src/shared/image_building/constants.py
121
+ src/shared/image_building/context.py
122
+ src/shared/image_building/credentials.py
123
+ src/shared/image_building/planning.py
124
+ src/shared/image_building/records.py
125
+ src/shared/image_building/requirements.py
126
+ src/shared/realtime/__init__.py
127
+ src/shared/realtime/contracts.py
128
+ src/shared/realtime/streams.py
129
+ tests/test_autoscaling_semantics.py
130
+ tests/test_billing_quotes.py
131
+ tests/test_common_stubs.py
132
+ tests/test_common_utilities.py
133
+ tests/test_custom_domains.py
134
+ tests/test_deployment_subdomains.py
135
+ tests/test_execution_contracts.py
136
+ tests/test_fleet_contracts.py
137
+ tests/test_gpu_contract.py
138
+ tests/test_http_json_boundaries.py
139
+ tests/test_http_transport_tls.py
140
+ tests/test_identity_contracts.py
141
+ tests/test_image_building_credentials.py
142
+ tests/test_memory_eviction_policy.py
143
+ tests/test_mounts.py
144
+ tests/test_process_liveness.py
145
+ tests/test_serialization.py
146
+ tests/test_shell_protocol.py
147
+ tests/test_storage_contracts.py
148
+ tests/test_transport_retry.py
149
+ tests/test_urls.py
150
+ tests/test_usage_contracts.py
151
+ tests/test_workload_defaults.py
@@ -0,0 +1,3 @@
1
+ certifi>=2025.1.31
2
+ croniter>=6.2.4
3
+ pydantic<3,>=2.8
@@ -0,0 +1 @@
1
+ """Protocol-neutral contracts shared across LazyCloud process boundaries."""
@@ -0,0 +1,132 @@
1
+ from __future__ import annotations
2
+
3
+ NAME = "lazycloud"
4
+ DISPLAY_NAME = NAME.replace("-", " ").title()
5
+ ENV_PREFIX = NAME.upper().replace("-", "_")
6
+ _LABEL_NAME = "".join(part.capitalize() for part in NAME.replace("_", "-").split("-"))
7
+ HOME_DIR = f".{NAME}"
8
+ STATE_DIR = f"/var/lib/{NAME}"
9
+ CACHE_DIR = f"{STATE_DIR}/cache"
10
+ CACHE_PAGES_DIR = f"{CACHE_DIR}/pages"
11
+ WORKER_BUNDLE_ROOT = f"/tmp/{NAME}-containers"
12
+ WORKER_CHECKPOINT_ROOT = f"/tmp/{NAME}-checkpoints"
13
+ CHECKPOINT_SIGNAL_ROOT = f"/tmp/{NAME}-checkpoint-signals"
14
+ MANAGED_PACKAGE_ROOT = f"/tmp/{NAME}-packages"
15
+ FUNCTION_IMAGE = f"{NAME}-function"
16
+ ENDPOINT_IMAGE = f"{NAME}-endpoint"
17
+ POD_IMAGE = f"{NAME}-pod"
18
+ SHELL_IMAGE = f"{NAME}-shell"
19
+ SHELL_LOG_PATH = f"/tmp/{NAME}-shell.log"
20
+ AGENT_CONTAINER_TMP_PATH = f"/tmp/{NAME}"
21
+ AGENT_CONTAINER_LOG_PATH = f"/var/log/{NAME}"
22
+ AGENT_STATE_DIR = f"{STATE_DIR}/agent"
23
+ AGENT_CONTAINER_DATA_PATH = f"{AGENT_STATE_DIR}/data"
24
+ AGENT_CONTAINER_OBJECT_PATH = f"{AGENT_CONTAINER_DATA_PATH}/objects"
25
+ AGENT_WORKER_CONFIG_PATH = f"/etc/{NAME}/worker/config.json"
26
+ CLI_NAME = NAME
27
+ ADMIN_CLI_NAME = f"{NAME}-admin"
28
+ REDIS_KEY_PREFIX = NAME
29
+ OBJECT_STORE_BUCKET = f"{NAME}-objects"
30
+
31
+ WORKSPACE_BUCKET_PREFIX = "workspace"
32
+ """Default prefix of a workspace's own bucket.
33
+
34
+ A deployment sharing an AWS account with another one overrides this, because the
35
+ grant that reaches `workspace-*` cannot otherwise tell two deployments apart.
36
+ """
37
+ DATA_STORAGE_BUCKET = f"{NAME}-data"
38
+ OBJECT_STORE_ACCESS_KEY_ID = NAME
39
+ OBJECT_STORE_SECRET_ACCESS_KEY = f"{NAME}-secret"
40
+ WORKSPACE_OBJECT_BUCKET = "default"
41
+ IMAGE_BUILD_CONTEXT_BUCKET = "build-contexts"
42
+ CLUSTER_NAME_LABEL = f"{_LABEL_NAME}ClusterName"
43
+ POOL_NAME_LABEL = f"{_LABEL_NAME}PoolName"
44
+ MACHINE_ID_LABEL = f"{_LABEL_NAME}MachineId"
45
+ DEFAULT_RESOURCE_TYPE = NAME
46
+ EVENT_SOURCE = f"{NAME}-cluster"
47
+ INTERNAL_WEBHOOK_FORMAT = f"{NAME}-webhook"
48
+ METRICS_NAMESPACE = NAME.replace("-", "_")
49
+ AGENT_NAME = f"{NAME}-agent"
50
+ AGENT_SERVICE_DESCRIPTION = f"{DISPLAY_NAME} agent"
51
+ AGENT_LAUNCHD_LABEL_PREFIX = f"com.{NAME}.agent"
52
+ CONTROL_PLANE_SERVICE_NAME = f"{NAME}-api"
53
+ CONTROL_PLANE_IMAGE = "api"
54
+ SCHEDULER_PROCESS_NAME = f"{NAME}-scheduler"
55
+ SCHEDULER_IMAGE = "scheduler"
56
+ CONTAINER_WORKER_PROCESS_NAME = f"{NAME}-container-worker"
57
+ CONTAINER_WORKER_IMAGE = "container-worker"
58
+ CONTAINER_HELPER_PATH = f"/usr/local/bin/{NAME}-sandbox-supervisor"
59
+ WORKER_BOOTSTRAP_PROCESS_NAME = f"{NAME}-worker-bootstrap"
60
+ WORKER_BOOTSTRAP_IMAGE = "worker-bootstrap"
61
+ CACHE_SERVER_PROCESS_NAME = f"{NAME}-cache-server"
62
+ CACHE_SERVER_IMAGE = "cache-server"
63
+ SANDBOX_COMPOSE_OVERRIDE_PATH = f"/tmp/{NAME}-docker-compose.override.yml"
64
+ METRICS_SOURCE = NAME
65
+ PRIVATE_RESOURCE_PREFIX = f"{NAME}-private"
66
+ SOURCE_CACHE_DIR = f"{NAME}-source-cache"
67
+ SOURCE_PACKAGE_BUCKET = f"{NAME}-source-packages"
68
+ WORKSPACE_UPLOAD_BUCKETS = frozenset(
69
+ {WORKSPACE_OBJECT_BUCKET, SOURCE_PACKAGE_BUCKET, IMAGE_BUILD_CONTEXT_BUCKET}
70
+ )
71
+
72
+ __all__ = [
73
+ "ADMIN_CLI_NAME",
74
+ "AGENT_CONTAINER_DATA_PATH",
75
+ "AGENT_CONTAINER_LOG_PATH",
76
+ "AGENT_CONTAINER_OBJECT_PATH",
77
+ "AGENT_CONTAINER_TMP_PATH",
78
+ "AGENT_LAUNCHD_LABEL_PREFIX",
79
+ "AGENT_NAME",
80
+ "AGENT_SERVICE_DESCRIPTION",
81
+ "AGENT_STATE_DIR",
82
+ "AGENT_WORKER_CONFIG_PATH",
83
+ "CACHE_DIR",
84
+ "CACHE_PAGES_DIR",
85
+ "CACHE_SERVER_IMAGE",
86
+ "CACHE_SERVER_PROCESS_NAME",
87
+ "CHECKPOINT_SIGNAL_ROOT",
88
+ "CLI_NAME",
89
+ "CLUSTER_NAME_LABEL",
90
+ "CONTAINER_HELPER_PATH",
91
+ "CONTAINER_WORKER_IMAGE",
92
+ "CONTAINER_WORKER_PROCESS_NAME",
93
+ "CONTROL_PLANE_IMAGE",
94
+ "CONTROL_PLANE_SERVICE_NAME",
95
+ "DATA_STORAGE_BUCKET",
96
+ "DEFAULT_RESOURCE_TYPE",
97
+ "DISPLAY_NAME",
98
+ "ENDPOINT_IMAGE",
99
+ "ENV_PREFIX",
100
+ "EVENT_SOURCE",
101
+ "FUNCTION_IMAGE",
102
+ "HOME_DIR",
103
+ "IMAGE_BUILD_CONTEXT_BUCKET",
104
+ "INTERNAL_WEBHOOK_FORMAT",
105
+ "MACHINE_ID_LABEL",
106
+ "MANAGED_PACKAGE_ROOT",
107
+ "METRICS_NAMESPACE",
108
+ "METRICS_SOURCE",
109
+ "NAME",
110
+ "OBJECT_STORE_ACCESS_KEY_ID",
111
+ "OBJECT_STORE_BUCKET",
112
+ "OBJECT_STORE_SECRET_ACCESS_KEY",
113
+ "POD_IMAGE",
114
+ "POOL_NAME_LABEL",
115
+ "PRIVATE_RESOURCE_PREFIX",
116
+ "REDIS_KEY_PREFIX",
117
+ "SANDBOX_COMPOSE_OVERRIDE_PATH",
118
+ "SCHEDULER_IMAGE",
119
+ "SCHEDULER_PROCESS_NAME",
120
+ "SHELL_IMAGE",
121
+ "SHELL_LOG_PATH",
122
+ "SOURCE_CACHE_DIR",
123
+ "SOURCE_PACKAGE_BUCKET",
124
+ "STATE_DIR",
125
+ "WORKER_BOOTSTRAP_IMAGE",
126
+ "WORKER_BOOTSTRAP_PROCESS_NAME",
127
+ "WORKER_BUNDLE_ROOT",
128
+ "WORKER_CHECKPOINT_ROOT",
129
+ "WORKSPACE_BUCKET_PREFIX",
130
+ "WORKSPACE_OBJECT_BUCKET",
131
+ "WORKSPACE_UPLOAD_BUCKETS",
132
+ ]
@@ -0,0 +1,43 @@
1
+ from __future__ import annotations
2
+
3
+ from enum import Enum
4
+
5
+
6
+ class AppLifecycleState(str, Enum):
7
+ Active = "active"
8
+ Pausing = "pausing"
9
+ Paused = "paused"
10
+ Resuming = "resuming"
11
+ Deleting = "deleting"
12
+ CleanupFailed = "cleanup_failed"
13
+ Deleted = "deleted"
14
+
15
+
16
+ class AppLifecycleTarget(str, Enum):
17
+ Active = "active"
18
+ Paused = "paused"
19
+ Deleted = "deleted"
20
+
21
+
22
+ class AppDeploymentIntentTarget(str, Enum):
23
+ Active = "active"
24
+ Inactive = "inactive"
25
+ Deleted = "deleted"
26
+
27
+
28
+ UNFINISHED_APP_LIFECYCLE_STATES = frozenset(
29
+ {
30
+ AppLifecycleState.Pausing,
31
+ AppLifecycleState.Resuming,
32
+ AppLifecycleState.Deleting,
33
+ AppLifecycleState.CleanupFailed,
34
+ }
35
+ )
36
+
37
+
38
+ __all__ = [
39
+ "UNFINISHED_APP_LIFECYCLE_STATES",
40
+ "AppDeploymentIntentTarget",
41
+ "AppLifecycleState",
42
+ "AppLifecycleTarget",
43
+ ]
@@ -0,0 +1,44 @@
1
+ from __future__ import annotations
2
+
3
+ import keyword
4
+ import re
5
+
6
+ APP_SLUG_PATTERN = re.compile(r"^[a-z][a-z0-9_]{0,62}$")
7
+
8
+
9
+ def validate_app_slug(value: str) -> str:
10
+ slug = value.strip()
11
+ if not APP_SLUG_PATTERN.fullmatch(slug) or keyword.iskeyword(slug):
12
+ msg = (
13
+ "app slug must be a lowercase Python identifier segment, "
14
+ "start with a letter, and contain only lowercase letters, digits, or underscores"
15
+ )
16
+ raise ValueError(msg)
17
+ return slug
18
+
19
+
20
+ def app_slug_from_name(value: str) -> str:
21
+ raw = value.strip().lower()
22
+ slug = re.sub(r"[^a-z0-9_]+", "_", raw).strip("_")
23
+ if not slug or not slug[0].isalpha():
24
+ slug = f"app_{slug or 'default'}"
25
+ if len(slug) > 63:
26
+ slug = slug[:63].rstrip("_")
27
+ if keyword.iskeyword(slug):
28
+ slug = f"{slug}_app"
29
+ return validate_app_slug(slug)
30
+
31
+
32
+ def app_slug_or_default(value: str | None, *, default: str) -> str:
33
+ selected = (value or "").strip()
34
+ if selected:
35
+ return validate_app_slug(selected)
36
+ return app_slug_from_name(default)
37
+
38
+
39
+ __all__ = [
40
+ "APP_SLUG_PATTERN",
41
+ "app_slug_from_name",
42
+ "app_slug_or_default",
43
+ "validate_app_slug",
44
+ ]
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+
5
+ from pydantic import Field, JsonValue
6
+
7
+ from shared.contracts import ContractModel
8
+ from shared.enums import StringEnum
9
+ from shared.timestamps import utc_now
10
+
11
+
12
+ class AutoscalerTargetKind(StringEnum):
13
+ Function = "function"
14
+ Endpoint = "endpoint"
15
+ Pod = "pod"
16
+
17
+
18
+ class AutoscalerStateRecord(ContractModel):
19
+ name: str
20
+ workspace_id: str
21
+ source: str
22
+ target_kind: AutoscalerTargetKind
23
+ target_id: str
24
+ deployment_id: str = ""
25
+ app_id: str = ""
26
+ current_count: int = 0
27
+ desired_count: int = 0
28
+ signal_name: str = ""
29
+ signal_value: int = 0
30
+ decision: str = ""
31
+ reason: str = ""
32
+ active: bool = True
33
+ valid: bool = True
34
+ lock_acquired: bool = True
35
+ owner_lock_key: str = ""
36
+ cooldown_until: datetime | None = None
37
+ failed_container_count: int = 0
38
+ error: str = ""
39
+ last_sample: dict[str, JsonValue] = Field(default_factory=dict)
40
+ last_actions: list[dict[str, JsonValue]] = Field(default_factory=list)
41
+ updated_at: datetime = Field(default_factory=utc_now)
42
+
43
+
44
+ def autoscaler_state_name(target_kind: AutoscalerTargetKind, target_id: str) -> str:
45
+ return f"{target_kind.value}:{target_id}"
46
+
47
+
48
+ __all__ = [
49
+ "AutoscalerStateRecord",
50
+ "AutoscalerTargetKind",
51
+ "autoscaler_state_name",
52
+ ]