supervaizer 0.10.0__py3-none-any.whl → 0.10.3__py3-none-any.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.
@@ -5,6 +5,6 @@
5
5
  # https://mozilla.org/MPL/2.0/.
6
6
 
7
7
 
8
- VERSION = "0.10.0"
8
+ VERSION = "0.10.3"
9
9
  API_VERSION = "v1"
10
10
  TELEMETRY_VERSION = "v1"
@@ -18,7 +18,7 @@ from rich.table import Table
18
18
 
19
19
  from supervaizer.common import log
20
20
  from supervaizer.deploy.driver_factory import create_driver, get_supported_platforms
21
- from supervaizer.deploy.docker import get_git_sha
21
+ from supervaizer.deploy.utils import get_git_sha
22
22
  from supervaizer.deploy.drivers.base import DeploymentPlan
23
23
 
24
24
  console = Console()
@@ -19,11 +19,11 @@ from rich.console import Console
19
19
  from rich.progress import Progress, SpinnerColumn, TextColumn
20
20
 
21
21
  from supervaizer.common import log
22
- from supervaizer.deploy.docker import DockerManager, get_git_sha, ensure_docker_running
22
+ from supervaizer.deploy.docker import DockerManager, ensure_docker_running
23
23
  from supervaizer.deploy.driver_factory import create_driver, get_supported_platforms
24
24
  from supervaizer.deploy.drivers.base import DeploymentResult
25
25
  from supervaizer.deploy.state import StateManager
26
- from supervaizer.deploy.utils import create_deployment_directory
26
+ from supervaizer.deploy.utils import create_deployment_directory, get_git_sha
27
27
 
28
28
  console = Console()
29
29
 
@@ -11,12 +11,9 @@ This module handles Docker-related operations for deployment.
11
11
  """
12
12
 
13
13
  import os
14
- import subprocess
15
14
  from pathlib import Path
16
15
  from typing import Optional
17
16
 
18
- from docker import DockerClient
19
- from docker.errors import APIError, BuildError, DockerException
20
17
  from rich.console import Console
21
18
 
22
19
  from supervaizer.common import log
@@ -85,6 +82,14 @@ class DockerManager:
85
82
  """Initialize Docker manager."""
86
83
  self.client = None
87
84
  if require_docker:
85
+ try:
86
+ from docker import DockerClient
87
+ from docker.errors import DockerException
88
+ except ImportError:
89
+ raise RuntimeError(
90
+ "Docker package not installed. Install with: pip install supervaizer[deploy]"
91
+ ) from None
92
+
88
93
  try:
89
94
  self.client = DockerClient.from_env()
90
95
  self.client.ping() # Test connection
@@ -220,6 +225,8 @@ class DockerManager:
220
225
  build_args: Optional[dict] = None,
221
226
  ) -> str:
222
227
  """Build Docker image and return the image ID."""
228
+ from docker.errors import APIError, BuildError, DockerException
229
+
223
230
  if self.client is None:
224
231
  raise RuntimeError(
225
232
  "Docker client not available. Initialize DockerManager with require_docker=True"
@@ -296,6 +303,8 @@ class DockerManager:
296
303
 
297
304
  def tag_image(self, source_tag: str, target_tag: str) -> None:
298
305
  """Tag a Docker image."""
306
+ from docker.errors import DockerException
307
+
299
308
  if self.client is None:
300
309
  raise RuntimeError(
301
310
  "Docker client not available. Initialize DockerManager with require_docker=True"
@@ -311,6 +320,8 @@ class DockerManager:
311
320
 
312
321
  def push_image(self, tag: str) -> None:
313
322
  """Push Docker image to registry."""
323
+ from docker.errors import DockerException
324
+
314
325
  if self.client is None:
315
326
  raise RuntimeError(
316
327
  "Docker client not available. Initialize DockerManager with require_docker=True"
@@ -335,6 +346,8 @@ class DockerManager:
335
346
 
336
347
  def get_image_digest(self, tag: str) -> Optional[str]:
337
348
  """Get the digest of a Docker image."""
349
+ from docker.errors import DockerException
350
+
338
351
  if self.client is None:
339
352
  raise RuntimeError(
340
353
  "Docker client not available. Initialize DockerManager with require_docker=True"
@@ -352,19 +365,13 @@ class DockerManager:
352
365
  def ensure_docker_running() -> bool:
353
366
  """Check if Docker is running and accessible."""
354
367
  try:
368
+ from docker import DockerClient
369
+ from docker.errors import DockerException
370
+
355
371
  client = DockerClient.from_env()
356
372
  client.ping()
357
373
  return True
374
+ except ImportError:
375
+ return False
358
376
  except DockerException:
359
377
  return False
360
-
361
-
362
- def get_git_sha() -> str:
363
- """Get the current git SHA for tagging."""
364
- try:
365
- result = subprocess.run(
366
- ["git", "rev-parse", "HEAD"], capture_output=True, text=True, check=True
367
- )
368
- return result.stdout.strip()[:8] # Use short SHA
369
- except (subprocess.CalledProcessError, FileNotFoundError):
370
- return "latest"
@@ -10,9 +10,9 @@ Deployment State Management
10
10
  This module handles deployment state persistence and management.
11
11
  """
12
12
 
13
+ import subprocess
13
14
  from pathlib import Path
14
15
 
15
-
16
16
  from supervaizer.common import log
17
17
 
18
18
 
@@ -39,3 +39,14 @@ def create_deployment_directory(project_root: Path) -> Path:
39
39
  log.info(f"Created .gitignore with {gitignore_entry}")
40
40
 
41
41
  return deployment_dir
42
+
43
+
44
+ def get_git_sha() -> str:
45
+ """Get the current git SHA for tagging."""
46
+ try:
47
+ result = subprocess.run(
48
+ ["git", "rev-parse", "HEAD"], capture_output=True, text=True, check=True
49
+ )
50
+ return result.stdout.strip()[:8] # Use short SHA
51
+ except (subprocess.CalledProcessError, FileNotFoundError):
52
+ return "latest"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervaizer
3
- Version: 0.10.0
3
+ Version: 0.10.3
4
4
  Summary: Controller system for Supervaize
5
5
  Project-URL: Homepage, https://supervaize.com
6
6
  Project-URL: Repository, https://github.com/supervaize/supervaizer
@@ -14,46 +14,47 @@ Classifier: Intended Audience :: Developers
14
14
  Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
15
15
  Classifier: Programming Language :: Python :: 3
16
16
  Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
17
18
  Requires-Python: >=3.12
18
19
  Requires-Dist: art>=6.5
19
- Requires-Dist: cryptography>=46.0.2
20
+ Requires-Dist: cryptography>=46.0.3
20
21
  Requires-Dist: demjson3>=3.0.6
21
- Requires-Dist: deprecated>=1.2.18
22
- Requires-Dist: fastapi>=0.118.0
22
+ Requires-Dist: deprecated>=1.3.1
23
+ Requires-Dist: fastapi>=0.128.0
23
24
  Requires-Dist: httpx>=0.28.1
24
25
  Requires-Dist: jinja2>=3.1.6
25
26
  Requires-Dist: loguru>=0.7.3
26
- Requires-Dist: orjson>=3.11.3
27
- Requires-Dist: packaging>=24.0
28
- Requires-Dist: pydantic>=2.12.0
27
+ Requires-Dist: orjson>=3.11.5
28
+ Requires-Dist: packaging>=26.0
29
+ Requires-Dist: psutil>=7.2.1
30
+ Requires-Dist: pydantic>=2.12.5
29
31
  Requires-Dist: python-slugify>=8.0.4
30
32
  Requires-Dist: pyyaml>=6.0.3
31
- Requires-Dist: rich>=14.1.0
33
+ Requires-Dist: rich>=14.3.1
32
34
  Requires-Dist: shortuuid>=1.0.13
33
- Requires-Dist: sse-starlette>=3.0.2
35
+ Requires-Dist: sse-starlette>=3.2.0
34
36
  Requires-Dist: tinydb>=4.8.1
35
- Requires-Dist: typer>=0.19.2
36
- Requires-Dist: uvicorn>=0.36.0
37
+ Requires-Dist: typer>=0.21.1
38
+ Requires-Dist: uvicorn>=0.40.0
37
39
  Provides-Extra: deploy
38
- Requires-Dist: boto3>=1.34.0; extra == 'deploy'
40
+ Requires-Dist: boto3>=1.42.30; extra == 'deploy'
39
41
  Requires-Dist: docker>=7.0.0; extra == 'deploy'
40
- Requires-Dist: google-cloud-artifact-registry>=1.8.0; extra == 'deploy'
41
- Requires-Dist: google-cloud-run>=0.10.0; extra == 'deploy'
42
- Requires-Dist: google-cloud-secret-manager>=2.18.0; extra == 'deploy'
43
- Requires-Dist: psutil>=7.1.0; extra == 'deploy'
42
+ Requires-Dist: google-cloud-artifact-registry>=1.19.0; extra == 'deploy'
43
+ Requires-Dist: google-cloud-run>=0.15.0; extra == 'deploy'
44
+ Requires-Dist: google-cloud-secret-manager>=2.26.0; extra == 'deploy'
44
45
  Provides-Extra: dev
45
- Requires-Dist: hatch>=1.14.2; extra == 'dev'
46
- Requires-Dist: jsonschema>=4.25.1; extra == 'dev'
47
- Requires-Dist: mypy>=1.18.2; extra == 'dev'
48
- Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
49
- Requires-Dist: pytest-asyncio>=1.2.0; extra == 'dev'
46
+ Requires-Dist: hatch>=1.16.3; extra == 'dev'
47
+ Requires-Dist: jsonschema>=4.26.0; extra == 'dev'
48
+ Requires-Dist: mypy>=1.19.1; extra == 'dev'
49
+ Requires-Dist: pre-commit>=4.5.1; extra == 'dev'
50
+ Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
50
51
  Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
51
52
  Requires-Dist: pytest-mock>=3.15.1; extra == 'dev'
52
53
  Requires-Dist: pytest-sugar>=1.1.1; extra == 'dev'
53
- Requires-Dist: pytest>=8.4.2; extra == 'dev'
54
+ Requires-Dist: pytest>=8.5.0; extra == 'dev'
54
55
  Requires-Dist: respx>=0.22.0; extra == 'dev'
55
- Requires-Dist: ruff>=0.13.3; extra == 'dev'
56
- Requires-Dist: types-deprecated>=1.2.15.20250304; extra == 'dev'
56
+ Requires-Dist: ruff>=0.14.14; extra == 'dev'
57
+ Requires-Dist: types-deprecated>=1.3.1; extra == 'dev'
57
58
  Requires-Dist: types-python-slugify>=8.0.2.20240310; extra == 'dev'
58
59
  Description-Content-Type: text/markdown
59
60
 
@@ -1,5 +1,5 @@
1
1
  supervaizer/__init__.py,sha256=eBbGjduMBH-FDjcGlSqeR4Kf4uo60Cf1DrRur8VGkJo,2341
2
- supervaizer/__version__.py,sha256=eZQSzWQoSyKp81XNIoQ9MJJef8IKwkUCjUN2pdj0tlc,348
2
+ supervaizer/__version__.py,sha256=opyEmLJVOqn64wDoz2fUdph_cVyLWP_l3F7Ohivnbpk,348
3
3
  supervaizer/account.py,sha256=-K1pd590Lp2TncZ2jn442kBLxnm482G3WnQavVFxZ1s,11102
4
4
  supervaizer/account_service.py,sha256=z4lw8qp8XvCrU6Ndf4VHRnQwY_071410ts5_7E8YDAs,3046
5
5
  supervaizer/agent.py,sha256=Clenvdr_v-lV7_v6YCcevp8dj5JUNvpTWrBZBYM82lg,36509
@@ -39,18 +39,18 @@ supervaizer/admin/templates/server_status_cards.html,sha256=yJ36hkfgQpscYkiaodFD
39
39
  supervaizer/admin/templates/supervaize_instructions.html,sha256=LTLla1xgIeLpFf7bond_lxH5qdQQ2ak52Fd7hqChi1I,10225
40
40
  supervaizer/deploy/__init__.py,sha256=DvngGQu8tS_Yz5FU4kKCvPpod11IGCtZWkUNeB5aVHI,557
41
41
  supervaizer/deploy/cli.py,sha256=pFsQjbALSkKiZ2_OGzNZJzX_vrshGyAzdf1jGShGztk,9841
42
- supervaizer/deploy/docker.py,sha256=RE7DN99tu1llssbmSPnAcYA8xUL-csiInFHnEsa84rc,13601
42
+ supervaizer/deploy/docker.py,sha256=FLMKHOnbnjMFTcULdRdgwKJwT-q8JtVwbN1iSemh21w,13810
43
43
  supervaizer/deploy/driver_factory.py,sha256=Qm6DYVUfV3mlRHUglk5YlslGg6JYZ754uKeoiyxXw10,1487
44
44
  supervaizer/deploy/health.py,sha256=vh4SMOxy43QXi1fanQjWfWqoGTy_z1VXwwfy4Fq2bHg,13764
45
45
  supervaizer/deploy/state.py,sha256=DOpHOoU3IuaI2StE6G0LqzA1HiSDiqz2WDu2xexOYvc,7734
46
- supervaizer/deploy/utils.py,sha256=oNonJX5VD9APz2QXUFyUEvPO5FCnb8I5GwX2dYYJy3Y,1348
46
+ supervaizer/deploy/utils.py,sha256=YkhMz1bniTm0v3G4xpjMDgPr-n4keekz6wVesSRvTnU,1722
47
47
  supervaizer/deploy/commands/__init__.py,sha256=uhdQpJ2Hly2YkkSBXKvGy77eyU0tIhNWD59C1x_6DPQ,365
48
48
  supervaizer/deploy/commands/clean.py,sha256=zm76hmGTSSFAZdcQhVvn71secT4sE5IQqBM0zTDYC_g,9588
49
49
  supervaizer/deploy/commands/down.py,sha256=Vo2Dw71BiTGSMCsjWNoq_oB_oecdV4oDnQ2LwIrv7oo,3929
50
50
  supervaizer/deploy/commands/local.py,sha256=Ds2ECuyPeumA-G0OSoQmN0VM8iZ4CNqacWMSzy0r30k,16229
51
- supervaizer/deploy/commands/plan.py,sha256=-wypTksSNF8CO_-3uOZgcDf6pFwLgFnSTKp_kzTgMZo,5261
51
+ supervaizer/deploy/commands/plan.py,sha256=TjtEFGWlQrgyWvT4B7Ly8097jM--nQnkYCLaO65eNq0,5260
52
52
  supervaizer/deploy/commands/status.py,sha256=sgHg0J8qJIuNYaCTlkMUggJ9Q4Cq1W5N-EvZXG9Iif0,5816
53
- supervaizer/deploy/commands/up.py,sha256=TFOXLtx8NEi08RMF4IJp6bP9Hi3B19NlxDLQPkrSLz8,9292
53
+ supervaizer/deploy/commands/up.py,sha256=5jmNB-n-TqLMVYRgs6KZ2VCt7DKGDwFukwzShtW3o2s,9292
54
54
  supervaizer/deploy/drivers/__init__.py,sha256=NOHsmNYea7ARfuAhbuP4CC87BtMfKKDyC-Uz5sh2PHI,974
55
55
  supervaizer/deploy/drivers/aws_app_runner.py,sha256=rABJOyjUSJUKFCOTWV92SNLaJK4oKpEmaljHcnQO3G0,22170
56
56
  supervaizer/deploy/drivers/base.py,sha256=2MPsw6tgXBILCeHnYXuZtBYFQriwy41Iib8iQPLbDFQ,5267
@@ -69,8 +69,8 @@ supervaizer/protocol/a2a/routes.py,sha256=rkQTNBD1NTYimKCb8iOk4bVf9ldDP1LqHfOsyh
69
69
  supervaizer/utils/__init__.py,sha256=fd0NFwN_cen3QPms2SOnuz4jcetay3f_31dit2As7EA,458
70
70
  supervaizer/utils/version_check.py,sha256=-tsOURpHVh0LNTbpQsyJDJENKszC-NzXDSO_EToEQPE,1893
71
71
  supervaizer/py.typed,sha256=bHhvLx7c6MqrzXVPbdK3qAOcSxzp4wDtTx4QifMC2EY,74
72
- supervaizer-0.10.0.dist-info/METADATA,sha256=slosrmHrXHWs2xkeBHQGwcCpmsqaberhJL5RkW319eQ,12624
73
- supervaizer-0.10.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
74
- supervaizer-0.10.0.dist-info/entry_points.txt,sha256=vL_IBR_AeEI2u2-6YL4PY9k2Mar4-gprG8-UxERWjmg,52
75
- supervaizer-0.10.0.dist-info/licenses/LICENSE.md,sha256=dmdnt1vfpxNPr8Lt0BnxKE5uzUwK3CWTthTUStgOXjY,15327
76
- supervaizer-0.10.0.dist-info/RECORD,,
72
+ supervaizer-0.10.3.dist-info/METADATA,sha256=TTjIjX8FamivrCcl9rQoLGDkoXxWUcFy9huVDgBN-5w,12648
73
+ supervaizer-0.10.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
74
+ supervaizer-0.10.3.dist-info/entry_points.txt,sha256=vL_IBR_AeEI2u2-6YL4PY9k2Mar4-gprG8-UxERWjmg,52
75
+ supervaizer-0.10.3.dist-info/licenses/LICENSE.md,sha256=dmdnt1vfpxNPr8Lt0BnxKE5uzUwK3CWTthTUStgOXjY,15327
76
+ supervaizer-0.10.3.dist-info/RECORD,,