pygeai 0.6.0b7__py3-none-any.whl → 0.6.0b10__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.
Files changed (178) hide show
  1. pygeai/_docs/source/conf.py +78 -6
  2. pygeai/_docs/source/content/api_reference/embeddings.rst +31 -1
  3. pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
  4. pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
  5. pygeai/_docs/source/content/api_reference/files.rst +592 -0
  6. pygeai/_docs/source/content/api_reference/gam.rst +401 -0
  7. pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
  8. pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
  9. pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
  10. pygeai/_docs/source/content/api_reference.rst +7 -0
  11. pygeai/_docs/source/content/debugger.rst +376 -83
  12. pygeai/_docs/source/content/migration.rst +528 -0
  13. pygeai/_docs/source/content/modules.rst +1 -1
  14. pygeai/_docs/source/pygeai.cli.rst +8 -0
  15. pygeai/_docs/source/pygeai.tests.cli.rst +16 -0
  16. pygeai/_docs/source/pygeai.tests.core.embeddings.rst +16 -0
  17. pygeai/_docs/source/pygeai.tests.snippets.chat.rst +40 -0
  18. pygeai/_docs/source/pygeai.tests.snippets.dbg.rst +45 -0
  19. pygeai/_docs/source/pygeai.tests.snippets.embeddings.rst +40 -0
  20. pygeai/_docs/source/pygeai.tests.snippets.evaluation.dataset.rst +197 -0
  21. pygeai/_docs/source/pygeai.tests.snippets.evaluation.plan.rst +133 -0
  22. pygeai/_docs/source/pygeai.tests.snippets.evaluation.result.rst +37 -0
  23. pygeai/_docs/source/pygeai.tests.snippets.evaluation.rst +10 -0
  24. pygeai/_docs/source/pygeai.tests.snippets.rst +1 -0
  25. pygeai/admin/clients.py +5 -0
  26. pygeai/assistant/clients.py +7 -0
  27. pygeai/assistant/data_analyst/clients.py +2 -0
  28. pygeai/assistant/rag/clients.py +11 -0
  29. pygeai/chat/clients.py +191 -25
  30. pygeai/chat/endpoints.py +2 -1
  31. pygeai/cli/commands/chat.py +227 -1
  32. pygeai/cli/commands/embeddings.py +56 -8
  33. pygeai/cli/commands/migrate.py +994 -434
  34. pygeai/cli/error_handler.py +116 -0
  35. pygeai/cli/geai.py +28 -10
  36. pygeai/cli/parsers.py +8 -2
  37. pygeai/core/base/clients.py +3 -1
  38. pygeai/core/common/exceptions.py +11 -10
  39. pygeai/core/embeddings/__init__.py +19 -0
  40. pygeai/core/embeddings/clients.py +17 -2
  41. pygeai/core/embeddings/mappers.py +16 -2
  42. pygeai/core/embeddings/responses.py +9 -2
  43. pygeai/core/feedback/clients.py +1 -0
  44. pygeai/core/files/clients.py +5 -7
  45. pygeai/core/files/managers.py +42 -0
  46. pygeai/core/llm/clients.py +4 -0
  47. pygeai/core/plugins/clients.py +1 -0
  48. pygeai/core/rerank/clients.py +1 -0
  49. pygeai/core/secrets/clients.py +6 -0
  50. pygeai/core/services/rest.py +1 -1
  51. pygeai/dbg/__init__.py +3 -0
  52. pygeai/dbg/debugger.py +565 -70
  53. pygeai/evaluation/clients.py +1 -1
  54. pygeai/evaluation/dataset/clients.py +45 -44
  55. pygeai/evaluation/plan/clients.py +27 -26
  56. pygeai/evaluation/result/clients.py +37 -5
  57. pygeai/gam/clients.py +4 -0
  58. pygeai/health/clients.py +1 -0
  59. pygeai/lab/agents/clients.py +8 -1
  60. pygeai/lab/models.py +3 -3
  61. pygeai/lab/processes/clients.py +21 -0
  62. pygeai/lab/strategies/clients.py +4 -0
  63. pygeai/lab/tools/clients.py +1 -0
  64. pygeai/migration/__init__.py +31 -0
  65. pygeai/migration/strategies.py +404 -155
  66. pygeai/migration/tools.py +170 -3
  67. pygeai/organization/clients.py +13 -0
  68. pygeai/organization/limits/clients.py +15 -0
  69. pygeai/proxy/clients.py +3 -1
  70. pygeai/tests/admin/test_clients.py +16 -11
  71. pygeai/tests/assistants/rag/test_clients.py +35 -23
  72. pygeai/tests/assistants/test_clients.py +22 -15
  73. pygeai/tests/auth/test_clients.py +14 -6
  74. pygeai/tests/chat/test_clients.py +211 -1
  75. pygeai/tests/cli/commands/test_embeddings.py +32 -9
  76. pygeai/tests/cli/commands/test_evaluation.py +7 -0
  77. pygeai/tests/cli/commands/test_migrate.py +112 -243
  78. pygeai/tests/cli/test_error_handler.py +225 -0
  79. pygeai/tests/cli/test_geai_driver.py +154 -0
  80. pygeai/tests/cli/test_parsers.py +5 -5
  81. pygeai/tests/core/embeddings/test_clients.py +144 -0
  82. pygeai/tests/core/embeddings/test_managers.py +171 -0
  83. pygeai/tests/core/embeddings/test_mappers.py +142 -0
  84. pygeai/tests/core/feedback/test_clients.py +2 -0
  85. pygeai/tests/core/files/test_clients.py +1 -0
  86. pygeai/tests/core/llm/test_clients.py +14 -9
  87. pygeai/tests/core/plugins/test_clients.py +5 -3
  88. pygeai/tests/core/rerank/test_clients.py +1 -0
  89. pygeai/tests/core/secrets/test_clients.py +19 -13
  90. pygeai/tests/dbg/test_debugger.py +453 -75
  91. pygeai/tests/evaluation/dataset/test_clients.py +3 -1
  92. pygeai/tests/evaluation/plan/test_clients.py +4 -2
  93. pygeai/tests/evaluation/result/test_clients.py +7 -5
  94. pygeai/tests/gam/test_clients.py +1 -1
  95. pygeai/tests/health/test_clients.py +1 -0
  96. pygeai/tests/lab/agents/test_clients.py +9 -0
  97. pygeai/tests/lab/processes/test_clients.py +36 -0
  98. pygeai/tests/lab/processes/test_mappers.py +3 -0
  99. pygeai/tests/lab/strategies/test_clients.py +14 -9
  100. pygeai/tests/migration/test_strategies.py +45 -218
  101. pygeai/tests/migration/test_tools.py +133 -9
  102. pygeai/tests/organization/limits/test_clients.py +17 -0
  103. pygeai/tests/organization/test_clients.py +22 -0
  104. pygeai/tests/proxy/test_clients.py +2 -0
  105. pygeai/tests/proxy/test_integration.py +1 -0
  106. pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
  107. pygeai/tests/snippets/chat/get_response.py +15 -0
  108. pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
  109. pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
  110. pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
  111. pygeai/tests/snippets/dbg/__init__.py +0 -0
  112. pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
  113. pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
  114. pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
  115. pygeai/tests/snippets/dbg/stepping_example.py +40 -0
  116. pygeai/tests/snippets/embeddings/cache_example.py +31 -0
  117. pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
  118. pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
  119. pygeai/tests/snippets/embeddings/openai_example.py +30 -0
  120. pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
  121. pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
  122. pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
  123. pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
  124. pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
  125. pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
  126. pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
  127. pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
  128. pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
  129. pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
  130. pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
  131. pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
  132. pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
  133. pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
  134. pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
  135. pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
  136. pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
  137. pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
  138. pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
  139. pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
  140. pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
  141. pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
  142. pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
  143. pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
  144. pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
  145. pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
  146. pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
  147. pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
  148. pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
  149. pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
  150. pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
  151. pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
  152. pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
  153. pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
  154. pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
  155. pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
  156. pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
  157. pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
  158. pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
  159. pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
  160. pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
  161. pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
  162. pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
  163. pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
  164. pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
  165. pygeai/tests/snippets/migrate/__init__.py +45 -0
  166. pygeai/tests/snippets/migrate/agent_migration.py +110 -0
  167. pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
  168. pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
  169. pygeai/tests/snippets/migrate/process_migration.py +64 -0
  170. pygeai/tests/snippets/migrate/project_migration.py +42 -0
  171. pygeai/tests/snippets/migrate/tool_migration.py +64 -0
  172. pygeai/tests/snippets/organization/create_project.py +2 -2
  173. {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b10.dist-info}/METADATA +1 -1
  174. {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b10.dist-info}/RECORD +178 -96
  175. {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b10.dist-info}/WHEEL +0 -0
  176. {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b10.dist-info}/entry_points.txt +0 -0
  177. {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b10.dist-info}/licenses/LICENSE +0 -0
  178. {pygeai-0.6.0b7.dist-info → pygeai-0.6.0b10.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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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(InvalidAPIResponseException) as context:
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):