pygeai 0.6.0b7__py3-none-any.whl → 0.6.0b11__py3-none-any.whl
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.
- pygeai/_docs/source/conf.py +78 -6
- pygeai/_docs/source/content/api_reference/embeddings.rst +31 -1
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +7 -0
- pygeai/_docs/source/content/debugger.rst +376 -83
- pygeai/_docs/source/content/migration.rst +528 -0
- pygeai/_docs/source/content/modules.rst +1 -1
- pygeai/_docs/source/pygeai.cli.rst +8 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +16 -0
- pygeai/_docs/source/pygeai.tests.snippets.chat.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.dbg.rst +45 -0
- pygeai/_docs/source/pygeai.tests.snippets.embeddings.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.dataset.rst +197 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.plan.rst +133 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.result.rst +37 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.rst +10 -0
- pygeai/_docs/source/pygeai.tests.snippets.rst +1 -0
- pygeai/admin/clients.py +5 -0
- pygeai/assistant/clients.py +7 -0
- pygeai/assistant/data_analyst/clients.py +2 -0
- pygeai/assistant/rag/clients.py +11 -0
- pygeai/chat/clients.py +236 -25
- pygeai/chat/endpoints.py +3 -1
- pygeai/cli/commands/chat.py +322 -1
- pygeai/cli/commands/embeddings.py +56 -8
- pygeai/cli/commands/migrate.py +994 -434
- pygeai/cli/error_handler.py +116 -0
- pygeai/cli/geai.py +28 -10
- pygeai/cli/parsers.py +8 -2
- pygeai/core/base/clients.py +3 -1
- pygeai/core/common/exceptions.py +11 -10
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +17 -2
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +1 -0
- pygeai/core/files/clients.py +5 -7
- pygeai/core/files/managers.py +42 -0
- pygeai/core/llm/clients.py +4 -0
- pygeai/core/plugins/clients.py +1 -0
- pygeai/core/rerank/clients.py +1 -0
- pygeai/core/secrets/clients.py +6 -0
- pygeai/core/services/rest.py +1 -1
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +565 -70
- pygeai/evaluation/clients.py +1 -1
- pygeai/evaluation/dataset/clients.py +45 -44
- pygeai/evaluation/plan/clients.py +27 -26
- pygeai/evaluation/result/clients.py +37 -5
- pygeai/gam/clients.py +4 -0
- pygeai/health/clients.py +1 -0
- pygeai/lab/agents/clients.py +8 -1
- pygeai/lab/models.py +3 -3
- pygeai/lab/processes/clients.py +21 -0
- pygeai/lab/strategies/clients.py +4 -0
- pygeai/lab/tools/clients.py +1 -0
- pygeai/migration/__init__.py +31 -0
- pygeai/migration/strategies.py +404 -155
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +13 -0
- pygeai/organization/limits/clients.py +15 -0
- pygeai/proxy/clients.py +3 -1
- pygeai/tests/admin/test_clients.py +16 -11
- pygeai/tests/assistants/rag/test_clients.py +35 -23
- pygeai/tests/assistants/test_clients.py +22 -15
- pygeai/tests/auth/test_clients.py +14 -6
- pygeai/tests/chat/test_clients.py +211 -1
- pygeai/tests/cli/commands/test_embeddings.py +32 -9
- pygeai/tests/cli/commands/test_evaluation.py +7 -0
- pygeai/tests/cli/commands/test_migrate.py +112 -243
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +5 -5
- pygeai/tests/core/embeddings/test_clients.py +144 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/test_clients.py +2 -0
- pygeai/tests/core/files/test_clients.py +1 -0
- pygeai/tests/core/llm/test_clients.py +14 -9
- pygeai/tests/core/plugins/test_clients.py +5 -3
- pygeai/tests/core/rerank/test_clients.py +1 -0
- pygeai/tests/core/secrets/test_clients.py +19 -13
- pygeai/tests/dbg/test_debugger.py +453 -75
- pygeai/tests/evaluation/dataset/test_clients.py +3 -1
- pygeai/tests/evaluation/plan/test_clients.py +4 -2
- pygeai/tests/evaluation/result/test_clients.py +7 -5
- pygeai/tests/gam/test_clients.py +1 -1
- pygeai/tests/health/test_clients.py +1 -0
- pygeai/tests/lab/agents/test_clients.py +9 -0
- pygeai/tests/lab/processes/test_clients.py +36 -0
- pygeai/tests/lab/processes/test_mappers.py +3 -0
- pygeai/tests/lab/strategies/test_clients.py +14 -9
- pygeai/tests/migration/test_strategies.py +45 -218
- pygeai/tests/migration/test_tools.py +133 -9
- pygeai/tests/organization/limits/test_clients.py +17 -0
- pygeai/tests/organization/test_clients.py +22 -0
- pygeai/tests/proxy/test_clients.py +2 -0
- pygeai/tests/proxy/test_integration.py +1 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/create_project.py +2 -2
- {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b11.dist-info}/METADATA +1 -1
- {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b11.dist-info}/RECORD +178 -96
- {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b11.dist-info}/WHEEL +0 -0
- {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b11.dist-info}/entry_points.txt +0 -0
- {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b11.dist-info}/licenses/LICENSE +0 -0
- {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b11.dist-info}/top_level.txt +0 -0
|
@@ -18,6 +18,7 @@ class TestFeedbackClient(unittest.TestCase):
|
|
|
18
18
|
def test_send_feedback_without_comments(self, mock_post):
|
|
19
19
|
mock_response = Mock()
|
|
20
20
|
mock_response.json.return_value = {}
|
|
21
|
+
mock_response.status_code = 200
|
|
21
22
|
mock_post.return_value = mock_response
|
|
22
23
|
|
|
23
24
|
result = self.feedback_client.send_feedback(
|
|
@@ -40,6 +41,7 @@ class TestFeedbackClient(unittest.TestCase):
|
|
|
40
41
|
def test_send_feedback_with_comments(self, mock_post):
|
|
41
42
|
mock_response = Mock()
|
|
42
43
|
mock_response.json.return_value = {}
|
|
44
|
+
mock_response.status_code = 200
|
|
43
45
|
mock_post.return_value = mock_response
|
|
44
46
|
|
|
45
47
|
result = self.feedback_client.send_feedback(
|
|
@@ -18,6 +18,7 @@ class TestFileClient(unittest.TestCase):
|
|
|
18
18
|
self.file_path = Path("test_file.txt")
|
|
19
19
|
self.mock_response = MagicMock()
|
|
20
20
|
self.mock_response.json.return_value = {"id": self.file_id, "status": "success"}
|
|
21
|
+
self.mock_response.status_code = 200
|
|
21
22
|
self.mock_response.text = json.dumps({"id": self.file_id, "status": "success"})
|
|
22
23
|
self.mock_response.content = b"file content"
|
|
23
24
|
self.mock_file = MagicMock()
|
|
@@ -2,7 +2,7 @@ import unittest
|
|
|
2
2
|
from unittest.mock import patch, MagicMock
|
|
3
3
|
from json import JSONDecodeError
|
|
4
4
|
from pygeai.core.llm.clients import LlmClient
|
|
5
|
-
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
5
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException, APIResponseError, APIResponseError
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class TestLlmClient(unittest.TestCase):
|
|
@@ -21,6 +21,7 @@ class TestLlmClient(unittest.TestCase):
|
|
|
21
21
|
def test_get_provider_list_success(self):
|
|
22
22
|
expected_response = {"providers": [{"name": "provider1"}, {"name": "provider2"}]}
|
|
23
23
|
self.mock_response.json.return_value = expected_response
|
|
24
|
+
self.mock_response.status_code = 200
|
|
24
25
|
self.client.api_service.get.return_value = self.mock_response
|
|
25
26
|
|
|
26
27
|
result = self.client.get_provider_list()
|
|
@@ -34,15 +35,16 @@ class TestLlmClient(unittest.TestCase):
|
|
|
34
35
|
self.mock_response.status_code = 500
|
|
35
36
|
self.client.api_service.get.return_value = self.mock_response
|
|
36
37
|
|
|
37
|
-
with self.assertRaises(
|
|
38
|
+
with self.assertRaises(APIResponseError) as context:
|
|
38
39
|
self.client.get_provider_list()
|
|
39
40
|
|
|
40
41
|
self.client.api_service.get.assert_called_once()
|
|
41
|
-
self.assertIn("Unable to obtain provider list", str(context.exception))
|
|
42
|
+
self.assertIn("API returned an error", str(context.exception)) # "Unable to obtain provider list", str(context.exception))
|
|
42
43
|
|
|
43
44
|
def test_get_provider_data_success(self):
|
|
44
45
|
expected_response = {"name": self.provider_name, "details": "test details"}
|
|
45
46
|
self.mock_response.json.return_value = expected_response
|
|
47
|
+
self.mock_response.status_code = 200
|
|
46
48
|
self.client.api_service.get.return_value = self.mock_response
|
|
47
49
|
|
|
48
50
|
result = self.client.get_provider_data(provider_name=self.provider_name)
|
|
@@ -58,15 +60,16 @@ class TestLlmClient(unittest.TestCase):
|
|
|
58
60
|
self.mock_response.status_code = 500
|
|
59
61
|
self.client.api_service.get.return_value = self.mock_response
|
|
60
62
|
|
|
61
|
-
with self.assertRaises(
|
|
63
|
+
with self.assertRaises(APIResponseError) as context:
|
|
62
64
|
self.client.get_provider_data(provider_name=self.provider_name)
|
|
63
65
|
|
|
64
66
|
self.client.api_service.get.assert_called_once()
|
|
65
|
-
self.assertIn("Unable to obtain provider data", str(context.exception))
|
|
67
|
+
self.assertIn("API returned an error", str(context.exception)) # "Unable to obtain provider data", str(context.exception))
|
|
66
68
|
|
|
67
69
|
def test_get_provider_models_success(self):
|
|
68
70
|
expected_response = {"models": [{"name": "model1"}, {"name": "model2"}]}
|
|
69
71
|
self.mock_response.json.return_value = expected_response
|
|
72
|
+
self.mock_response.status_code = 200
|
|
70
73
|
self.client.api_service.get.return_value = self.mock_response
|
|
71
74
|
|
|
72
75
|
result = self.client.get_provider_models(provider_name=self.provider_name)
|
|
@@ -82,15 +85,16 @@ class TestLlmClient(unittest.TestCase):
|
|
|
82
85
|
self.mock_response.status_code = 500
|
|
83
86
|
self.client.api_service.get.return_value = self.mock_response
|
|
84
87
|
|
|
85
|
-
with self.assertRaises(
|
|
88
|
+
with self.assertRaises(APIResponseError) as context:
|
|
86
89
|
self.client.get_provider_models(provider_name=self.provider_name)
|
|
87
90
|
|
|
88
91
|
self.client.api_service.get.assert_called_once()
|
|
89
|
-
self.assertIn("Unable to obtain provider models", str(context.exception))
|
|
92
|
+
self.assertIn("API returned an error", str(context.exception)) # "Unable to obtain provider models", str(context.exception))
|
|
90
93
|
|
|
91
94
|
def test_get_model_data_with_model_name_success(self):
|
|
92
95
|
expected_response = {"name": self.model_name, "provider": self.provider_name}
|
|
93
96
|
self.mock_response.json.return_value = expected_response
|
|
97
|
+
self.mock_response.status_code = 200
|
|
94
98
|
self.client.api_service.get.return_value = self.mock_response
|
|
95
99
|
|
|
96
100
|
result = self.client.get_model_data(
|
|
@@ -107,6 +111,7 @@ class TestLlmClient(unittest.TestCase):
|
|
|
107
111
|
def test_get_model_data_with_model_id_success(self):
|
|
108
112
|
expected_response = {"id": self.model_id, "provider": self.provider_name}
|
|
109
113
|
self.mock_response.json.return_value = expected_response
|
|
114
|
+
self.mock_response.status_code = 200
|
|
110
115
|
self.client.api_service.get.return_value = self.mock_response
|
|
111
116
|
|
|
112
117
|
result = self.client.get_model_data(
|
|
@@ -126,12 +131,12 @@ class TestLlmClient(unittest.TestCase):
|
|
|
126
131
|
self.mock_response.status_code = 500
|
|
127
132
|
self.client.api_service.get.return_value = self.mock_response
|
|
128
133
|
|
|
129
|
-
with self.assertRaises(
|
|
134
|
+
with self.assertRaises(APIResponseError) as context:
|
|
130
135
|
self.client.get_model_data(
|
|
131
136
|
provider_name=self.provider_name,
|
|
132
137
|
model_name=self.model_name
|
|
133
138
|
)
|
|
134
139
|
|
|
135
140
|
self.client.api_service.get.assert_called_once()
|
|
136
|
-
self.assertIn("Unable to obtain model data", str(context.exception))
|
|
141
|
+
self.assertIn("API returned an error", str(context.exception)) # "Unable to obtain model data", str(context.exception))
|
|
137
142
|
|
|
@@ -3,7 +3,7 @@ from unittest.mock import patch, MagicMock
|
|
|
3
3
|
from json import JSONDecodeError
|
|
4
4
|
|
|
5
5
|
from pygeai.core.plugins.clients import PluginClient
|
|
6
|
-
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
6
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException, APIResponseError, APIResponseError
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class TestPluginClient(unittest.TestCase):
|
|
@@ -23,6 +23,7 @@ class TestPluginClient(unittest.TestCase):
|
|
|
23
23
|
{"id": "assistant-2", "name": "Assistant 2"}
|
|
24
24
|
]
|
|
25
25
|
}
|
|
26
|
+
self.mock_response.status_code = 200
|
|
26
27
|
mock_get.return_value = self.mock_response
|
|
27
28
|
|
|
28
29
|
result = self.client.list_assistants(
|
|
@@ -39,6 +40,7 @@ class TestPluginClient(unittest.TestCase):
|
|
|
39
40
|
@patch('pygeai.core.services.rest.ApiService.get')
|
|
40
41
|
def test_list_assistants_empty(self, mock_get):
|
|
41
42
|
self.mock_response.json.return_value = {"assistants": []}
|
|
43
|
+
self.mock_response.status_code = 200
|
|
42
44
|
mock_get.return_value = self.mock_response
|
|
43
45
|
|
|
44
46
|
result = self.client.list_assistants(
|
|
@@ -55,9 +57,9 @@ class TestPluginClient(unittest.TestCase):
|
|
|
55
57
|
self.mock_response.text = "Internal server error"
|
|
56
58
|
mock_get.return_value = self.mock_response
|
|
57
59
|
|
|
58
|
-
with self.assertRaises(
|
|
60
|
+
with self.assertRaises(APIResponseError) as context:
|
|
59
61
|
self.client.list_assistants("org-123", "proj-456")
|
|
60
|
-
self.assertIn("Unable to list assistants for organization org-123 and project proj-456", str(context.exception))
|
|
62
|
+
self.assertIn("API returned an error", str(context.exception)) # "Unable to list assistants for organization org-123 and project proj-456", str(context.exception))
|
|
61
63
|
|
|
62
64
|
|
|
63
65
|
if __name__ == '__main__':
|
|
@@ -13,6 +13,7 @@ class TestRerankClient(unittest.TestCase):
|
|
|
13
13
|
self.client.api_service = MagicMock()
|
|
14
14
|
self.mock_response = MagicMock()
|
|
15
15
|
self.mock_response.json.return_value = {"results": [{"index": 0, "relevance_score": 0.95}]}
|
|
16
|
+
self.mock_response.status_code = 200
|
|
16
17
|
|
|
17
18
|
def test_rerank_chunks_success(self):
|
|
18
19
|
self.client.api_service.post.return_value = self.mock_response
|
|
@@ -3,7 +3,7 @@ from unittest.mock import patch, MagicMock
|
|
|
3
3
|
import json
|
|
4
4
|
from json import JSONDecodeError
|
|
5
5
|
from pygeai.core.secrets.clients import SecretClient
|
|
6
|
-
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
6
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException, APIResponseError, APIResponseError
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class TestSecretClient(unittest.TestCase):
|
|
@@ -19,6 +19,7 @@ class TestSecretClient(unittest.TestCase):
|
|
|
19
19
|
expected_response = {"secrets": [{"id": "1", "name": "secret1"}]}
|
|
20
20
|
mock_response = MagicMock()
|
|
21
21
|
mock_response.json.return_value = expected_response
|
|
22
|
+
mock_response.status_code = 200
|
|
22
23
|
self.mock_api_service.get.return_value = mock_response
|
|
23
24
|
|
|
24
25
|
result = self.secret_client.list_secrets(name="secret1", start=0, count=5)
|
|
@@ -38,10 +39,10 @@ class TestSecretClient(unittest.TestCase):
|
|
|
38
39
|
mock_response.status_code = 500
|
|
39
40
|
self.mock_api_service.get.return_value = mock_response
|
|
40
41
|
|
|
41
|
-
with self.assertRaises(
|
|
42
|
+
with self.assertRaises(APIResponseError) as context:
|
|
42
43
|
self.secret_client.list_secrets()
|
|
43
44
|
|
|
44
|
-
self.assertIn("Unable to list secrets with params", str(context.exception))
|
|
45
|
+
self.assertIn("API returned an error", str(context.exception)) # "Unable to list secrets with params", str(context.exception))
|
|
45
46
|
self.mock_api_service.get.assert_called_once()
|
|
46
47
|
|
|
47
48
|
def test_get_secret_success(self):
|
|
@@ -49,6 +50,7 @@ class TestSecretClient(unittest.TestCase):
|
|
|
49
50
|
expected_response = {"id": "secret-123", "name": "test-secret"}
|
|
50
51
|
mock_response = MagicMock()
|
|
51
52
|
mock_response.json.return_value = expected_response
|
|
53
|
+
mock_response.status_code = 200
|
|
52
54
|
self.mock_api_service.get.return_value = mock_response
|
|
53
55
|
|
|
54
56
|
result = self.secret_client.get_secret(secret_id)
|
|
@@ -65,10 +67,10 @@ class TestSecretClient(unittest.TestCase):
|
|
|
65
67
|
mock_response.status_code = 500
|
|
66
68
|
self.mock_api_service.get.return_value = mock_response
|
|
67
69
|
|
|
68
|
-
with self.assertRaises(
|
|
70
|
+
with self.assertRaises(APIResponseError) as context:
|
|
69
71
|
self.secret_client.get_secret(secret_id)
|
|
70
72
|
|
|
71
|
-
self.assertIn(f"Unable to get secret with ID '{secret_id}'", str(context.exception))
|
|
73
|
+
self.assertIn("API returned an error", str(context.exception)) # f"Unable to get secret with ID '{secret_id}'", str(context.exception))
|
|
72
74
|
self.mock_api_service.get.assert_called_once()
|
|
73
75
|
|
|
74
76
|
def test_get_secret_invalid_id(self):
|
|
@@ -83,6 +85,7 @@ class TestSecretClient(unittest.TestCase):
|
|
|
83
85
|
expected_response = {"id": "secret-123", "name": name}
|
|
84
86
|
mock_response = MagicMock()
|
|
85
87
|
mock_response.json.return_value = expected_response
|
|
88
|
+
mock_response.status_code = 200
|
|
86
89
|
self.mock_api_service.post.return_value = mock_response
|
|
87
90
|
|
|
88
91
|
result = self.secret_client.create_secret(name, secret_string, description)
|
|
@@ -105,10 +108,10 @@ class TestSecretClient(unittest.TestCase):
|
|
|
105
108
|
mock_response.status_code = 500
|
|
106
109
|
self.mock_api_service.post.return_value = mock_response
|
|
107
110
|
|
|
108
|
-
with self.assertRaises(
|
|
111
|
+
with self.assertRaises(APIResponseError) as context:
|
|
109
112
|
self.secret_client.create_secret(name, secret_string)
|
|
110
113
|
|
|
111
|
-
self.assertIn(f"Unable to create secret with name '{name}'", str(context.exception))
|
|
114
|
+
self.assertIn("API returned an error", str(context.exception)) # f"Unable to create secret with name '{name}'", str(context.exception))
|
|
112
115
|
self.mock_api_service.post.assert_called_once()
|
|
113
116
|
|
|
114
117
|
def test_create_secret_invalid_input(self):
|
|
@@ -128,6 +131,7 @@ class TestSecretClient(unittest.TestCase):
|
|
|
128
131
|
expected_response = {"id": secret_id, "name": name}
|
|
129
132
|
mock_response = MagicMock()
|
|
130
133
|
mock_response.json.return_value = expected_response
|
|
134
|
+
mock_response.status_code = 200
|
|
131
135
|
self.mock_api_service.put.return_value = mock_response
|
|
132
136
|
|
|
133
137
|
result = self.secret_client.update_secret(secret_id, name, secret_string, description)
|
|
@@ -151,10 +155,10 @@ class TestSecretClient(unittest.TestCase):
|
|
|
151
155
|
mock_response.status_code = 500
|
|
152
156
|
self.mock_api_service.put.return_value = mock_response
|
|
153
157
|
|
|
154
|
-
with self.assertRaises(
|
|
158
|
+
with self.assertRaises(APIResponseError) as context:
|
|
155
159
|
self.secret_client.update_secret(secret_id, name, secret_string)
|
|
156
160
|
|
|
157
|
-
self.assertIn(f"Unable to update secret with ID '{secret_id}'", str(context.exception))
|
|
161
|
+
self.assertIn("API returned an error", str(context.exception)) # f"Unable to update secret with ID '{secret_id}'", str(context.exception))
|
|
158
162
|
self.mock_api_service.put.assert_called_once()
|
|
159
163
|
|
|
160
164
|
def test_update_secret_invalid_input(self):
|
|
@@ -179,6 +183,7 @@ class TestSecretClient(unittest.TestCase):
|
|
|
179
183
|
expected_response = {"status": "success"}
|
|
180
184
|
mock_response = MagicMock()
|
|
181
185
|
mock_response.json.return_value = expected_response
|
|
186
|
+
mock_response.status_code = 200
|
|
182
187
|
self.mock_api_service.post.return_value = mock_response
|
|
183
188
|
|
|
184
189
|
result = self.secret_client.set_secret_accesses(secret_id, access_list)
|
|
@@ -201,10 +206,10 @@ class TestSecretClient(unittest.TestCase):
|
|
|
201
206
|
mock_response.status_code = 500
|
|
202
207
|
self.mock_api_service.post.return_value = mock_response
|
|
203
208
|
|
|
204
|
-
with self.assertRaises(
|
|
209
|
+
with self.assertRaises(APIResponseError) as context:
|
|
205
210
|
self.secret_client.set_secret_accesses(secret_id, access_list)
|
|
206
211
|
|
|
207
|
-
self.assertIn(f"Unable to set accesses for secret with ID '{secret_id}'", str(context.exception))
|
|
212
|
+
self.assertIn("API returned an error", str(context.exception)) # f"Unable to set accesses for secret with ID '{secret_id}'", str(context.exception))
|
|
208
213
|
self.mock_api_service.post.assert_called_once()
|
|
209
214
|
|
|
210
215
|
def test_set_secret_accesses_invalid_input(self):
|
|
@@ -229,6 +234,7 @@ class TestSecretClient(unittest.TestCase):
|
|
|
229
234
|
expected_response = {"accesses": [{"accessLevel": "write", "principalType": "service"}]}
|
|
230
235
|
mock_response = MagicMock()
|
|
231
236
|
mock_response.json.return_value = expected_response
|
|
237
|
+
mock_response.status_code = 200
|
|
232
238
|
self.mock_api_service.get.return_value = mock_response
|
|
233
239
|
|
|
234
240
|
result = self.secret_client.get_secret_accesses(secret_id)
|
|
@@ -245,10 +251,10 @@ class TestSecretClient(unittest.TestCase):
|
|
|
245
251
|
mock_response.status_code = 500
|
|
246
252
|
self.mock_api_service.get.return_value = mock_response
|
|
247
253
|
|
|
248
|
-
with self.assertRaises(
|
|
254
|
+
with self.assertRaises(APIResponseError) as context:
|
|
249
255
|
self.secret_client.get_secret_accesses(secret_id)
|
|
250
256
|
|
|
251
|
-
self.assertIn(f"Unable to get accesses for secret with ID '{secret_id}'", str(context.exception))
|
|
257
|
+
self.assertIn("API returned an error", str(context.exception)) # f"Unable to get accesses for secret with ID '{secret_id}'", str(context.exception))
|
|
252
258
|
self.mock_api_service.get.assert_called_once()
|
|
253
259
|
|
|
254
260
|
def test_get_secret_accesses_invalid_id(self):
|