sovaria-cli 0.2.3__tar.gz → 0.2.4__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 (55) hide show
  1. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/PKG-INFO +1 -1
  2. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/__init__.py +1 -1
  3. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/db.py +63 -6
  4. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_main_startup.py +1 -1
  5. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_project_and_commands.py +17 -0
  6. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/pyproject.toml +1 -1
  7. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/.github/workflows/ci.yml +0 -0
  8. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/.github/workflows/publish.yml +0 -0
  9. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/.gitignore +0 -0
  10. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/.python-version +0 -0
  11. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/Makefile +0 -0
  12. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/README.md +0 -0
  13. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/__init__.py +0 -0
  14. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/__init__.py +0 -0
  15. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/admin.py +0 -0
  16. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/api.py +0 -0
  17. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/audit.py +0 -0
  18. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/auth_product.py +0 -0
  19. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/billing.py +0 -0
  20. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/chrono.py +0 -0
  21. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/context.py +0 -0
  22. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/data.py +0 -0
  23. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/deploy.py +0 -0
  24. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/governance.py +0 -0
  25. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/iam.py +0 -0
  26. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/init_cmd.py +0 -0
  27. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/keys.py +0 -0
  28. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/login.py +0 -0
  29. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/org.py +0 -0
  30. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/policy.py +0 -0
  31. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/project.py +0 -0
  32. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/realtime.py +0 -0
  33. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/scope.py +0 -0
  34. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/shell.py +0 -0
  35. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/sim.py +0 -0
  36. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/storage.py +0 -0
  37. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/commands/vector.py +0 -0
  38. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/main.py +0 -0
  39. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/__init__.py +0 -0
  40. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/api_client.py +0 -0
  41. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/auth_store.py +0 -0
  42. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/config.py +0 -0
  43. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/display.py +0 -0
  44. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/migrations.py +0 -0
  45. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/project_context.py +0 -0
  46. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/src/utils/scope_picker.py +0 -0
  47. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_auth_store_profiles.py +0 -0
  48. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_cli_security.py +0 -0
  49. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_cli_smoke_paths.py +0 -0
  50. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_config_profiles.py +0 -0
  51. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/apps/cli/tests/test_scope_picker.py +0 -0
  52. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/pytest.ini +0 -0
  53. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/requirements-dev.txt +0 -0
  54. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/requirements.txt +0 -0
  55. {sovaria_cli-0.2.3 → sovaria_cli-0.2.4}/scripts/cli_sdk_happy_path.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sovaria-cli
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Sovaria BaaS command-line interface (sov)
5
5
  Project-URL: Homepage, https://sovaria.in
6
6
  Project-URL: Documentation, https://docs.sovaria.in/cli
@@ -1,3 +1,3 @@
1
1
  """Sovaria CLI — sov command."""
2
2
 
3
- __version__ = "0.2.3"
3
+ __version__ = "0.2.4"
@@ -18,6 +18,48 @@ from apps.cli.src.utils.display import print_json, print_sql_result
18
18
 
19
19
  app = typer.Typer(help="Database (SQL) management")
20
20
 
21
+ _INTERNAL_SQL_TABLES = ("sov_documents",)
22
+ _LIST_TABLES_SQL = (
23
+ "SELECT table_name FROM information_schema.tables "
24
+ "WHERE table_schema = current_schema() "
25
+ "AND table_type = 'BASE TABLE' "
26
+ f"AND table_name NOT IN ({', '.join(repr(name) for name in _INTERNAL_SQL_TABLES)}) "
27
+ "ORDER BY table_name;"
28
+ )
29
+
30
+
31
+ def _fetch_live_tables(
32
+ *,
33
+ profile: str | None,
34
+ org_id: str | None,
35
+ project_id: str | None,
36
+ env_id: str | None,
37
+ ) -> list[str]:
38
+ result = call_api(
39
+ method="POST",
40
+ path="/api/v1/sql/query",
41
+ profile=profile,
42
+ body={"sql": _LIST_TABLES_SQL, "txid": 0},
43
+ org_id=org_id,
44
+ project_id=project_id,
45
+ env_id=env_id,
46
+ require_scope=True,
47
+ )
48
+ rows = result.get("rows") if isinstance(result, dict) else None
49
+ if not isinstance(rows, list):
50
+ return []
51
+ tables: list[str] = []
52
+ for row in rows:
53
+ if isinstance(row, list) and row:
54
+ name = str(row[0]).strip()
55
+ elif isinstance(row, dict):
56
+ name = str(row.get("table_name") or row.get("TABLE_NAME") or "").strip()
57
+ else:
58
+ continue
59
+ if name and name not in _INTERNAL_SQL_TABLES:
60
+ tables.append(name)
61
+ return tables
62
+
21
63
 
22
64
  @app.command("tables")
23
65
  def list_tables(
@@ -25,22 +67,37 @@ def list_tables(
25
67
  project_id: str | None = typer.Option(None, "--project", help="Project ID"),
26
68
  env_id: str | None = typer.Option(None, "--env"),
27
69
  profile: str | None = typer.Option(None, "--profile"),
70
+ migrations: bool = typer.Option(
71
+ False,
72
+ "--migrations",
73
+ help="Show migration log only (legacy behaviour)",
74
+ ),
28
75
  ) -> None:
29
- """List relational tables / migration log for the linked project."""
76
+ """List live relational tables in the linked project database."""
30
77
  try:
31
- result = call_api(
32
- method="GET",
33
- path="/api/v1/data/rel/migrations",
78
+ if migrations:
79
+ result = call_api(
80
+ method="GET",
81
+ path="/api/v1/data/rel/migrations",
82
+ profile=profile,
83
+ org_id=org_id,
84
+ project_id=project_id,
85
+ env_id=env_id,
86
+ require_scope=True,
87
+ )
88
+ print_json(result)
89
+ return
90
+
91
+ tables = _fetch_live_tables(
34
92
  profile=profile,
35
93
  org_id=org_id,
36
94
  project_id=project_id,
37
95
  env_id=env_id,
38
- require_scope=True,
39
96
  )
97
+ print_json({"tables": tables, "total": len(tables), "source": "information_schema"})
40
98
  except CLIRequestError as exc:
41
99
  typer.echo(str(exc), err=True)
42
100
  raise typer.Exit(1) from exc
43
- print_json(result)
44
101
 
45
102
 
46
103
  @app.command("sql")
@@ -26,4 +26,4 @@ def test_sov_console_script_help() -> None:
26
26
  )
27
27
 
28
28
  assert result.returncode == 0
29
- assert "sov version 0.2.3" in result.stdout
29
+ assert "sov version 0.2.4" in result.stdout
@@ -56,6 +56,23 @@ def test_resolve_scope_requires_linked_project(monkeypatch: pytest.MonkeyPatch)
56
56
  )
57
57
 
58
58
 
59
+ def test_db_tables_uses_information_schema(monkeypatch: pytest.MonkeyPatch) -> None:
60
+ from apps.cli.src.commands import db
61
+
62
+ captured: dict[str, Any] = {}
63
+
64
+ def _fake_call_api(**kwargs: Any) -> dict[str, Any]:
65
+ captured.update(kwargs)
66
+ return {"rows": [["users"], ["orders"]]}
67
+
68
+ monkeypatch.setattr(db, "call_api", _fake_call_api)
69
+ db.list_tables(profile=None, org_id=None, project_id=None, env_id=None, migrations=False)
70
+
71
+ assert captured["method"] == "POST"
72
+ assert captured["path"] == "/api/v1/sql/query"
73
+ assert "information_schema.tables" in captured["body"]["sql"]
74
+
75
+
59
76
  def test_sim_discover_path_smoke(monkeypatch: pytest.MonkeyPatch) -> None:
60
77
  from apps.cli.src.commands import sim
61
78
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sovaria-cli"
7
- version = "0.2.3"
7
+ version = "0.2.4"
8
8
  description = "Sovaria BaaS command-line interface (sov)"
9
9
  readme = "apps/cli/README.md"
10
10
  requires-python = ">=3.11"
File without changes
File without changes
File without changes
File without changes