pygeai 0.6.0b6__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.
- pygeai/_docs/source/conf.py +78 -6
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- 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/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +20 -18
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -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 +13 -1
- 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/index.rst +59 -7
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +16 -0
- pygeai/_docs/source/pygeai.cli.rst +8 -0
- pygeai/_docs/source/pygeai.core.utils.rst +16 -0
- pygeai/_docs/source/pygeai.rst +1 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +21 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +16 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +8 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +8 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rst +1 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +8 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +8 -0
- pygeai/_docs/source/pygeai.tests.rst +2 -0
- pygeai/_docs/source/pygeai.tests.snippets.auth.rst +10 -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.organization.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.rst +2 -0
- pygeai/admin/clients.py +12 -32
- pygeai/assistant/clients.py +16 -44
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +6 -13
- pygeai/assistant/rag/clients.py +24 -67
- pygeai/auth/clients.py +88 -14
- pygeai/auth/endpoints.py +4 -0
- pygeai/chat/clients.py +192 -25
- pygeai/chat/endpoints.py +2 -1
- pygeai/cli/commands/auth.py +178 -2
- pygeai/cli/commands/chat.py +227 -1
- pygeai/cli/commands/embeddings.py +56 -8
- pygeai/cli/commands/lab/ai_lab.py +0 -2
- pygeai/cli/commands/migrate.py +994 -434
- pygeai/cli/commands/organization.py +241 -0
- pygeai/cli/error_handler.py +116 -0
- pygeai/cli/geai.py +28 -10
- pygeai/cli/parsers.py +8 -2
- pygeai/core/base/clients.py +4 -1
- pygeai/core/common/exceptions.py +11 -10
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +20 -9
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +4 -8
- pygeai/core/files/clients.py +10 -25
- pygeai/core/files/managers.py +42 -0
- pygeai/core/llm/clients.py +11 -26
- pygeai/core/models.py +107 -0
- pygeai/core/plugins/clients.py +4 -7
- pygeai/core/rerank/clients.py +4 -8
- pygeai/core/secrets/clients.py +14 -37
- pygeai/core/services/rest.py +1 -1
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +565 -70
- pygeai/evaluation/clients.py +2 -1
- pygeai/evaluation/dataset/clients.py +46 -44
- pygeai/evaluation/plan/clients.py +28 -26
- pygeai/evaluation/result/clients.py +38 -5
- pygeai/gam/clients.py +10 -25
- pygeai/health/clients.py +4 -7
- pygeai/lab/agents/clients.py +21 -54
- pygeai/lab/agents/endpoints.py +2 -0
- pygeai/lab/clients.py +1 -0
- pygeai/lab/models.py +3 -3
- pygeai/lab/processes/clients.py +45 -127
- pygeai/lab/strategies/clients.py +11 -25
- pygeai/lab/tools/clients.py +23 -67
- pygeai/lab/tools/endpoints.py +3 -0
- pygeai/migration/__init__.py +31 -0
- pygeai/migration/strategies.py +404 -155
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +135 -51
- pygeai/organization/endpoints.py +6 -1
- pygeai/organization/limits/clients.py +32 -91
- pygeai/organization/managers.py +157 -1
- pygeai/organization/mappers.py +76 -2
- pygeai/organization/responses.py +25 -1
- pygeai/proxy/clients.py +4 -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 +191 -7
- 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 +206 -1
- pygeai/tests/organization/test_managers.py +122 -1
- pygeai/tests/proxy/test_clients.py +2 -0
- pygeai/tests/proxy/test_integration.py +1 -0
- pygeai/tests/snippets/auth/__init__.py +0 -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/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/METADATA +1 -1
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/RECORD +227 -124
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/WHEEL +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/entry_points.txt +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/licenses/LICENSE +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/top_level.txt +0 -0
|
@@ -25,7 +25,6 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
25
25
|
self.to_api_key = "to_key"
|
|
26
26
|
self.to_instance = "http://to.instance"
|
|
27
27
|
self.from_project_id = "proj_123"
|
|
28
|
-
self.to_project_id = "proj_456"
|
|
29
28
|
self.to_project_name = "New Project"
|
|
30
29
|
self.admin_email = "admin@example.com"
|
|
31
30
|
self.agent_id = "agent_123"
|
|
@@ -54,10 +53,8 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
54
53
|
mock_org_manager.assert_any_call(api_key=self.from_api_key, base_url=self.from_instance)
|
|
55
54
|
mock_org_manager.assert_any_call(api_key=self.to_api_key, base_url=self.to_instance)
|
|
56
55
|
|
|
57
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
58
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
59
56
|
@patch('pygeai.migration.strategies.OrganizationManager')
|
|
60
|
-
def test_project_migration_success(self, mock_org_manager
|
|
57
|
+
def test_project_migration_success(self, mock_org_manager):
|
|
61
58
|
mock_source = Mock()
|
|
62
59
|
mock_destination = Mock()
|
|
63
60
|
mock_org_manager.side_effect = [mock_source, mock_destination]
|
|
@@ -82,20 +79,14 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
82
79
|
|
|
83
80
|
mock_source.get_project_data.assert_called_with(project_id=self.from_project_id)
|
|
84
81
|
mock_destination.create_project.assert_called_with(mock_project)
|
|
85
|
-
mock_stdout.assert_called_once()
|
|
86
|
-
self.assertIn("Migrated project:", mock_stdout.call_args[0][0])
|
|
87
|
-
mock_stderr.assert_not_called()
|
|
88
82
|
|
|
89
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
90
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
91
83
|
@patch('pygeai.migration.strategies.OrganizationManager')
|
|
92
|
-
def
|
|
84
|
+
def test_project_migration_error_no_project_data(self, mock_org_manager):
|
|
93
85
|
mock_source = Mock()
|
|
94
86
|
mock_destination = Mock()
|
|
95
87
|
mock_org_manager.side_effect = [mock_source, mock_destination]
|
|
96
88
|
|
|
97
|
-
|
|
98
|
-
mock_source.get_project_data.return_value = mock_error_response
|
|
89
|
+
mock_source.get_project_data.return_value = Mock(spec=[])
|
|
99
90
|
|
|
100
91
|
strategy = ProjectMigrationStrategy(
|
|
101
92
|
from_api_key=self.from_api_key,
|
|
@@ -106,22 +97,22 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
106
97
|
to_project_name=self.to_project_name,
|
|
107
98
|
admin_email=self.admin_email
|
|
108
99
|
)
|
|
109
|
-
strategy.migrate()
|
|
110
100
|
|
|
111
|
-
|
|
101
|
+
with self.assertRaises(ValueError) as context:
|
|
102
|
+
strategy.migrate()
|
|
103
|
+
self.assertIn("Unable to retrieve project data", str(context.exception))
|
|
112
104
|
mock_destination.create_project.assert_not_called()
|
|
113
|
-
mock_stderr.assert_called_once()
|
|
114
|
-
mock_stdout.assert_not_called()
|
|
115
105
|
|
|
116
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
117
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
118
106
|
@patch('pygeai.migration.strategies.OrganizationManager')
|
|
119
|
-
def
|
|
107
|
+
def test_project_migration_error_response(self, mock_org_manager):
|
|
120
108
|
mock_source = Mock()
|
|
121
109
|
mock_destination = Mock()
|
|
122
110
|
mock_org_manager.side_effect = [mock_source, mock_destination]
|
|
123
111
|
|
|
124
|
-
|
|
112
|
+
mock_project = Mock(spec=Project)
|
|
113
|
+
mock_source.get_project_data.return_value = Mock(project=mock_project)
|
|
114
|
+
mock_error_response = ErrorListResponse(errors=[Error(id=1, description="Creation failed")])
|
|
115
|
+
mock_destination.create_project.return_value = mock_error_response
|
|
125
116
|
|
|
126
117
|
strategy = ProjectMigrationStrategy(
|
|
127
118
|
from_api_key=self.from_api_key,
|
|
@@ -132,13 +123,10 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
132
123
|
to_project_name=self.to_project_name,
|
|
133
124
|
admin_email=self.admin_email
|
|
134
125
|
)
|
|
135
|
-
strategy.migrate()
|
|
136
126
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
self.assertIn("Unable to migrate project", mock_stderr.call_args[0][0])
|
|
141
|
-
mock_stdout.assert_not_called()
|
|
127
|
+
with self.assertRaises(ValueError) as context:
|
|
128
|
+
strategy.migrate()
|
|
129
|
+
self.assertIn("Failed to create project", str(context.exception))
|
|
142
130
|
|
|
143
131
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
144
132
|
def test_agent_migration_strategy_init(self, mock_lab_manager):
|
|
@@ -147,24 +135,19 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
147
135
|
from_instance=self.from_instance,
|
|
148
136
|
to_api_key=self.to_api_key,
|
|
149
137
|
to_instance=self.to_instance,
|
|
150
|
-
from_project_id=self.from_project_id,
|
|
151
|
-
to_project_id=self.to_project_id,
|
|
152
138
|
agent_id=self.agent_id
|
|
153
139
|
)
|
|
154
140
|
self.assertEqual(strategy.from_api_key, self.from_api_key)
|
|
155
141
|
self.assertEqual(strategy.from_instance, self.from_instance)
|
|
156
142
|
self.assertEqual(strategy.to_api_key, self.to_api_key)
|
|
157
143
|
self.assertEqual(strategy.to_instance, self.to_instance)
|
|
158
|
-
self.assertEqual(strategy.from_project_id, self.from_project_id)
|
|
159
|
-
self.assertEqual(strategy.to_project_id, self.to_project_id)
|
|
160
144
|
self.assertEqual(strategy.agent_id, self.agent_id)
|
|
161
145
|
mock_lab_manager.assert_any_call(api_key=self.from_api_key, base_url=self.from_instance)
|
|
162
146
|
mock_lab_manager.assert_any_call(api_key=self.to_api_key, base_url=self.to_instance)
|
|
163
147
|
|
|
164
148
|
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
165
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
166
149
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
167
|
-
def test_agent_migration_success(self, mock_lab_manager,
|
|
150
|
+
def test_agent_migration_success(self, mock_lab_manager, mock_stdout):
|
|
168
151
|
mock_source = Mock()
|
|
169
152
|
mock_destination = Mock()
|
|
170
153
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
@@ -178,8 +161,6 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
178
161
|
from_instance=self.from_instance,
|
|
179
162
|
to_api_key=self.to_api_key,
|
|
180
163
|
to_instance=self.to_instance,
|
|
181
|
-
from_project_id=self.from_project_id,
|
|
182
|
-
to_project_id=self.to_project_id,
|
|
183
164
|
agent_id=self.agent_id
|
|
184
165
|
)
|
|
185
166
|
strategy.migrate()
|
|
@@ -188,63 +169,47 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
188
169
|
mock_destination.create_agent.assert_called_with(agent=mock_agent)
|
|
189
170
|
mock_stdout.assert_called_once()
|
|
190
171
|
self.assertIn("New agent detail:", mock_stdout.call_args[0][0])
|
|
191
|
-
mock_stderr.assert_not_called()
|
|
192
172
|
|
|
193
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
194
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
195
173
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
196
|
-
def
|
|
174
|
+
def test_agent_migration_error_not_agent(self, mock_lab_manager):
|
|
197
175
|
mock_source = Mock()
|
|
198
176
|
mock_destination = Mock()
|
|
199
177
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
200
178
|
|
|
201
|
-
mock_source.get_agent.
|
|
179
|
+
mock_source.get_agent.return_value = Mock(spec=[])
|
|
202
180
|
|
|
203
181
|
strategy = AgentMigrationStrategy(
|
|
204
182
|
from_api_key=self.from_api_key,
|
|
205
183
|
from_instance=self.from_instance,
|
|
206
184
|
to_api_key=self.to_api_key,
|
|
207
185
|
to_instance=self.to_instance,
|
|
208
|
-
from_project_id=self.from_project_id,
|
|
209
|
-
to_project_id=self.to_project_id,
|
|
210
186
|
agent_id=self.agent_id
|
|
211
187
|
)
|
|
212
|
-
strategy.migrate()
|
|
213
188
|
|
|
214
|
-
|
|
189
|
+
with self.assertRaises(ValueError) as context:
|
|
190
|
+
strategy.migrate()
|
|
191
|
+
self.assertIn("Agent migration failed", str(context.exception))
|
|
215
192
|
mock_destination.create_agent.assert_not_called()
|
|
216
|
-
mock_stderr.assert_called_once()
|
|
217
|
-
self.assertIn("Agent migration failed:", mock_stderr.call_args[0][0])
|
|
218
|
-
mock_stdout.assert_called_once()
|
|
219
|
-
self.assertIn("New agent detail:", mock_stdout.call_args[0][0])
|
|
220
193
|
|
|
221
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
222
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
223
194
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
224
|
-
def
|
|
195
|
+
def test_agent_migration_error_exception(self, mock_lab_manager):
|
|
225
196
|
mock_source = Mock()
|
|
226
197
|
mock_destination = Mock()
|
|
227
198
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
228
199
|
|
|
229
|
-
|
|
230
|
-
mock_source.get_agent.return_value = mock_error_response
|
|
200
|
+
mock_source.get_agent.side_effect = Exception("API Error")
|
|
231
201
|
|
|
232
202
|
strategy = AgentMigrationStrategy(
|
|
233
203
|
from_api_key=self.from_api_key,
|
|
234
204
|
from_instance=self.from_instance,
|
|
235
205
|
to_api_key=self.to_api_key,
|
|
236
206
|
to_instance=self.to_instance,
|
|
237
|
-
from_project_id=self.from_project_id,
|
|
238
|
-
to_project_id=self.to_project_id,
|
|
239
207
|
agent_id=self.agent_id
|
|
240
208
|
)
|
|
241
|
-
strategy.migrate()
|
|
242
209
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
mock_stdout.assert_called_once()
|
|
247
|
-
self.assertIn("New agent detail:", mock_stdout.call_args[0][0])
|
|
210
|
+
with self.assertRaises(ValueError) as context:
|
|
211
|
+
strategy.migrate()
|
|
212
|
+
self.assertIn("Agent migration failed", str(context.exception))
|
|
248
213
|
|
|
249
214
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
250
215
|
def test_tool_migration_strategy_init(self, mock_lab_manager):
|
|
@@ -253,24 +218,19 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
253
218
|
from_instance=self.from_instance,
|
|
254
219
|
to_api_key=self.to_api_key,
|
|
255
220
|
to_instance=self.to_instance,
|
|
256
|
-
from_project_id=self.from_project_id,
|
|
257
|
-
to_project_id=self.to_project_id,
|
|
258
221
|
tool_id=self.tool_id
|
|
259
222
|
)
|
|
260
223
|
self.assertEqual(strategy.from_api_key, self.from_api_key)
|
|
261
224
|
self.assertEqual(strategy.from_instance, self.from_instance)
|
|
262
225
|
self.assertEqual(strategy.to_api_key, self.to_api_key)
|
|
263
226
|
self.assertEqual(strategy.to_instance, self.to_instance)
|
|
264
|
-
self.assertEqual(strategy.from_project_id, self.from_project_id)
|
|
265
|
-
self.assertEqual(strategy.to_project_id, self.to_project_id)
|
|
266
227
|
self.assertEqual(strategy.tool_id, self.tool_id)
|
|
267
228
|
mock_lab_manager.assert_any_call(api_key=self.from_api_key, base_url=self.from_instance)
|
|
268
229
|
mock_lab_manager.assert_any_call(api_key=self.to_api_key, base_url=self.to_instance)
|
|
269
230
|
|
|
270
231
|
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
271
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
272
232
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
273
|
-
def test_tool_migration_success(self, mock_lab_manager,
|
|
233
|
+
def test_tool_migration_success(self, mock_lab_manager, mock_stdout):
|
|
274
234
|
mock_source = Mock()
|
|
275
235
|
mock_destination = Mock()
|
|
276
236
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
@@ -284,8 +244,6 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
284
244
|
from_instance=self.from_instance,
|
|
285
245
|
to_api_key=self.to_api_key,
|
|
286
246
|
to_instance=self.to_instance,
|
|
287
|
-
from_project_id=self.from_project_id,
|
|
288
|
-
to_project_id=self.to_project_id,
|
|
289
247
|
tool_id=self.tool_id
|
|
290
248
|
)
|
|
291
249
|
strategy.migrate()
|
|
@@ -294,63 +252,27 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
294
252
|
mock_destination.create_tool.assert_called_with(tool=mock_tool)
|
|
295
253
|
mock_stdout.assert_called_once()
|
|
296
254
|
self.assertIn("New tool detail:", mock_stdout.call_args[0][0])
|
|
297
|
-
mock_stderr.assert_not_called()
|
|
298
|
-
|
|
299
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
300
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
301
|
-
@patch('pygeai.migration.strategies.AILabManager')
|
|
302
|
-
def test_tool_migration_error(self, mock_lab_manager, mock_stderr, mock_stdout):
|
|
303
|
-
mock_source = Mock()
|
|
304
|
-
mock_destination = Mock()
|
|
305
|
-
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
306
|
-
|
|
307
|
-
mock_source.get_tool.side_effect = ValueError("Unable to retrieve requested tool.")
|
|
308
|
-
|
|
309
|
-
strategy = ToolMigrationStrategy(
|
|
310
|
-
from_api_key=self.from_api_key,
|
|
311
|
-
from_instance=self.from_instance,
|
|
312
|
-
to_api_key=self.to_api_key,
|
|
313
|
-
to_instance=self.to_instance,
|
|
314
|
-
from_project_id=self.from_project_id,
|
|
315
|
-
to_project_id=self.to_project_id,
|
|
316
|
-
tool_id=self.tool_id
|
|
317
|
-
)
|
|
318
|
-
strategy.migrate()
|
|
319
|
-
|
|
320
|
-
mock_source.get_tool.assert_called_with(tool_id=self.tool_id)
|
|
321
|
-
mock_destination.create_tool.assert_not_called()
|
|
322
|
-
mock_stderr.assert_called_once()
|
|
323
|
-
self.assertIn("Tool migration failed:", mock_stderr.call_args[0][0])
|
|
324
|
-
mock_stdout.assert_called_once()
|
|
325
|
-
self.assertIn("New tool detail:", mock_stdout.call_args[0][0])
|
|
326
255
|
|
|
327
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
328
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
329
256
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
330
|
-
def
|
|
257
|
+
def test_tool_migration_error_not_tool(self, mock_lab_manager):
|
|
331
258
|
mock_source = Mock()
|
|
332
259
|
mock_destination = Mock()
|
|
333
260
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
334
261
|
|
|
335
|
-
|
|
336
|
-
mock_source.get_tool.return_value = mock_error_response
|
|
262
|
+
mock_source.get_tool.return_value = Mock(spec=[])
|
|
337
263
|
|
|
338
264
|
strategy = ToolMigrationStrategy(
|
|
339
265
|
from_api_key=self.from_api_key,
|
|
340
266
|
from_instance=self.from_instance,
|
|
341
267
|
to_api_key=self.to_api_key,
|
|
342
268
|
to_instance=self.to_instance,
|
|
343
|
-
from_project_id=self.from_project_id,
|
|
344
|
-
to_project_id=self.to_project_id,
|
|
345
269
|
tool_id=self.tool_id
|
|
346
270
|
)
|
|
347
|
-
strategy.migrate()
|
|
348
271
|
|
|
349
|
-
|
|
272
|
+
with self.assertRaises(ValueError) as context:
|
|
273
|
+
strategy.migrate()
|
|
274
|
+
self.assertIn("Tool migration failed", str(context.exception))
|
|
350
275
|
mock_destination.create_tool.assert_not_called()
|
|
351
|
-
mock_stderr.assert_called_once()
|
|
352
|
-
mock_stdout.assert_called_once()
|
|
353
|
-
self.assertIn("New tool detail:", mock_stdout.call_args[0][0])
|
|
354
276
|
|
|
355
277
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
356
278
|
def test_process_migration_strategy_init(self, mock_lab_manager):
|
|
@@ -359,24 +281,19 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
359
281
|
from_instance=self.from_instance,
|
|
360
282
|
to_api_key=self.to_api_key,
|
|
361
283
|
to_instance=self.to_instance,
|
|
362
|
-
from_project_id=self.from_project_id,
|
|
363
|
-
to_project_id=self.to_project_id,
|
|
364
284
|
process_id=self.process_id
|
|
365
285
|
)
|
|
366
286
|
self.assertEqual(strategy.from_api_key, self.from_api_key)
|
|
367
287
|
self.assertEqual(strategy.from_instance, self.from_instance)
|
|
368
288
|
self.assertEqual(strategy.to_api_key, self.to_api_key)
|
|
369
289
|
self.assertEqual(strategy.to_instance, self.to_instance)
|
|
370
|
-
self.assertEqual(strategy.from_project_id, self.from_project_id)
|
|
371
|
-
self.assertEqual(strategy.to_project_id, self.to_project_id)
|
|
372
290
|
self.assertEqual(strategy.process_id, self.process_id)
|
|
373
291
|
mock_lab_manager.assert_any_call(api_key=self.from_api_key, base_url=self.from_instance)
|
|
374
292
|
mock_lab_manager.assert_any_call(api_key=self.to_api_key, base_url=self.to_instance)
|
|
375
293
|
|
|
376
294
|
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
377
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
378
295
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
379
|
-
def test_process_migration_success(self, mock_lab_manager,
|
|
296
|
+
def test_process_migration_success(self, mock_lab_manager, mock_stdout):
|
|
380
297
|
mock_source = Mock()
|
|
381
298
|
mock_destination = Mock()
|
|
382
299
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
@@ -390,8 +307,6 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
390
307
|
from_instance=self.from_instance,
|
|
391
308
|
to_api_key=self.to_api_key,
|
|
392
309
|
to_instance=self.to_instance,
|
|
393
|
-
from_project_id=self.from_project_id,
|
|
394
|
-
to_project_id=self.to_project_id,
|
|
395
310
|
process_id=self.process_id
|
|
396
311
|
)
|
|
397
312
|
strategy.migrate()
|
|
@@ -400,63 +315,27 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
400
315
|
mock_destination.create_process.assert_called_with(process=mock_process)
|
|
401
316
|
mock_stdout.assert_called_once()
|
|
402
317
|
self.assertIn("New process detail:", mock_stdout.call_args[0][0])
|
|
403
|
-
mock_stderr.assert_not_called()
|
|
404
318
|
|
|
405
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
406
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
407
319
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
408
|
-
def
|
|
320
|
+
def test_process_migration_error_not_process(self, mock_lab_manager):
|
|
409
321
|
mock_source = Mock()
|
|
410
322
|
mock_destination = Mock()
|
|
411
323
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
412
324
|
|
|
413
|
-
mock_source.get_process.
|
|
325
|
+
mock_source.get_process.return_value = Mock(spec=[])
|
|
414
326
|
|
|
415
327
|
strategy = AgenticProcessMigrationStrategy(
|
|
416
328
|
from_api_key=self.from_api_key,
|
|
417
329
|
from_instance=self.from_instance,
|
|
418
330
|
to_api_key=self.to_api_key,
|
|
419
331
|
to_instance=self.to_instance,
|
|
420
|
-
from_project_id=self.from_project_id,
|
|
421
|
-
to_project_id=self.to_project_id,
|
|
422
332
|
process_id=self.process_id
|
|
423
333
|
)
|
|
424
|
-
strategy.migrate()
|
|
425
|
-
|
|
426
|
-
mock_source.get_process.assert_called_with(process_id=self.process_id)
|
|
427
|
-
mock_destination.create_process.assert_not_called()
|
|
428
|
-
mock_stderr.assert_called_once()
|
|
429
|
-
self.assertIn("Process migration failed:", mock_stderr.call_args[0][0])
|
|
430
|
-
mock_stdout.assert_called_once()
|
|
431
|
-
self.assertIn("New process detail:", mock_stdout.call_args[0][0])
|
|
432
|
-
|
|
433
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
434
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
435
|
-
@patch('pygeai.migration.strategies.AILabManager')
|
|
436
|
-
def test_process_migration_error_response(self, mock_lab_manager, mock_stderr, mock_stdout):
|
|
437
|
-
mock_source = Mock()
|
|
438
|
-
mock_destination = Mock()
|
|
439
|
-
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
440
|
-
|
|
441
|
-
mock_error_response = ErrorListResponse(errors=[Error(id=1, description="Process error")])
|
|
442
|
-
mock_source.get_process.return_value = mock_error_response
|
|
443
|
-
|
|
444
|
-
strategy = AgenticProcessMigrationStrategy(
|
|
445
|
-
from_api_key=self.from_api_key,
|
|
446
|
-
from_instance=self.from_instance,
|
|
447
|
-
to_api_key=self.to_api_key,
|
|
448
|
-
to_instance=self.to_instance,
|
|
449
|
-
from_project_id=self.from_project_id,
|
|
450
|
-
to_project_id=self.to_project_id,
|
|
451
|
-
process_id=self.process_id
|
|
452
|
-
)
|
|
453
|
-
strategy.migrate()
|
|
454
334
|
|
|
455
|
-
|
|
335
|
+
with self.assertRaises(ValueError) as context:
|
|
336
|
+
strategy.migrate()
|
|
337
|
+
self.assertIn("Process migration failed", str(context.exception))
|
|
456
338
|
mock_destination.create_process.assert_not_called()
|
|
457
|
-
mock_stdout.assert_called_once()
|
|
458
|
-
mock_stderr.assert_called_once()
|
|
459
|
-
self.assertIn("Process migration failed:", mock_stderr.call_args[0][0])
|
|
460
339
|
|
|
461
340
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
462
341
|
def test_task_migration_strategy_init(self, mock_lab_manager):
|
|
@@ -465,24 +344,19 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
465
344
|
from_instance=self.from_instance,
|
|
466
345
|
to_api_key=self.to_api_key,
|
|
467
346
|
to_instance=self.to_instance,
|
|
468
|
-
from_project_id=self.from_project_id,
|
|
469
|
-
to_project_id=self.to_project_id,
|
|
470
347
|
task_id=self.task_id
|
|
471
348
|
)
|
|
472
349
|
self.assertEqual(strategy.from_api_key, self.from_api_key)
|
|
473
350
|
self.assertEqual(strategy.from_instance, self.from_instance)
|
|
474
351
|
self.assertEqual(strategy.to_api_key, self.to_api_key)
|
|
475
352
|
self.assertEqual(strategy.to_instance, self.to_instance)
|
|
476
|
-
self.assertEqual(strategy.from_project_id, self.from_project_id)
|
|
477
|
-
self.assertEqual(strategy.to_project_id, self.to_project_id)
|
|
478
353
|
self.assertEqual(strategy.task_id, self.task_id)
|
|
479
354
|
mock_lab_manager.assert_any_call(api_key=self.from_api_key, base_url=self.from_instance)
|
|
480
355
|
mock_lab_manager.assert_any_call(api_key=self.to_api_key, base_url=self.to_instance)
|
|
481
356
|
|
|
482
357
|
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
483
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
484
358
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
485
|
-
def test_task_migration_success(self, mock_lab_manager,
|
|
359
|
+
def test_task_migration_success(self, mock_lab_manager, mock_stdout):
|
|
486
360
|
mock_source = Mock()
|
|
487
361
|
mock_destination = Mock()
|
|
488
362
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
@@ -496,8 +370,6 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
496
370
|
from_instance=self.from_instance,
|
|
497
371
|
to_api_key=self.to_api_key,
|
|
498
372
|
to_instance=self.to_instance,
|
|
499
|
-
from_project_id=self.from_project_id,
|
|
500
|
-
to_project_id=self.to_project_id,
|
|
501
373
|
task_id=self.task_id
|
|
502
374
|
)
|
|
503
375
|
strategy.migrate()
|
|
@@ -506,73 +378,28 @@ class TestMigrationStrategies(unittest.TestCase):
|
|
|
506
378
|
mock_destination.create_task.assert_called_with(task=mock_task)
|
|
507
379
|
mock_stdout.assert_called_once()
|
|
508
380
|
self.assertIn("New task detail:", mock_stdout.call_args[0][0])
|
|
509
|
-
mock_stderr.assert_not_called()
|
|
510
381
|
|
|
511
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
512
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
513
382
|
@patch('pygeai.migration.strategies.AILabManager')
|
|
514
|
-
def
|
|
383
|
+
def test_task_migration_error_not_task(self, mock_lab_manager):
|
|
515
384
|
mock_source = Mock()
|
|
516
385
|
mock_destination = Mock()
|
|
517
386
|
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
518
387
|
|
|
519
|
-
mock_source.get_task.
|
|
388
|
+
mock_source.get_task.return_value = Mock(spec=[])
|
|
520
389
|
|
|
521
390
|
strategy = TaskMigrationStrategy(
|
|
522
391
|
from_api_key=self.from_api_key,
|
|
523
392
|
from_instance=self.from_instance,
|
|
524
393
|
to_api_key=self.to_api_key,
|
|
525
394
|
to_instance=self.to_instance,
|
|
526
|
-
from_project_id=self.from_project_id,
|
|
527
|
-
to_project_id=self.to_project_id,
|
|
528
395
|
task_id=self.task_id
|
|
529
396
|
)
|
|
530
|
-
strategy.migrate()
|
|
531
397
|
|
|
532
|
-
|
|
398
|
+
with self.assertRaises(ValueError) as context:
|
|
399
|
+
strategy.migrate()
|
|
400
|
+
self.assertIn("Task migration failed", str(context.exception))
|
|
533
401
|
mock_destination.create_task.assert_not_called()
|
|
534
|
-
mock_stderr.assert_called_once()
|
|
535
|
-
self.assertIn("Task migration failed:", mock_stderr.call_args[0][0])
|
|
536
|
-
mock_stdout.assert_called_once()
|
|
537
|
-
self.assertIn("New task detail:", mock_stdout.call_args[0][0])
|
|
538
|
-
|
|
539
|
-
@patch('pygeai.core.utils.console.Console.write_stdout')
|
|
540
|
-
@patch('pygeai.core.utils.console.Console.write_stderr')
|
|
541
|
-
@patch('pygeai.migration.strategies.AILabManager')
|
|
542
|
-
def test_task_migration_error_response(self, mock_lab_manager, mock_stderr, mock_stdout):
|
|
543
|
-
mock_source = Mock()
|
|
544
|
-
mock_destination = Mock()
|
|
545
|
-
mock_lab_manager.side_effect = [mock_source, mock_destination]
|
|
546
402
|
|
|
547
|
-
mock_error_response = ErrorListResponse(errors=[Error(id=1, description="Task error")])
|
|
548
|
-
mock_source.get_task.return_value = mock_error_response
|
|
549
403
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
from_instance=self.from_instance,
|
|
553
|
-
to_api_key=self.to_api_key,
|
|
554
|
-
to_instance=self.to_instance,
|
|
555
|
-
from_project_id=self.from_project_id,
|
|
556
|
-
to_project_id=self.to_project_id,
|
|
557
|
-
task_id=self.task_id
|
|
558
|
-
)
|
|
559
|
-
strategy.migrate()
|
|
560
|
-
|
|
561
|
-
mock_source.get_task.assert_called_with(task_id=self.task_id)
|
|
562
|
-
mock_destination.create_task.assert_not_called()
|
|
563
|
-
mock_stderr.assert_called_once()
|
|
564
|
-
mock_stdout.assert_called_once()
|
|
565
|
-
self.assertIn("New task detail:", mock_stdout.call_args[0][0])
|
|
566
|
-
|
|
567
|
-
@patch('pygeai.migration.strategies.ProjectMigrationStrategy')
|
|
568
|
-
def test_migration_strategy_default_to_api_key(self, mock_strategy):
|
|
569
|
-
strategy = ProjectMigrationStrategy(
|
|
570
|
-
from_api_key=self.from_api_key,
|
|
571
|
-
from_instance=self.from_instance,
|
|
572
|
-
to_api_key=None,
|
|
573
|
-
to_instance=self.to_instance,
|
|
574
|
-
from_project_id=self.from_project_id,
|
|
575
|
-
to_project_name=self.to_project_name,
|
|
576
|
-
admin_email=self.admin_email
|
|
577
|
-
)
|
|
578
|
-
self.assertEqual(strategy.to_api_key, self.from_api_key)
|
|
404
|
+
if __name__ == '__main__':
|
|
405
|
+
unittest.main()
|