pygeai 0.1.51b3__py3-none-any.whl → 0.6.0b15__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.
Potentially problematic release.
This version of pygeai might be problematic. Click here for more details.
- pygeai/__init__.py +9 -1
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- 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/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- 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 +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -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 +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -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.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +18 -45
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +8 -12
- pygeai/assistant/managers.py +195 -157
- pygeai/assistant/mappers.py +4 -2
- pygeai/assistant/rag/clients.py +27 -67
- pygeai/assistant/rag/mappers.py +12 -6
- pygeai/assistant/rag/models.py +301 -159
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +308 -37
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +2 -8
- pygeai/chat/managers.py +9 -6
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +7 -10
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +9 -9
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +71 -9
- pygeai/cli/commands/chat.py +676 -19
- pygeai/cli/commands/common.py +28 -24
- pygeai/cli/commands/configuration.py +66 -13
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +58 -11
- pygeai/cli/commands/evaluation.py +38 -38
- pygeai/cli/commands/feedback.py +3 -4
- pygeai/cli/commands/files.py +7 -8
- pygeai/cli/commands/gam.py +85 -10
- pygeai/cli/commands/lab/ai_lab.py +340 -484
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +6 -7
- pygeai/cli/commands/migrate.py +1064 -436
- pygeai/cli/commands/organization.py +516 -11
- pygeai/cli/commands/rag.py +13 -14
- pygeai/cli/commands/rerank.py +3 -5
- pygeai/cli/commands/secrets.py +8 -9
- pygeai/cli/commands/usage_limits.py +18 -20
- pygeai/cli/commands/validators.py +144 -1
- pygeai/cli/commands/version.py +4 -5
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +170 -31
- pygeai/cli/geai_proxy.py +86 -25
- pygeai/cli/install_man.py +93 -22
- pygeai/cli/parsers.py +75 -25
- pygeai/cli/texts/help.py +265 -28
- pygeai/core/base/clients.py +53 -12
- pygeai/core/base/mappers.py +11 -2
- pygeai/core/base/session.py +95 -11
- pygeai/core/common/config.py +78 -14
- pygeai/core/common/exceptions.py +96 -6
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +23 -5
- pygeai/core/embeddings/managers.py +9 -4
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +8 -3
- pygeai/core/files/clients.py +23 -24
- pygeai/core/files/managers.py +121 -30
- pygeai/core/files/responses.py +4 -3
- pygeai/core/handlers.py +10 -1
- pygeai/core/llm/clients.py +22 -29
- pygeai/core/models.py +127 -11
- pygeai/core/plugins/clients.py +6 -6
- pygeai/core/rerank/clients.py +9 -3
- pygeai/core/rerank/managers.py +22 -5
- pygeai/core/secrets/clients.py +16 -37
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +159 -49
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +854 -14
- pygeai/evaluation/clients.py +7 -4
- 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 +50 -28
- pygeai/gam/endpoints.py +2 -1
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -90
- pygeai/lab/agents/clients.py +203 -162
- pygeai/lab/agents/endpoints.py +4 -0
- pygeai/lab/agents/mappers.py +57 -7
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +571 -541
- pygeai/lab/models.py +108 -19
- pygeai/lab/processes/clients.py +332 -340
- pygeai/lab/processes/mappers.py +3 -3
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/clients.py +67 -63
- pygeai/lab/strategies/mappers.py +1 -1
- pygeai/lab/tools/clients.py +85 -118
- pygeai/lab/tools/endpoints.py +4 -0
- pygeai/lab/tools/mappers.py +5 -5
- pygeai/man/man1/geai-proxy.1 +116 -0
- pygeai/man/man1/geai.1 +2580 -66
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +468 -146
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +245 -50
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/clients.py +34 -32
- pygeai/organization/limits/managers.py +108 -49
- pygeai/organization/managers.py +347 -53
- pygeai/organization/mappers.py +102 -2
- pygeai/organization/responses.py +58 -1
- pygeai/proxy/clients.py +6 -3
- pygeai/proxy/config.py +14 -1
- pygeai/proxy/managers.py +61 -33
- pygeai/proxy/servers.py +196 -51
- pygeai/proxy/tool.py +33 -16
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -82
- pygeai/tests/assistants/test_managers.py +191 -57
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- 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/base/data/models.py +7 -0
- pygeai/tests/core/base/test_mappers.py +43 -11
- pygeai/tests/core/base/test_models.py +3 -1
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +124 -78
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +61 -39
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_models.py +500 -3
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +298 -56
- pygeai/tests/organization/test_clients.py +600 -30
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -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_complete_example.py +67 -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_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -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/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -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/files/delete_file.py +1 -4
- pygeai/tests/snippets/files/get_file_content.py +2 -4
- pygeai/tests/snippets/files/get_file_data.py +1 -4
- pygeai/tests/snippets/files/get_file_list.py +1 -6
- pygeai/tests/snippets/files/upload_file.py +1 -5
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +25 -23
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +23 -23
- pygeai/tests/snippets/lab/agents/create_agent.py +5 -8
- pygeai/tests/snippets/lab/agents/create_agent_2.py +1 -5
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +1 -5
- pygeai/tests/snippets/lab/agents/get_agent.py +2 -11
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +2 -7
- pygeai/tests/snippets/lab/agents/list_agents.py +4 -7
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +2 -6
- pygeai/tests/snippets/lab/agents/update_agent.py +1 -5
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/create_process.py +3 -5
- pygeai/tests/snippets/lab/processes/create_task.py +3 -5
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +10 -19
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +2 -5
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +10 -16
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +13 -20
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +5 -7
- pygeai/tests/snippets/lab/processes/list_processes.py +5 -7
- pygeai/tests/snippets/lab/runner_1.py +1 -1
- pygeai/tests/snippets/lab/samples/summarize_files.py +3 -3
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +3 -6
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/tools/create_tool.py +4 -10
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +2 -6
- pygeai/tests/snippets/lab/tools/get_parameter.py +5 -7
- pygeai/tests/snippets/lab/tools/get_tool.py +5 -7
- pygeai/tests/snippets/lab/tools/list_tools.py +3 -7
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +3 -5
- pygeai/tests/snippets/lab/tools/set_parameters.py +4 -9
- pygeai/tests/snippets/lab/tools/update_tool.py +4 -8
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/{file_summarizer_example.py → use_cases/file_summarizer_example.py} +3 -3
- pygeai/tests/snippets/lab/{file_summarizer_example_2.py → use_cases/file_summarizer_example_2.py} +12 -12
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -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/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -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/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/entry_points.txt +2 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/licenses/LICENSE +13 -1
- pygeai-0.6.0b15.dist-info/top_level.txt +1 -0
- docs/geai-proxy/README.md +0 -145
- docs/source/conf.py +0 -45
- pygeai/tests/core/test_managers.py +0 -233
- pygeai-0.1.51b3.dist-info/METADATA +0 -130
- pygeai-0.1.51b3.dist-info/RECORD +0 -324
- pygeai-0.1.51b3.dist-info/top_level.txt +0 -3
- scripts/bump_beta_version.py +0 -56
- {scripts → pygeai/analytics}/__init__.py +0 -0
- /pygeai/tests/snippets/lab/{c_code_fixer_agent_flow.py → use_cases/c_code_fixer_agent_flow.py} +0 -0
pygeai/migration/tools.py
CHANGED
|
@@ -1,13 +1,180 @@
|
|
|
1
|
+
from typing import List, Dict, Optional
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
|
|
4
|
+
from pygeai import logger
|
|
1
5
|
from pygeai.migration.strategies import MigrationStrategy
|
|
6
|
+
from pygeai.core.utils.console import Console
|
|
2
7
|
|
|
3
8
|
|
|
4
9
|
class MigrationTool:
|
|
10
|
+
"""
|
|
11
|
+
Orchestrates migration operations using configurable strategies.
|
|
12
|
+
|
|
13
|
+
This class provides a flexible way to execute migrations with support for:
|
|
14
|
+
- Batch migrations of multiple resources
|
|
15
|
+
- Dependency ordering
|
|
16
|
+
- Progress tracking
|
|
17
|
+
- Dry-run mode
|
|
18
|
+
- Rollback capabilities
|
|
19
|
+
"""
|
|
5
20
|
|
|
6
21
|
def __init__(self, strategy: MigrationStrategy):
|
|
7
|
-
self.
|
|
22
|
+
self._strategy = strategy
|
|
8
23
|
|
|
9
24
|
def set_strategy(self, strategy: MigrationStrategy):
|
|
10
|
-
|
|
25
|
+
"""
|
|
26
|
+
Update the migration strategy.
|
|
27
|
+
|
|
28
|
+
:param strategy: The new migration strategy to use
|
|
29
|
+
"""
|
|
30
|
+
self._strategy = strategy
|
|
11
31
|
|
|
12
32
|
def run_migration(self):
|
|
13
|
-
|
|
33
|
+
"""
|
|
34
|
+
Execute the configured migration strategy.
|
|
35
|
+
|
|
36
|
+
:return: The result from the migration strategy (if any)
|
|
37
|
+
:raises ValueError: If migration fails
|
|
38
|
+
"""
|
|
39
|
+
logger.info(f"Starting migration with strategy: {self._strategy.__class__.__name__}")
|
|
40
|
+
return self._strategy.migrate()
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class MigrationPlan:
|
|
45
|
+
"""
|
|
46
|
+
Defines a migration plan with multiple strategies and execution order.
|
|
47
|
+
|
|
48
|
+
:param strategies: List of migration strategies to execute
|
|
49
|
+
:param dependencies: Map of strategy index to list of dependent strategy indices
|
|
50
|
+
:param dry_run: If True, validate without executing migrations
|
|
51
|
+
:param stop_on_error: If True, stop execution on first error
|
|
52
|
+
"""
|
|
53
|
+
strategies: List[MigrationStrategy]
|
|
54
|
+
dependencies: Dict[int, List[int]] = field(default_factory=dict)
|
|
55
|
+
dry_run: bool = False
|
|
56
|
+
stop_on_error: bool = True
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class MigrationOrchestrator:
|
|
60
|
+
"""
|
|
61
|
+
Advanced orchestration for complex migration scenarios.
|
|
62
|
+
|
|
63
|
+
Handles batch migrations, dependency resolution, progress tracking,
|
|
64
|
+
and rollback on failure.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
def __init__(self, plan: MigrationPlan):
|
|
68
|
+
self._plan = plan
|
|
69
|
+
self._completed: List[int] = []
|
|
70
|
+
self._failed: List[int] = []
|
|
71
|
+
|
|
72
|
+
def execute(self) -> Dict[str, any]:
|
|
73
|
+
"""
|
|
74
|
+
Execute the migration plan respecting dependencies.
|
|
75
|
+
|
|
76
|
+
:return: Summary of migration results
|
|
77
|
+
:raises ValueError: If migration fails and stop_on_error is True
|
|
78
|
+
"""
|
|
79
|
+
logger.info(f"Executing migration plan with {len(self._plan.strategies)} strategies")
|
|
80
|
+
|
|
81
|
+
if self._plan.dry_run:
|
|
82
|
+
return self._validate_plan()
|
|
83
|
+
|
|
84
|
+
execution_order = self._resolve_dependencies()
|
|
85
|
+
total_strategies = len(execution_order)
|
|
86
|
+
|
|
87
|
+
Console.write_stdout("")
|
|
88
|
+
Console.write_stdout("=" * 60)
|
|
89
|
+
Console.write_stdout(f"Migration Progress: 0/{total_strategies} completed")
|
|
90
|
+
Console.write_stdout("=" * 60)
|
|
91
|
+
|
|
92
|
+
for position, idx in enumerate(execution_order, 1):
|
|
93
|
+
strategy = self._plan.strategies[idx]
|
|
94
|
+
display_info = strategy.get_display_info()
|
|
95
|
+
|
|
96
|
+
Console.write_stdout(f"\n[{position}/{total_strategies}] Migrating {display_info}...")
|
|
97
|
+
|
|
98
|
+
try:
|
|
99
|
+
logger.info(f"Executing strategy {idx + 1}/{len(self._plan.strategies)}: {strategy.__class__.__name__}")
|
|
100
|
+
strategy.migrate()
|
|
101
|
+
self._completed.append(idx)
|
|
102
|
+
Console.write_stdout(f"✓ Successfully migrated {display_info}")
|
|
103
|
+
except Exception as e:
|
|
104
|
+
logger.error(f"Strategy {idx} failed: {e}")
|
|
105
|
+
self._failed.append(idx)
|
|
106
|
+
Console.write_stdout(f"✗ Failed to migrate {display_info}: {e}")
|
|
107
|
+
if self._plan.stop_on_error:
|
|
108
|
+
raise ValueError(f"Migration failed at strategy {idx}: {e}") from e
|
|
109
|
+
|
|
110
|
+
Console.write_stdout("")
|
|
111
|
+
Console.write_stdout("=" * 60)
|
|
112
|
+
Console.write_stdout(f"Migration Complete: {len(self._completed)}/{total_strategies} successful")
|
|
113
|
+
Console.write_stdout("=" * 60)
|
|
114
|
+
|
|
115
|
+
return self._generate_summary()
|
|
116
|
+
|
|
117
|
+
def _resolve_dependencies(self) -> List[int]:
|
|
118
|
+
"""
|
|
119
|
+
Resolve strategy execution order based on dependencies.
|
|
120
|
+
|
|
121
|
+
:return: Ordered list of strategy indices
|
|
122
|
+
:raises ValueError: If circular dependencies detected
|
|
123
|
+
"""
|
|
124
|
+
visited = set()
|
|
125
|
+
order = []
|
|
126
|
+
|
|
127
|
+
def visit(idx: int, path: set):
|
|
128
|
+
if idx in path:
|
|
129
|
+
raise ValueError(f"Circular dependency detected at strategy {idx}")
|
|
130
|
+
if idx in visited:
|
|
131
|
+
return
|
|
132
|
+
|
|
133
|
+
path.add(idx)
|
|
134
|
+
for dep_idx in self._plan.dependencies.get(idx, []):
|
|
135
|
+
visit(dep_idx, path)
|
|
136
|
+
path.remove(idx)
|
|
137
|
+
|
|
138
|
+
visited.add(idx)
|
|
139
|
+
order.append(idx)
|
|
140
|
+
|
|
141
|
+
for idx in range(len(self._plan.strategies)):
|
|
142
|
+
visit(idx, set())
|
|
143
|
+
|
|
144
|
+
return order
|
|
145
|
+
|
|
146
|
+
def _validate_plan(self) -> Dict[str, any]:
|
|
147
|
+
"""
|
|
148
|
+
Validate the migration plan without executing.
|
|
149
|
+
|
|
150
|
+
:return: Validation results
|
|
151
|
+
"""
|
|
152
|
+
logger.info("Validating migration plan (dry-run mode)")
|
|
153
|
+
try:
|
|
154
|
+
execution_order = self._resolve_dependencies()
|
|
155
|
+
return {
|
|
156
|
+
"valid": True,
|
|
157
|
+
"execution_order": execution_order,
|
|
158
|
+
"total_strategies": len(self._plan.strategies)
|
|
159
|
+
}
|
|
160
|
+
except Exception as e:
|
|
161
|
+
logger.error(f"Validation failed: {e}")
|
|
162
|
+
return {
|
|
163
|
+
"valid": False,
|
|
164
|
+
"error": str(e)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
def _generate_summary(self) -> Dict[str, any]:
|
|
168
|
+
"""
|
|
169
|
+
Generate a summary of migration results.
|
|
170
|
+
|
|
171
|
+
:return: Summary dictionary with completed, failed, and pending migrations
|
|
172
|
+
"""
|
|
173
|
+
return {
|
|
174
|
+
"total": len(self._plan.strategies),
|
|
175
|
+
"completed": len(self._completed),
|
|
176
|
+
"failed": len(self._failed),
|
|
177
|
+
"success_rate": len(self._completed) / len(self._plan.strategies) if self._plan.strategies else 0,
|
|
178
|
+
"completed_indices": self._completed,
|
|
179
|
+
"failed_indices": self._failed
|
|
180
|
+
}
|
pygeai/organization/clients.py
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from json import JSONDecodeError
|
|
3
1
|
|
|
2
|
+
from pygeai import logger
|
|
3
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
4
4
|
from pygeai.organization.endpoints import GET_ASSISTANT_LIST_V1, GET_PROJECT_LIST_V1, GET_PROJECT_V1, \
|
|
5
|
-
CREATE_PROJECT_V1, UPDATE_PROJECT_V1, DELETE_PROJECT_V1, GET_PROJECT_TOKENS_V1, GET_REQUEST_DATA_V1
|
|
5
|
+
CREATE_PROJECT_V1, UPDATE_PROJECT_V1, DELETE_PROJECT_V1, GET_PROJECT_TOKENS_V1, GET_REQUEST_DATA_V1, \
|
|
6
|
+
GET_MEMBERSHIPS_V2, GET_PROJECT_MEMBERSHIPS_V2, GET_PROJECT_ROLES_V2, GET_PROJECT_MEMBERS_V2, \
|
|
7
|
+
GET_ORGANIZATION_MEMBERS_V2, ADD_PROJECT_MEMBER_V2, CREATE_ORGANIZATION_V2, GET_ORGANIZATION_LIST_V2, \
|
|
8
|
+
DELETE_ORGANIZATION_V2
|
|
6
9
|
from pygeai.core.base.clients import BaseClient
|
|
10
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
11
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
7
12
|
|
|
8
13
|
|
|
9
14
|
class OrganizationClient(BaseClient):
|
|
@@ -21,12 +26,8 @@ class OrganizationClient(BaseClient):
|
|
|
21
26
|
:return: AssistantListResponse - The API response containing the list of assistants and the project.
|
|
22
27
|
"""
|
|
23
28
|
response = self.api_service.get(endpoint=GET_ASSISTANT_LIST_V1, params={"detail": detail})
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
except JSONDecodeError as e:
|
|
27
|
-
result = response.text
|
|
28
|
-
|
|
29
|
-
return result
|
|
29
|
+
validate_status_code(response)
|
|
30
|
+
return parse_json_response(response, "get assistant list")
|
|
30
31
|
|
|
31
32
|
def get_project_list(
|
|
32
33
|
self,
|
|
@@ -57,12 +58,8 @@ class OrganizationClient(BaseClient):
|
|
|
57
58
|
"detail": detail
|
|
58
59
|
}
|
|
59
60
|
)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
except JSONDecodeError as e:
|
|
63
|
-
result = response.text
|
|
64
|
-
|
|
65
|
-
return result
|
|
61
|
+
validate_status_code(response)
|
|
62
|
+
return parse_json_response(response, "get project list")
|
|
66
63
|
|
|
67
64
|
def get_project_data(
|
|
68
65
|
self,
|
|
@@ -78,12 +75,8 @@ class OrganizationClient(BaseClient):
|
|
|
78
75
|
response = self.api_service.get(
|
|
79
76
|
endpoint=endpoint
|
|
80
77
|
)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
except JSONDecodeError as e:
|
|
84
|
-
result = response.text
|
|
85
|
-
|
|
86
|
-
return result
|
|
78
|
+
validate_status_code(response)
|
|
79
|
+
return parse_json_response(response, "get project data for ID", project_id=project_id)
|
|
87
80
|
|
|
88
81
|
def create_project(
|
|
89
82
|
self,
|
|
@@ -120,12 +113,8 @@ class OrganizationClient(BaseClient):
|
|
|
120
113
|
"description": description
|
|
121
114
|
}
|
|
122
115
|
)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
except JSONDecodeError as e:
|
|
126
|
-
result = response.text
|
|
127
|
-
|
|
128
|
-
return result
|
|
116
|
+
validate_status_code(response)
|
|
117
|
+
return parse_json_response(response, "create project with name", name=name)
|
|
129
118
|
|
|
130
119
|
def update_project(
|
|
131
120
|
self,
|
|
@@ -149,12 +138,8 @@ class OrganizationClient(BaseClient):
|
|
|
149
138
|
"description": description
|
|
150
139
|
}
|
|
151
140
|
)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
except JSONDecodeError as e:
|
|
155
|
-
result = response.text
|
|
156
|
-
|
|
157
|
-
return result
|
|
141
|
+
validate_status_code(response)
|
|
142
|
+
return parse_json_response(response, "update project with ID", project_id=project_id)
|
|
158
143
|
|
|
159
144
|
def delete_project(
|
|
160
145
|
self,
|
|
@@ -168,12 +153,8 @@ class OrganizationClient(BaseClient):
|
|
|
168
153
|
"""
|
|
169
154
|
endpoint = DELETE_PROJECT_V1.format(id=project_id)
|
|
170
155
|
response = self.api_service.delete(endpoint=endpoint)
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
except JSONDecodeError as e:
|
|
174
|
-
result = response.text
|
|
175
|
-
|
|
176
|
-
return result
|
|
156
|
+
validate_status_code(response)
|
|
157
|
+
return parse_json_response(response, "delete project with ID", project_id=project_id)
|
|
177
158
|
|
|
178
159
|
def get_project_tokens(
|
|
179
160
|
self,
|
|
@@ -187,12 +168,8 @@ class OrganizationClient(BaseClient):
|
|
|
187
168
|
"""
|
|
188
169
|
endpoint = GET_PROJECT_TOKENS_V1.format(id=project_id)
|
|
189
170
|
response = self.api_service.get(endpoint=endpoint)
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
except JSONDecodeError as e:
|
|
193
|
-
result = response.text
|
|
194
|
-
|
|
195
|
-
return result
|
|
171
|
+
validate_status_code(response)
|
|
172
|
+
return parse_json_response(response, "get tokens for project with ID", project_id=project_id)
|
|
196
173
|
|
|
197
174
|
def export_request_data(
|
|
198
175
|
self,
|
|
@@ -219,9 +196,227 @@ class OrganizationClient(BaseClient):
|
|
|
219
196
|
"count": count
|
|
220
197
|
}
|
|
221
198
|
)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
199
|
+
validate_status_code(response)
|
|
200
|
+
return parse_json_response(response, "export request data")
|
|
201
|
+
|
|
202
|
+
def get_memberships(
|
|
203
|
+
self,
|
|
204
|
+
email: str = None,
|
|
205
|
+
start_page: int = 1,
|
|
206
|
+
page_size: int = 20,
|
|
207
|
+
order_key: str = None,
|
|
208
|
+
order_direction: str = "desc",
|
|
209
|
+
role_types: str = None
|
|
210
|
+
) -> dict:
|
|
211
|
+
"""
|
|
212
|
+
Retrieves a list of Organizations and Projects a user belongs to with their Roles.
|
|
213
|
+
|
|
214
|
+
:param email: str - The email address of the user to search for (optional, case-insensitive).
|
|
215
|
+
:param start_page: int - The page number for pagination (default is 1).
|
|
216
|
+
:param page_size: int - The number of items per page (default is 20).
|
|
217
|
+
:param order_key: str - Field for sorting. Only 'organizationName' is supported (optional).
|
|
218
|
+
:param order_direction: str - Sort direction: 'asc' or 'desc' (default is 'desc').
|
|
219
|
+
:param role_types: str - Comma-separated list of role types: 'backend', 'frontend' (optional, case-insensitive).
|
|
220
|
+
:return: dict - The API response containing the list of organizations and projects with roles, in JSON format.
|
|
221
|
+
"""
|
|
222
|
+
params = {
|
|
223
|
+
"startPage": start_page,
|
|
224
|
+
"pageSize": page_size,
|
|
225
|
+
"orderDirection": order_direction
|
|
226
|
+
}
|
|
227
|
+
if email:
|
|
228
|
+
params["email"] = email
|
|
229
|
+
if order_key:
|
|
230
|
+
params["orderKey"] = order_key
|
|
231
|
+
if role_types:
|
|
232
|
+
params["roleTypes"] = role_types
|
|
233
|
+
|
|
234
|
+
response = self.api_service.get(endpoint=GET_MEMBERSHIPS_V2, params=params)
|
|
235
|
+
validate_status_code(response)
|
|
236
|
+
return parse_json_response(response, "get memberships")
|
|
237
|
+
|
|
238
|
+
def get_project_memberships(
|
|
239
|
+
self,
|
|
240
|
+
email: str = None,
|
|
241
|
+
start_page: int = 1,
|
|
242
|
+
page_size: int = 20,
|
|
243
|
+
order_key: str = None,
|
|
244
|
+
order_direction: str = "desc",
|
|
245
|
+
role_types: str = None
|
|
246
|
+
) -> dict:
|
|
247
|
+
"""
|
|
248
|
+
Retrieves a list of Projects and Roles for a user within a specific Organization.
|
|
249
|
+
|
|
250
|
+
:param email: str - The email address of the user to search for (optional, case-insensitive).
|
|
251
|
+
:param start_page: int - The page number for pagination (default is 1).
|
|
252
|
+
:param page_size: int - The number of items per page (default is 20).
|
|
253
|
+
:param order_key: str - Field for sorting. Only 'projectName' is supported (optional).
|
|
254
|
+
:param order_direction: str - Sort direction: 'asc' or 'desc' (default is 'desc').
|
|
255
|
+
:param role_types: str - Comma-separated list of role types: 'backend', 'frontend' (optional, case-insensitive).
|
|
256
|
+
:return: dict - The API response containing the list of projects with roles, in JSON format.
|
|
257
|
+
"""
|
|
258
|
+
params = {
|
|
259
|
+
"startPage": start_page,
|
|
260
|
+
"pageSize": page_size,
|
|
261
|
+
"orderDirection": order_direction
|
|
262
|
+
}
|
|
263
|
+
if email:
|
|
264
|
+
params["email"] = email
|
|
265
|
+
if order_key:
|
|
266
|
+
params["orderKey"] = order_key
|
|
267
|
+
if role_types:
|
|
268
|
+
params["roleTypes"] = role_types
|
|
269
|
+
|
|
270
|
+
response = self.api_service.get(endpoint=GET_PROJECT_MEMBERSHIPS_V2, params=params)
|
|
271
|
+
validate_status_code(response)
|
|
272
|
+
return parse_json_response(response, "get project memberships")
|
|
273
|
+
|
|
274
|
+
def get_project_roles(
|
|
275
|
+
self,
|
|
276
|
+
project_id: str
|
|
277
|
+
) -> dict:
|
|
278
|
+
"""
|
|
279
|
+
Retrieves all Roles supported by a specific Project.
|
|
280
|
+
|
|
281
|
+
:param project_id: str - The unique identifier (GUID) of the project (required).
|
|
282
|
+
:return: dict - The API response containing the list of roles for the project, in JSON format.
|
|
283
|
+
"""
|
|
284
|
+
response = self.api_service.get(endpoint=GET_PROJECT_ROLES_V2, params={"projectId": project_id})
|
|
285
|
+
validate_status_code(response)
|
|
286
|
+
return parse_json_response(response, "get project roles for project", project_id=project_id)
|
|
287
|
+
|
|
288
|
+
def get_project_members(
|
|
289
|
+
self,
|
|
290
|
+
project_id: str
|
|
291
|
+
) -> dict:
|
|
292
|
+
"""
|
|
293
|
+
Retrieves all members and their Roles for a specific Project.
|
|
294
|
+
|
|
295
|
+
:param project_id: str - The unique identifier (GUID) of the project (required).
|
|
296
|
+
:return: dict - The API response containing the list of members with their roles, in JSON format.
|
|
297
|
+
"""
|
|
298
|
+
response = self.api_service.get(endpoint=GET_PROJECT_MEMBERS_V2, params={"projectId": project_id})
|
|
299
|
+
validate_status_code(response)
|
|
300
|
+
return parse_json_response(response, "get project members for project", project_id=project_id)
|
|
301
|
+
|
|
302
|
+
def get_organization_members(
|
|
303
|
+
self,
|
|
304
|
+
organization_id: str
|
|
305
|
+
) -> dict:
|
|
306
|
+
"""
|
|
307
|
+
Retrieves all members and their Roles for a specific Organization.
|
|
308
|
+
|
|
309
|
+
:param organization_id: str - The unique identifier (GUID) of the organization (required).
|
|
310
|
+
:return: dict - The API response containing the list of members with their roles, in JSON format.
|
|
311
|
+
"""
|
|
312
|
+
response = self.api_service.get(endpoint=GET_ORGANIZATION_MEMBERS_V2, params={"organizationId": organization_id})
|
|
313
|
+
validate_status_code(response)
|
|
314
|
+
return parse_json_response(response, "get organization members for organization", organization_id=organization_id)
|
|
315
|
+
|
|
316
|
+
def add_project_member(
|
|
317
|
+
self,
|
|
318
|
+
project_id: str,
|
|
319
|
+
user_email: str,
|
|
320
|
+
roles: list
|
|
321
|
+
) -> dict:
|
|
322
|
+
"""
|
|
323
|
+
Adds a user to a project by sending an invitation with the specified roles.
|
|
324
|
+
|
|
325
|
+
:param project_id: str - The unique identifier (GUID) of the project (required). Will be sent as header.
|
|
326
|
+
:param user_email: str - The email address of the user to invite (required).
|
|
327
|
+
:param roles: list - A list of role names or GUIDs to assign to the user (required).
|
|
328
|
+
:return: dict - The API response confirming the invitation was sent, in JSON format.
|
|
329
|
+
"""
|
|
330
|
+
headers = {"project-id": project_id}
|
|
331
|
+
data = {
|
|
332
|
+
"userEmail": user_email,
|
|
333
|
+
"roles": roles
|
|
334
|
+
}
|
|
335
|
+
response = self.api_service.post(
|
|
336
|
+
endpoint=ADD_PROJECT_MEMBER_V2,
|
|
337
|
+
data=data,
|
|
338
|
+
headers=headers
|
|
339
|
+
)
|
|
340
|
+
validate_status_code(response)
|
|
341
|
+
return parse_json_response(response, "add project member", user_email=user_email)
|
|
342
|
+
|
|
343
|
+
def create_organization(
|
|
344
|
+
self,
|
|
345
|
+
name: str,
|
|
346
|
+
administrator_user_email: str
|
|
347
|
+
) -> dict:
|
|
348
|
+
"""
|
|
349
|
+
Creates a new organization with the provided details.
|
|
350
|
+
|
|
351
|
+
This endpoint requires an OAuth access token from the System Administrator role.
|
|
352
|
+
|
|
353
|
+
:param name: str - The name of the new organization (required).
|
|
354
|
+
:param administrator_user_email: str - The email address of the organization administrator (required).
|
|
355
|
+
:return: dict - The API response with details of the created organization in JSON format.
|
|
356
|
+
"""
|
|
357
|
+
response = self.api_service.post(
|
|
358
|
+
endpoint=CREATE_ORGANIZATION_V2,
|
|
359
|
+
data={
|
|
360
|
+
"name": name,
|
|
361
|
+
"administratorUserEmail": administrator_user_email
|
|
362
|
+
}
|
|
363
|
+
)
|
|
364
|
+
validate_status_code(response)
|
|
365
|
+
return parse_json_response(response, "create organization with name", name=name)
|
|
366
|
+
|
|
367
|
+
def get_organization_list(
|
|
368
|
+
self,
|
|
369
|
+
start_page: int = None,
|
|
370
|
+
page_size: int = None,
|
|
371
|
+
order_key: str = None,
|
|
372
|
+
order_direction: str = "desc",
|
|
373
|
+
filter_key: str = None,
|
|
374
|
+
filter_value: str = None
|
|
375
|
+
) -> dict:
|
|
376
|
+
"""
|
|
377
|
+
Retrieves a list of organizations based on the specified search criteria.
|
|
226
378
|
|
|
227
|
-
|
|
379
|
+
This endpoint requires an OAuth access token from the System Administrator role.
|
|
380
|
+
|
|
381
|
+
:param start_page: int - The page number for pagination (optional).
|
|
382
|
+
:param page_size: int - The number of items per page (optional).
|
|
383
|
+
:param order_key: str - Field for sorting. Only 'name' is supported (optional).
|
|
384
|
+
:param order_direction: str - Sort direction: 'asc' or 'desc' (default is 'desc').
|
|
385
|
+
:param filter_key: str - Field for filtering. Only 'name' is supported (optional).
|
|
386
|
+
:param filter_value: str - Value to filter by (optional).
|
|
387
|
+
:return: dict - The API response containing the list of organizations in JSON format.
|
|
388
|
+
"""
|
|
389
|
+
params = {
|
|
390
|
+
"orderDirection": order_direction
|
|
391
|
+
}
|
|
392
|
+
if start_page is not None:
|
|
393
|
+
params["startPage"] = start_page
|
|
394
|
+
if page_size is not None:
|
|
395
|
+
params["pageSize"] = page_size
|
|
396
|
+
if order_key:
|
|
397
|
+
params["orderKey"] = order_key
|
|
398
|
+
if filter_key:
|
|
399
|
+
params["filterKey"] = filter_key
|
|
400
|
+
if filter_value:
|
|
401
|
+
params["filterValue"] = filter_value
|
|
402
|
+
|
|
403
|
+
response = self.api_service.get(endpoint=GET_ORGANIZATION_LIST_V2, params=params)
|
|
404
|
+
validate_status_code(response)
|
|
405
|
+
return parse_json_response(response, "get organization list")
|
|
406
|
+
|
|
407
|
+
def delete_organization(
|
|
408
|
+
self,
|
|
409
|
+
organization_id: str
|
|
410
|
+
) -> dict:
|
|
411
|
+
"""
|
|
412
|
+
Deletes an existing organization using its unique identifier.
|
|
413
|
+
|
|
414
|
+
This endpoint requires an OAuth access token from the System Administrator role.
|
|
415
|
+
|
|
416
|
+
:param organization_id: str - The unique identifier (GUID) of the organization to delete (required).
|
|
417
|
+
:return: dict - The API response confirming the deletion of the organization, in JSON format.
|
|
418
|
+
"""
|
|
419
|
+
endpoint = DELETE_ORGANIZATION_V2.format(organizationId=organization_id)
|
|
420
|
+
response = self.api_service.delete(endpoint=endpoint)
|
|
421
|
+
validate_status_code(response)
|
|
422
|
+
return parse_json_response(response, "delete organization with ID", organization_id=organization_id)
|
pygeai/organization/endpoints.py
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
GET_ASSISTANT_LIST_V1 = "v1/organization/assistants" # GET
|
|
2
|
-
GET_PROJECT_LIST_V1 = "v1/organization/projects"
|
|
3
|
-
GET_PROJECT_V1 = "v1/organization/project/{id}"
|
|
4
|
-
CREATE_PROJECT_V1 = "v1/organization/project"
|
|
5
|
-
UPDATE_PROJECT_V1 = "v1/organization/project/{id}"
|
|
6
|
-
DELETE_PROJECT_V1 = "v1/organization/project/{id}"
|
|
7
|
-
GET_PROJECT_TOKENS_V1 = "v1/organization/project/{id}/tokens"
|
|
8
|
-
GET_REQUEST_DATA_V1 = "v1/organization/request/export"
|
|
1
|
+
GET_ASSISTANT_LIST_V1 = "v1/organization/assistants" # GET - Gets the list of assistants
|
|
2
|
+
GET_PROJECT_LIST_V1 = "v1/organization/projects" # GET - Gets the list of projects
|
|
3
|
+
GET_PROJECT_V1 = "v1/organization/project/{id}" # GET - Gets project details
|
|
4
|
+
CREATE_PROJECT_V1 = "v1/organization/project" # POST - Creates a project
|
|
5
|
+
UPDATE_PROJECT_V1 = "v1/organization/project/{id}" # PUT - Updates a project
|
|
6
|
+
DELETE_PROJECT_V1 = "v1/organization/project/{id}" # DELETE - Deletes a project
|
|
7
|
+
GET_PROJECT_TOKENS_V1 = "v1/organization/project/{id}/tokens" # GET - Gets the list of Tokens for the project
|
|
8
|
+
GET_REQUEST_DATA_V1 = "v1/organization/request/export" # GET - Exports request data
|
|
9
|
+
GET_MEMBERSHIPS_V2 = "v2/accessControl/memberships" # GET - Lists Organizations and Projects a user belongs to with their Roles
|
|
10
|
+
GET_PROJECT_MEMBERSHIPS_V2 = "v2/accessControl/projects/memberships" # GET - Lists Projects and Roles for a user within a specific Organization
|
|
11
|
+
GET_PROJECT_ROLES_V2 = "v2/accessControl/projects/roles" # GET - Lists all Roles supported by a specific Project
|
|
12
|
+
GET_PROJECT_MEMBERS_V2 = "v2/accessControl/projects/members" # GET - Lists all members and their Roles for a specific Project
|
|
13
|
+
GET_ORGANIZATION_MEMBERS_V2 = "v2/accessControl/organizations/members" # GET - Lists all members and their Roles for a specific Organization
|
|
14
|
+
ADD_PROJECT_MEMBER_V2 = "v2/accessControl/projects/members" # POST - Adds a member to a project by sending an invitation
|
|
15
|
+
CREATE_ORGANIZATION_V2 = "v2/admin/organizations" # POST - Creates a new Organization
|
|
16
|
+
GET_ORGANIZATION_LIST_V2 = "v2/admin/organizations" # GET - Retrieves all the organizations available based on a given search criteria
|
|
17
|
+
DELETE_ORGANIZATION_V2 = "v2/admin/organizations/{organizationId}" # DELETE - Deletes the created Organization
|