Skip to content

Commit 6f8bba3

Browse files
wenausclaude
andcommitted
Add ensure_namespace API utility function
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 5908529 commit 6f8bba3

1 file changed

Lines changed: 45 additions & 1 deletion

File tree

src/swf_common_lib/api_utils.py

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,48 @@ def get_next_run_number(monitor_url, api_session, logger=None):
7777

7878
except Exception as e:
7979
logger.error(f"Failed to get next run number from API: {e}")
80-
raise RuntimeError(f"Critical failure getting run number: {e}") from e
80+
raise RuntimeError(f"Critical failure getting run number: {e}") from e
81+
82+
83+
def ensure_namespace(monitor_url, api_session, name, owner=None, logger=None):
84+
"""
85+
Ensure a namespace exists in the database, creating it if not.
86+
87+
Args:
88+
monitor_url (str): Base URL of the swf-monitor service
89+
api_session (requests.Session): Configured session with auth headers
90+
name (str): Namespace name
91+
owner (str, optional): Owner username, defaults to current user
92+
logger (logging.Logger, optional): Logger for output
93+
94+
Returns:
95+
dict: Namespace info with keys: name, owner, description, created (bool)
96+
97+
Raises:
98+
RuntimeError: If API call fails or returns error
99+
"""
100+
import os
101+
102+
if logger is None:
103+
logger = logging.getLogger(__name__)
104+
105+
if owner is None:
106+
owner = os.getenv('USER', 'unknown')
107+
108+
try:
109+
url = f"{monitor_url}/api/namespaces/ensure/"
110+
payload = {'name': name, 'owner': owner}
111+
response = api_session.post(url, json=payload, timeout=10)
112+
response.raise_for_status()
113+
114+
data = response.json()
115+
if data.get('status') == 'success':
116+
if data.get('created'):
117+
logger.info(f"Created namespace '{name}' with owner '{owner}'")
118+
return data
119+
else:
120+
raise RuntimeError(f"API returned error: {data.get('error', 'Unknown error')}")
121+
122+
except Exception as e:
123+
logger.warning(f"Failed to ensure namespace '{name}': {e}")
124+
raise

0 commit comments

Comments
 (0)