splight-cli 4.11.2__tar.gz → 4.12.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.
Files changed (81) hide show
  1. {splight_cli-4.11.2 → splight_cli-4.12.1}/PKG-INFO +2 -2
  2. {splight_cli-4.11.2 → splight_cli-4.12.1}/pyproject.toml +7 -2
  3. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/asset/__init__.py +1 -4
  4. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/manager/__init__.py +9 -0
  5. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/hub/__init__.py +2 -0
  6. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/hub/component/__init__.py +1 -1
  7. splight_cli-4.12.1/splight_cli/hub/solution/__init__.py +66 -0
  8. splight_cli-4.12.1/splight_cli/hub/solution/constants.py +3 -0
  9. splight_cli-4.12.1/splight_cli/hub/solution/exceptions.py +22 -0
  10. splight_cli-4.12.1/splight_cli/hub/solution/solution_manager.py +88 -0
  11. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/diff.py +2 -2
  12. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/base.py +1 -1
  13. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/input.py +1 -1
  14. {splight_cli-4.11.2 → splight_cli-4.12.1}/README.md +0 -0
  15. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/__init__.py +0 -0
  16. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/cli.py +0 -0
  17. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/__init__.py +0 -0
  18. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/component.py +0 -0
  19. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/exceptions.py +0 -0
  20. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/loaders.py +0 -0
  21. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/.splightignore +0 -0
  22. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/Initialization +0 -0
  23. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/README.md +0 -0
  24. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/auto_readme.md +0 -0
  25. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/main.py +0 -0
  26. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/spec.json +0 -0
  27. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/templates/tests.py +0 -0
  28. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/tests/__init__.py +0 -0
  29. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/tests/test_component_manager.py +0 -0
  30. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/component/utils.py +0 -0
  31. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/config/__init__.py +0 -0
  32. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/constants.py +0 -0
  33. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/context/__init__.py +0 -0
  34. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/context/context.py +0 -0
  35. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/context/workspace.py +0 -0
  36. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/__init__.py +0 -0
  37. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/alert/__init__.py +0 -0
  38. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/attribute/__init__.py +0 -0
  39. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/component/__init__.py +0 -0
  40. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/datalake/__init__.py +0 -0
  41. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/file/__init__.py +0 -0
  42. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/manager/exceptions.py +0 -0
  43. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/manager/manager.py +0 -0
  44. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/manager/tests/test_datalake_manager.py +0 -0
  45. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/manager/tests/test_resource_manager.py +0 -0
  46. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/engine/secret/__init__.py +0 -0
  47. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/hub/component/exceptions.py +0 -0
  48. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/hub/component/hub_manager.py +0 -0
  49. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/hub/component/tests/test_hub_manager.py +0 -0
  50. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/settings.py +0 -0
  51. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/__init__.py +0 -0
  52. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/dict.py +0 -0
  53. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/parser.py +0 -0
  54. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/__init__.py +0 -0
  55. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/logger.py +0 -0
  56. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/manager.py +0 -0
  57. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/__init__.py +0 -0
  58. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/alert.py +0 -0
  59. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/asset.py +0 -0
  60. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/attribute.py +0 -0
  61. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/component.py +0 -0
  62. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/component_object.py +0 -0
  63. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/file.py +0 -0
  64. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/function.py +0 -0
  65. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/metadata.py +0 -0
  66. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/routine.py +0 -0
  67. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/resource/models/secret.py +0 -0
  68. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/solution/state.py +0 -0
  69. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/tests/test_component/Initialization +0 -0
  70. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/tests/test_component/README.md +0 -0
  71. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/tests/test_component/main.py +0 -0
  72. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/tests/test_component/spec.json +0 -0
  73. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/tests/test_component/tests.py +0 -0
  74. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/__init__.py +0 -0
  75. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/json.py +0 -0
  76. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/loader.py +0 -0
  77. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/pprint.py +0 -0
  78. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/template.py +0 -0
  79. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/utils/yaml.py +0 -0
  80. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/version.py +0 -0
  81. {splight_cli-4.11.2 → splight_cli-4.12.1}/splight_cli/workspace/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: splight-cli
3
- Version: 4.11.2
3
+ Version: 4.12.1
4
4
  Summary: Splight Command Line Interface
5
5
  Author: Splight Dev
6
6
  Author-email: dev@splight-ae.com
@@ -21,7 +21,7 @@ Requires-Dist: py7zr (==0.20.8)
21
21
  Requires-Dist: requests (==2.31.0)
22
22
  Requires-Dist: rich (==13.0.1)
23
23
  Requires-Dist: setuptools (==60.9.3)
24
- Requires-Dist: splight-lib (>=5,<6)
24
+ Requires-Dist: splight-lib (>=5.6.3,<6.0.0)
25
25
  Requires-Dist: toposort (>=1.10,<2.0)
26
26
  Requires-Dist: typer (==0.9.0)
27
27
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "splight-cli"
3
- version = "4.11.2"
3
+ version = "4.12.1"
4
4
  description = "Splight Command Line Interface"
5
5
  authors = ["Splight Dev <dev@splight-ae.com>"]
6
6
  readme = "README.md"
@@ -11,7 +11,7 @@ case-converter = "1.1.0"
11
11
  click = "8.0.4"
12
12
  click-default-group = "1.2.2"
13
13
  setuptools = "60.9.3"
14
- splight-lib = "^5"
14
+ splight-lib = "^5.6.3"
15
15
  py7zr = "0.20.8"
16
16
  typer = "0.9.0"
17
17
  colorama = "0.4.4"
@@ -32,6 +32,7 @@ pre-commit = "3.2.2"
32
32
  pytest = "^7.4.3"
33
33
  coverage = "^7.3.2"
34
34
  mock = "^5.1.0"
35
+ ruff = "^0.3.5"
35
36
 
36
37
  [tool.poetry.scripts]
37
38
  splight = "splight_cli.cli:app"
@@ -48,6 +49,10 @@ force-exclude = ".*/component/templates/.*py"
48
49
  profile = "black"
49
50
  line_length = 79
50
51
 
52
+ [tool.ruff]
53
+ line-length = 79
54
+ exclude = ["*/component/templates/*"]
55
+
51
56
  [tool.pytest.ini_options]
52
57
  filterwarnings = [
53
58
  "error",
@@ -6,10 +6,7 @@ from rich.console import Console
6
6
  from splight_lib.models import Asset
7
7
 
8
8
  from splight_cli.constants import error_style
9
- from splight_cli.engine.manager import (
10
- ResourceManager,
11
- ResourceManagerException,
12
- )
9
+ from splight_cli.engine.manager import ResourceManager
13
10
 
14
11
  asset_app = typer.Typer(
15
12
  name="Splight Engine Asset",
@@ -6,3 +6,12 @@ from splight_cli.engine.manager.manager import (
6
6
  ResourceManager,
7
7
  ResourceManagerException,
8
8
  )
9
+
10
+ __all__ = [
11
+ ComponentUpgradeManager,
12
+ ComponentUpgradeManagerException,
13
+ DatalakeManager,
14
+ DatalakeManagerException,
15
+ ResourceManager,
16
+ ResourceManagerException,
17
+ ]
@@ -2,6 +2,7 @@ import typer
2
2
 
3
3
  from splight_cli.context import check_credentials
4
4
  from splight_cli.hub.component import component_app
5
+ from splight_cli.hub.solution import solution_app
5
6
 
6
7
  hub_app = typer.Typer(
7
8
  name="Splight Hub",
@@ -11,6 +12,7 @@ hub_app = typer.Typer(
11
12
  )
12
13
 
13
14
  hub_app.add_typer(component_app, name="component")
15
+ hub_app.add_typer(solution_app, name="solution")
14
16
 
15
17
 
16
18
  @hub_app.callback(invoke_without_command=True)
@@ -6,7 +6,7 @@ from splight_cli.constants import error_style
6
6
  from splight_cli.hub.component.hub_manager import HubComponentManager
7
7
 
8
8
  component_app = typer.Typer(
9
- name="Splight Engine Component",
9
+ name="Splight Hub Component",
10
10
  add_completion=True,
11
11
  rich_markup_mode="rich",
12
12
  no_args_is_help=True,
@@ -0,0 +1,66 @@
1
+ from typing import List
2
+
3
+ import typer
4
+ from rich.console import Console
5
+ from splight_lib.models import Component
6
+
7
+ from splight_cli.constants import error_style
8
+ from splight_cli.hub.solution.solution_manager import HubSolutionManager
9
+
10
+ solution_app = typer.Typer(
11
+ name="Splight Hub Solution",
12
+ add_completion=True,
13
+ rich_markup_mode="rich",
14
+ no_args_is_help=True,
15
+ )
16
+
17
+ console = Console()
18
+ MODEL = Component
19
+
20
+
21
+ @solution_app.command()
22
+ def push(
23
+ ctx: typer.Context,
24
+ name: str = typer.Option(..., help="The solution's name"),
25
+ version: str = typer.Option(..., help="The solution's version"),
26
+ description: str = typer.Option("", help="The solution's description"),
27
+ tags: List[str] = typer.Option([], help="The solution's tags"),
28
+ path: str = typer.Option(".", help="Path to solution files"),
29
+ force: bool = typer.Option(
30
+ False,
31
+ "--force",
32
+ "-f",
33
+ help="Overwrite existing solution in Splight HUB",
34
+ ),
35
+ ):
36
+ try:
37
+ manager = HubSolutionManager()
38
+ manager.push(name, version, description, tags, path, force=force)
39
+ except Exception as exc:
40
+ console.print(f"Error pushing component: {exc}", style=error_style)
41
+ raise typer.Exit(code=1)
42
+
43
+
44
+ # TODO: Define the pull command
45
+ # @solution_app.command()
46
+ # def pull(
47
+ # ctx: typer.Context,
48
+ # name: str = typer.Argument(..., help="The component's name"),
49
+ # version: str = typer.Argument(..., help="The component's version"),
50
+ # ):
51
+ # try:
52
+ # manager = HubComponentManager()
53
+ # manager.pull(name=name, version=version)
54
+ # except Exception as exc:
55
+ # console.print(f"Error pulling component: {exc}", style=error_style)
56
+ # raise typer.Exit(code=1)
57
+
58
+
59
+ @solution_app.command()
60
+ def list(ctx: typer.Context):
61
+ try:
62
+ manager = HubSolutionManager()
63
+ manager.list_solutions()
64
+ except Exception as exc:
65
+ console.print(f"Error listing components: {exc}", style=error_style)
66
+ raise typer.Exit(code=1)
@@ -0,0 +1,3 @@
1
+ MAIN_FILE = "main.tf"
2
+ VARIABLES_FILE = "variables.tf"
3
+ VALUES_FILE = "variables.tfvars"
@@ -0,0 +1,22 @@
1
+ class HubSolutionAlreadyExists(Exception):
2
+ def __init__(self, name: str, version: str):
3
+ self._msg = f"Solution {name}-{version} already exists in Splight Hub"
4
+
5
+ def __str__(self) -> str:
6
+ return self._msg
7
+
8
+
9
+ class HubSolutionNotFound(Exception):
10
+ def __init__(self, name: str, version: str):
11
+ self._msg = f"Solution {name}-{version} not found in Splight Hub"
12
+
13
+ def __str__(self) -> str:
14
+ return self._msg
15
+
16
+
17
+ class MissingSolutionFile(Exception):
18
+ def __init__(self, name: str, path: str):
19
+ self._msg = f"Missing solution file {name} in path {path}"
20
+
21
+ def __str__(self) -> str:
22
+ return self._msg
@@ -0,0 +1,88 @@
1
+ import os
2
+ from collections import namedtuple
3
+ from typing import List
4
+
5
+ from rich.console import Console
6
+ from rich.table import Table
7
+ from splight_lib.models import HubSolution
8
+
9
+ from splight_cli.hub.solution.constants import (
10
+ MAIN_FILE,
11
+ VALUES_FILE,
12
+ VARIABLES_FILE,
13
+ )
14
+ from splight_cli.hub.solution.exceptions import (
15
+ HubSolutionAlreadyExists,
16
+ HubSolutionNotFound,
17
+ MissingSolutionFile,
18
+ )
19
+ from splight_cli.utils.loader import Loader
20
+
21
+ console = Console()
22
+
23
+
24
+ class HubSolutionManager:
25
+ def list_solutions(self):
26
+ solution_tuple = namedtuple("Solution", ["name", "version"])
27
+ all_solutions = HubSolution.list()
28
+ solutions = set(
29
+ [
30
+ solution_tuple(solution.name, solution.version)
31
+ for solution in all_solutions
32
+ ]
33
+ )
34
+ table = Table("Name", "Version", title="Hub Solution List")
35
+ [table.add_row(sol.name, sol.version) for sol in solutions]
36
+ console.print(table)
37
+
38
+ def push(
39
+ self,
40
+ name: str,
41
+ version: str,
42
+ description: str,
43
+ tags: List[str] = [],
44
+ path: str = ".",
45
+ force: bool = False,
46
+ ):
47
+ try:
48
+ solution = self._get_component(name, version)
49
+ except HubSolutionNotFound:
50
+ exist_in_hub = False
51
+ solution = HubSolution(
52
+ name=name, version=version, description=description, tags=tags
53
+ )
54
+ else:
55
+ exist_in_hub = True
56
+
57
+ if not force and exist_in_hub:
58
+ raise HubSolutionAlreadyExists(name, version)
59
+
60
+ self._set_files_from_path(solution, path)
61
+
62
+ with Loader("Pushing Solution to Splight Hub"):
63
+ solution.save()
64
+
65
+ def _set_files_from_path(self, solution: HubSolution, path: str):
66
+ main_file_path = os.path.join(path, MAIN_FILE)
67
+ if os.path.exists(main_file_path):
68
+ solution.main_file = main_file_path
69
+ else:
70
+ raise MissingSolutionFile(MAIN_FILE, path)
71
+
72
+ variables_file_path = os.path.join(path, VARIABLES_FILE)
73
+ if os.path.exists(main_file_path):
74
+ solution.variables_file = variables_file_path
75
+ else:
76
+ raise MissingSolutionFile(VARIABLES_FILE, path)
77
+
78
+ values_file_path = os.path.join(path, VALUES_FILE)
79
+ if os.path.exists(main_file_path):
80
+ solution.values_file = values_file_path
81
+ else:
82
+ raise MissingSolutionFile(VALUES_FILE, path)
83
+
84
+ def _get_component(self, name: str, version: str) -> HubSolution:
85
+ solutions = HubSolution.list(name=name, version=version)
86
+ if not solutions:
87
+ raise HubSolutionNotFound(name, version)
88
+ return solutions[0]
@@ -19,7 +19,7 @@ def Diff(new_arguments: Dict, old_arguments: Dict) -> Dict:
19
19
  for path, new_value in walk_dict(new_arguments):
20
20
  try:
21
21
  get_dict_value(path, old_arguments)
22
- except:
22
+ except Exception:
23
23
  line = f"\t{Fore.GREEN}+{Style.RESET_ALL} {'.'.join([str(key) for key in path])}: {new_value}"
24
24
  diff.append(line)
25
25
  continue
@@ -32,7 +32,7 @@ def Diff(new_arguments: Dict, old_arguments: Dict) -> Dict:
32
32
  for path, old_value in walk_dict(old_arguments):
33
33
  try:
34
34
  get_dict_value(path, new_arguments)
35
- except:
35
+ except Exception:
36
36
  line = f"\t{Fore.RED}-{Style.RESET_ALL} {'.'.join([str(key) for key in path])}: {strike_text(old_value)}"
37
37
  diff.append(line)
38
38
 
@@ -50,7 +50,7 @@ class Resource:
50
50
  for path, _ in walk_dict(self.arguments):
51
51
  try:
52
52
  new_value = get_dict_value(path, new_arguments)
53
- except:
53
+ except Exception:
54
54
  # This happens because the user gave a wrong extra attribute
55
55
  # and was ignored by API so it is not present in the new arguments.
56
56
  # By improving the function get_dict_value we could simplify
@@ -64,7 +64,7 @@ def prompt_param(param: Dict[str, Primitive], prefix: str = "") -> Primitive:
64
64
  def list_of(input_value: str, param_type: Type = str) -> List:
65
65
  try:
66
66
  values = literal_eval(input_value)
67
- except:
67
+ except Exception:
68
68
  return None
69
69
 
70
70
  if not isinstance(values, List):
File without changes