sovaria-cli 0.2.0__tar.gz → 0.2.1__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.
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/PKG-INFO +1 -1
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/__init__.py +1 -1
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/config.py +16 -8
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/tests/test_config_profiles.py +11 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/tests/test_main_startup.py +1 -1
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/pyproject.toml +1 -1
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/.github/workflows/ci.yml +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/.github/workflows/publish.yml +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/.gitignore +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/.python-version +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/Makefile +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/README.md +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/__init__.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/__init__.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/admin.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/api.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/audit.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/auth_product.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/billing.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/chrono.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/context.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/data.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/db.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/deploy.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/governance.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/iam.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/init_cmd.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/keys.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/login.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/org.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/policy.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/project.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/realtime.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/scope.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/shell.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/sim.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/storage.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/commands/vector.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/main.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/__init__.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/api_client.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/auth_store.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/display.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/migrations.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/src/utils/project_context.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/tests/test_auth_store_profiles.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/tests/test_cli_security.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/tests/test_cli_smoke_paths.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/apps/cli/tests/test_project_and_commands.py +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/pytest.ini +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/requirements-dev.txt +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/requirements.txt +0 -0
- {sovaria_cli-0.2.0 → sovaria_cli-0.2.1}/scripts/cli_sdk_happy_path.sh +0 -0
|
@@ -30,6 +30,8 @@ from typing import Any, cast
|
|
|
30
30
|
import yaml # PyYAML
|
|
31
31
|
|
|
32
32
|
_CONFIG_FILE = Path.home() / ".sovaria" / "config.yaml"
|
|
33
|
+
DEFAULT_CLOUD_API_URL = "https://api.sovaria.in"
|
|
34
|
+
_DEFAULT_LOCAL_API_URL = "http://localhost:8000"
|
|
33
35
|
_DEFAULT_API_URL = os.getenv("SOVARIA_CLI_DEFAULT_API_URL", "").strip()
|
|
34
36
|
_DEFAULT_STAGING_API_URL = os.getenv("SOVARIA_CLI_STAGING_API_URL", "").strip()
|
|
35
37
|
_DEFAULT_PROD_API_URL = os.getenv("SOVARIA_CLI_PROD_API_URL", "").strip()
|
|
@@ -66,6 +68,14 @@ def _expand_env(val: str) -> str:
|
|
|
66
68
|
return re.sub(r"\$\{([^}]+)\}", _replace, val)
|
|
67
69
|
|
|
68
70
|
|
|
71
|
+
def _profile_env_default(profile: str) -> str:
|
|
72
|
+
if profile == "prod":
|
|
73
|
+
return _DEFAULT_PROD_API_URL or DEFAULT_CLOUD_API_URL
|
|
74
|
+
if profile == "staging":
|
|
75
|
+
return _DEFAULT_STAGING_API_URL or DEFAULT_CLOUD_API_URL
|
|
76
|
+
return _DEFAULT_API_URL or DEFAULT_CLOUD_API_URL
|
|
77
|
+
|
|
78
|
+
|
|
69
79
|
def get_api_url(profile: str | None = None) -> str:
|
|
70
80
|
cfg = _load_yaml()
|
|
71
81
|
prof = profile or get_active_profile()
|
|
@@ -77,11 +87,9 @@ def get_api_url(profile: str | None = None) -> str:
|
|
|
77
87
|
if should_save and _CONFIG_FILE.exists():
|
|
78
88
|
_save_yaml(cfg)
|
|
79
89
|
raw = cast(str, entry.get("api_url", "")).strip()
|
|
80
|
-
api_url = _expand_env(raw) if raw else
|
|
90
|
+
api_url = _expand_env(raw) if raw else _profile_env_default(prof)
|
|
81
91
|
if api_url:
|
|
82
|
-
return api_url
|
|
83
|
-
if _DEFAULT_API_URL:
|
|
84
|
-
return _DEFAULT_API_URL
|
|
92
|
+
return api_url.rstrip("/")
|
|
85
93
|
raise ValueError(
|
|
86
94
|
"API URL is not configured. Set it in ~/.sovaria/config.yaml or "
|
|
87
95
|
"SOVARIA_CLI_DEFAULT_API_URL."
|
|
@@ -166,18 +174,18 @@ def write_default_config() -> None:
|
|
|
166
174
|
_CONFIG_FILE.parent.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
167
175
|
default = {
|
|
168
176
|
"version": _SCHEMA_VERSION,
|
|
169
|
-
"default_profile": "
|
|
177
|
+
"default_profile": "prod",
|
|
170
178
|
"profiles": {
|
|
171
179
|
"dev": {
|
|
172
|
-
"api_url": _DEFAULT_API_URL,
|
|
180
|
+
"api_url": _DEFAULT_API_URL or _DEFAULT_LOCAL_API_URL,
|
|
173
181
|
"scope": {"org_id": "", "project_id": "", "env_id": ""},
|
|
174
182
|
},
|
|
175
183
|
"staging": {
|
|
176
|
-
"api_url": _DEFAULT_STAGING_API_URL,
|
|
184
|
+
"api_url": _DEFAULT_STAGING_API_URL or DEFAULT_CLOUD_API_URL,
|
|
177
185
|
"scope": {"org_id": "", "project_id": "", "env_id": ""},
|
|
178
186
|
},
|
|
179
187
|
"prod": {
|
|
180
|
-
"api_url": _DEFAULT_PROD_API_URL,
|
|
188
|
+
"api_url": _DEFAULT_PROD_API_URL or DEFAULT_CLOUD_API_URL,
|
|
181
189
|
"scope": {"org_id": "", "project_id": "", "env_id": ""},
|
|
182
190
|
},
|
|
183
191
|
},
|
|
@@ -34,6 +34,17 @@ def test_get_api_url_upgrades_unversioned_string_profile(
|
|
|
34
34
|
assert parsed["profiles"]["dev"] == {"api_url": "http://localhost:8000"}
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
def test_get_api_url_defaults_to_cloud_when_unconfigured(
|
|
38
|
+
monkeypatch: pytest.MonkeyPatch, tmp_path: Path,
|
|
39
|
+
) -> None:
|
|
40
|
+
config_file = tmp_path / ".sovaria" / "config.yaml"
|
|
41
|
+
monkeypatch.setattr(config, "_CONFIG_FILE", config_file)
|
|
42
|
+
monkeypatch.delenv("SOVARIA_CLI_DEFAULT_API_URL", raising=False)
|
|
43
|
+
monkeypatch.delenv("SOVARIA_CLI_PROD_API_URL", raising=False)
|
|
44
|
+
|
|
45
|
+
assert config.get_api_url("prod") == config.DEFAULT_CLOUD_API_URL
|
|
46
|
+
|
|
47
|
+
|
|
37
48
|
def test_get_scope_coerces_string_profile(
|
|
38
49
|
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
|
39
50
|
) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|