cyclo-manager 0.2.0.dev12__tar.gz → 0.2.0.dev13__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 (20) hide show
  1. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/PKG-INFO +1 -1
  2. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_host_agent/models.py +8 -0
  3. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_host_agent/routers/repos.py +12 -0
  4. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_host_agent/routers/update.py +4 -0
  5. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager.egg-info/PKG-INFO +1 -1
  6. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager_cli/cli.py +3 -1
  7. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/pyproject.toml +1 -1
  8. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/README.md +0 -0
  9. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_host_agent/__init__.py +0 -0
  10. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_host_agent/main.py +0 -0
  11. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_host_agent/routers/__init__.py +0 -0
  12. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager.egg-info/SOURCES.txt +0 -0
  13. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager.egg-info/dependency_links.txt +0 -0
  14. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager.egg-info/entry_points.txt +0 -0
  15. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager.egg-info/requires.txt +0 -0
  16. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager.egg-info/top_level.txt +0 -0
  17. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager_cli/__init__.py +0 -0
  18. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager_cli/config/config.yml +0 -0
  19. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/cyclo_manager_cli/docker/docker-compose.yml +0 -0
  20. {cyclo_manager-0.2.0.dev12 → cyclo_manager-0.2.0.dev13}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cyclo-manager
3
- Version: 0.2.0.dev12
3
+ Version: 0.2.0.dev13
4
4
  Summary: cyclo_manager CLI: pip-installable launcher for cyclo_manager server and UI containers. Run 'cyclo_manager up' to start Docker stack.
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -71,6 +71,14 @@ class RepoStatusResponse(BaseModel):
71
71
  has_changes: bool
72
72
 
73
73
 
74
+ class RepoBranchCheckResponse(BaseModel):
75
+ """Response for GET /repos/{name}/branch."""
76
+
77
+ name: str
78
+ branch: Optional[str] = None
79
+ allowed: bool
80
+
81
+
74
82
  class UpdateRequest(BaseModel):
75
83
  """Request body for POST /repos/{name}/update."""
76
84
 
@@ -29,6 +29,7 @@ from fastapi import APIRouter, HTTPException, status
29
29
  from cyclo_host_agent.models import (
30
30
  ContainerScriptResponse,
31
31
  FileChange,
32
+ RepoBranchCheckResponse,
32
33
  RepoInfo,
33
34
  RepoListResponse,
34
35
  RepoStatusResponse,
@@ -356,6 +357,17 @@ async def list_repos() -> RepoListResponse:
356
357
  return RepoListResponse(repos=repos, workspace_path=str(WORKSPACE_PATH))
357
358
 
358
359
 
360
+ @router.get('/{name}/branch', response_model=RepoBranchCheckResponse)
361
+ async def get_repo_branch(name: str) -> RepoBranchCheckResponse:
362
+ repo_path = _get_repo(name)
363
+ branch = await _current_branch(repo_path)
364
+ return RepoBranchCheckResponse(
365
+ name=name,
366
+ branch=branch,
367
+ allowed=branch in ALLOWED_UPDATE_BRANCHES,
368
+ )
369
+
370
+
359
371
  @router.get('/{name}/status', response_model=RepoStatusResponse)
360
372
  async def get_repo_status(name: str) -> RepoStatusResponse:
361
373
  repo_path = _get_repo(name)
@@ -62,6 +62,10 @@ async def start_update() -> dict:
62
62
  raise HTTPException(status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
63
63
  detail='cyclo_manager command not found')
64
64
 
65
+ if _update_status.get('phase') == 'updating':
66
+ raise HTTPException(status_code=status.HTTP_409_CONFLICT,
67
+ detail='Update already in progress')
68
+
65
69
  _update_status = {'phase': 'updating', 'output': '', 'error': ''}
66
70
  asyncio.create_task(_run_update(cyclo_exe))
67
71
  return {'status': 'update started'}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cyclo-manager
3
- Version: 0.2.0.dev12
3
+ Version: 0.2.0.dev13
4
4
  Summary: cyclo_manager CLI: pip-installable launcher for cyclo_manager server and UI containers. Run 'cyclo_manager up' to start Docker stack.
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -370,7 +370,9 @@ def cmd_update(args: argparse.Namespace) -> int:
370
370
  return e.returncode
371
371
 
372
372
  print('Refreshing host agent (unit, socket, sudoers)...')
373
- _ensure_host_agent()
373
+ if _ensure_host_agent() != 0:
374
+ print('Warning: Failed to refresh host agent service.', file=sys.stderr)
375
+ return 1
374
376
 
375
377
  print('cyclo_manager update completed.')
376
378
  return 0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cyclo-manager"
7
- version = "0.2.0.dev12"
7
+ version = "0.2.0.dev13"
8
8
  description = "cyclo_manager CLI: pip-installable launcher for cyclo_manager server and UI containers. Run 'cyclo_manager up' to start Docker stack."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"