devservices 1.0.1__tar.gz → 1.0.2__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 (52) hide show
  1. {devservices-1.0.1 → devservices-1.0.2}/PKG-INFO +1 -1
  2. {devservices-1.0.1 → devservices-1.0.2}/README.md +1 -1
  3. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/logs.py +2 -2
  4. {devservices-1.0.1 → devservices-1.0.2}/devservices.egg-info/PKG-INFO +1 -1
  5. {devservices-1.0.1 → devservices-1.0.2}/devservices.egg-info/SOURCES.txt +1 -0
  6. {devservices-1.0.1 → devservices-1.0.2}/pyproject.toml +1 -1
  7. devservices-1.0.2/tests/commands/test_logs.py +107 -0
  8. {devservices-1.0.1 → devservices-1.0.2}/LICENSE.md +0 -0
  9. {devservices-1.0.1 → devservices-1.0.2}/devservices/__init__.py +0 -0
  10. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/__init__.py +0 -0
  11. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/check_for_update.py +0 -0
  12. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/list_dependencies.py +0 -0
  13. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/list_services.py +0 -0
  14. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/purge.py +0 -0
  15. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/start.py +0 -0
  16. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/status.py +0 -0
  17. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/stop.py +0 -0
  18. {devservices-1.0.1 → devservices-1.0.2}/devservices/commands/update.py +0 -0
  19. {devservices-1.0.1 → devservices-1.0.2}/devservices/configs/service_config.py +0 -0
  20. {devservices-1.0.1 → devservices-1.0.2}/devservices/constants.py +0 -0
  21. {devservices-1.0.1 → devservices-1.0.2}/devservices/exceptions.py +0 -0
  22. {devservices-1.0.1 → devservices-1.0.2}/devservices/main.py +0 -0
  23. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/__init__.py +0 -0
  24. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/console.py +0 -0
  25. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/dependencies.py +0 -0
  26. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/devenv.py +0 -0
  27. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/docker.py +0 -0
  28. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/docker_compose.py +0 -0
  29. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/file_lock.py +0 -0
  30. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/install_binary.py +0 -0
  31. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/services.py +0 -0
  32. {devservices-1.0.1 → devservices-1.0.2}/devservices/utils/state.py +0 -0
  33. {devservices-1.0.1 → devservices-1.0.2}/devservices.egg-info/dependency_links.txt +0 -0
  34. {devservices-1.0.1 → devservices-1.0.2}/devservices.egg-info/entry_points.txt +0 -0
  35. {devservices-1.0.1 → devservices-1.0.2}/devservices.egg-info/requires.txt +0 -0
  36. {devservices-1.0.1 → devservices-1.0.2}/devservices.egg-info/top_level.txt +0 -0
  37. {devservices-1.0.1 → devservices-1.0.2}/setup.cfg +0 -0
  38. {devservices-1.0.1 → devservices-1.0.2}/testing/__init__.py +0 -0
  39. {devservices-1.0.1 → devservices-1.0.2}/testing/utils.py +0 -0
  40. {devservices-1.0.1 → devservices-1.0.2}/tests/__init__.py +0 -0
  41. {devservices-1.0.1 → devservices-1.0.2}/tests/commands/test_list_services.py +0 -0
  42. {devservices-1.0.1 → devservices-1.0.2}/tests/commands/test_purge.py +0 -0
  43. {devservices-1.0.1 → devservices-1.0.2}/tests/commands/test_start.py +0 -0
  44. {devservices-1.0.1 → devservices-1.0.2}/tests/commands/test_stop.py +0 -0
  45. {devservices-1.0.1 → devservices-1.0.2}/tests/commands/test_update.py +0 -0
  46. {devservices-1.0.1 → devservices-1.0.2}/tests/configs/test_service_config.py +0 -0
  47. {devservices-1.0.1 → devservices-1.0.2}/tests/conftest.py +0 -0
  48. {devservices-1.0.1 → devservices-1.0.2}/tests/utils/test_dependencies.py +0 -0
  49. {devservices-1.0.1 → devservices-1.0.2}/tests/utils/test_docker.py +0 -0
  50. {devservices-1.0.1 → devservices-1.0.2}/tests/utils/test_docker_compose.py +0 -0
  51. {devservices-1.0.1 → devservices-1.0.2}/tests/utils/test_install_binary.py +0 -0
  52. {devservices-1.0.1 → devservices-1.0.2}/tests/utils/test_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devservices
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Requires-Python: >=3.10
5
5
  License-File: LICENSE.md
6
6
  Requires-Dist: pyyaml
@@ -11,7 +11,7 @@ A standalone cli tool used to manage dependencies for services. It simplifies th
11
11
  The recommended way to install devservices is through a virtualenv in the requirements.txt.
12
12
 
13
13
  ```
14
- devservices==1.0.1
14
+ devservices==1.0.2
15
15
  ```
16
16
 
17
17
 
@@ -42,8 +42,8 @@ def logs(args: Namespace) -> None:
42
42
 
43
43
  state = State()
44
44
  running_services = state.get_started_services()
45
- if service_name not in running_services:
46
- console.warning(f"Service {service_name} is not running")
45
+ if service.name not in running_services:
46
+ console.warning(f"Service {service.name} is not running")
47
47
  return
48
48
 
49
49
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devservices
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Requires-Python: >=3.10
5
5
  License-File: LICENSE.md
6
6
  Requires-Dist: pyyaml
@@ -38,6 +38,7 @@ testing/utils.py
38
38
  tests/__init__.py
39
39
  tests/conftest.py
40
40
  tests/commands/test_list_services.py
41
+ tests/commands/test_logs.py
41
42
  tests/commands/test_purge.py
42
43
  tests/commands/test_start.py
43
44
  tests/commands/test_stop.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devservices"
7
- version = "1.0.1"
7
+ version = "1.0.2"
8
8
  # 3.10 is just for internal pypi compat
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
@@ -0,0 +1,107 @@
1
+ from __future__ import annotations
2
+
3
+ import subprocess
4
+ from argparse import Namespace
5
+ from pathlib import Path
6
+ from unittest import mock
7
+
8
+ import pytest
9
+
10
+ from devservices.commands.logs import logs
11
+ from devservices.configs.service_config import Dependency
12
+ from devservices.configs.service_config import ServiceConfig
13
+ from devservices.utils.services import Service
14
+
15
+
16
+ @mock.patch("devservices.commands.logs.run_docker_compose_command")
17
+ @mock.patch("devservices.commands.logs.find_matching_service")
18
+ @mock.patch("devservices.utils.state.State.get_started_services")
19
+ @mock.patch("devservices.commands.logs.install_and_verify_dependencies")
20
+ def test_logs_no_specified_service_not_running(
21
+ mock_install_and_verify_dependencies: mock.Mock,
22
+ mock_get_started_services: mock.Mock,
23
+ mock_find_matching_service: mock.Mock,
24
+ mock_run_docker_compose_command: mock.Mock,
25
+ capsys: pytest.CaptureFixture[str],
26
+ tmp_path: Path,
27
+ ) -> None:
28
+ args = Namespace(service_name=None)
29
+ mock_service = Service(
30
+ name="example-service",
31
+ config=ServiceConfig(
32
+ version=0.1,
33
+ service_name="example-service",
34
+ dependencies={
35
+ "redis": Dependency(description="Redis"),
36
+ "clickhouse": Dependency(description="Clickhouse"),
37
+ },
38
+ modes={"default": ["redis", "clickhouse"]},
39
+ ),
40
+ repo_path=str(tmp_path / "example-service"),
41
+ )
42
+ mock_get_started_services.return_value = []
43
+ mock_find_matching_service.return_value = mock_service
44
+
45
+ logs(args)
46
+
47
+ mock_find_matching_service.assert_called_once_with(None)
48
+ mock_get_started_services.assert_called_once()
49
+ mock_install_and_verify_dependencies.assert_not_called()
50
+ mock_run_docker_compose_command.assert_not_called()
51
+
52
+ captured = capsys.readouterr()
53
+ assert "Service example-service is not running" in captured.out
54
+
55
+
56
+ @mock.patch("devservices.commands.logs.run_docker_compose_command")
57
+ @mock.patch("devservices.commands.logs.find_matching_service")
58
+ @mock.patch("devservices.utils.state.State.get_started_services")
59
+ @mock.patch("devservices.commands.logs.install_and_verify_dependencies")
60
+ def test_logs_no_specified_service_success(
61
+ mock_install_and_verify_dependencies: mock.Mock,
62
+ mock_get_started_services: mock.Mock,
63
+ mock_find_matching_service: mock.Mock,
64
+ mock_run_docker_compose_command: mock.Mock,
65
+ capsys: pytest.CaptureFixture[str],
66
+ tmp_path: Path,
67
+ ) -> None:
68
+ args = Namespace(service_name=None)
69
+ mock_service = Service(
70
+ name="example-service",
71
+ config=ServiceConfig(
72
+ version=0.1,
73
+ service_name="example-service",
74
+ dependencies={
75
+ "redis": Dependency(description="Redis"),
76
+ "clickhouse": Dependency(description="Clickhouse"),
77
+ },
78
+ modes={"default": ["redis", "clickhouse"]},
79
+ ),
80
+ repo_path=str(tmp_path / "example-service"),
81
+ )
82
+ mock_install_and_verify_dependencies.return_value = {}
83
+ mock_get_started_services.return_value = ["example-service"]
84
+ mock_find_matching_service.return_value = mock_service
85
+ mock_run_docker_compose_command.return_value = [
86
+ subprocess.CompletedProcess(
87
+ args=["docker", "compose", "logs", "redis", "clickhouse"],
88
+ returncode=0,
89
+ stdout="redis and clickhouse log output",
90
+ )
91
+ ]
92
+
93
+ logs(args)
94
+
95
+ mock_find_matching_service.assert_called_once_with(None)
96
+ mock_get_started_services.assert_called_once()
97
+ mock_install_and_verify_dependencies.assert_called_once()
98
+ mock_run_docker_compose_command.assert_called_once_with(
99
+ mock_service,
100
+ "logs",
101
+ ["redis", "clickhouse"],
102
+ {},
103
+ options=["-n", "100"],
104
+ )
105
+
106
+ captured = capsys.readouterr()
107
+ assert captured.out.endswith("redis and clickhouse log output\n")
File without changes
File without changes