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.
- 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/organization/managers.py
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
from pygeai import logger
|
|
1
2
|
from pygeai.core.base.mappers import ErrorMapper, ResponseMapper
|
|
2
3
|
from pygeai.core.handlers import ErrorHandler
|
|
3
|
-
from pygeai.core.models import Project
|
|
4
|
+
from pygeai.core.models import Project, Organization
|
|
4
5
|
from pygeai.core.base.responses import EmptyResponse
|
|
5
6
|
from pygeai.organization.clients import OrganizationClient
|
|
6
7
|
from pygeai.organization.mappers import OrganizationResponseMapper
|
|
7
8
|
from pygeai.organization.responses import AssistantListResponse, ProjectListResponse, ProjectDataResponse, \
|
|
8
|
-
ProjectTokensResponse, ProjectItemListResponse
|
|
9
|
+
ProjectTokensResponse, ProjectItemListResponse, MembershipsResponse, ProjectMembershipsResponse, \
|
|
10
|
+
ProjectRolesResponse, ProjectMembersResponse, OrganizationMembersResponse, OrganizationListResponse, \
|
|
11
|
+
OrganizationDataResponse
|
|
12
|
+
from pygeai.core.common.exceptions import APIError
|
|
9
13
|
|
|
10
14
|
|
|
11
15
|
class OrganizationManager:
|
|
12
16
|
"""
|
|
13
17
|
Manager that operates as an abstraction level over the clients, designed to handle calls receiving and
|
|
14
18
|
returning objects when appropriate.
|
|
15
|
-
If errors are found in the response, they are processed
|
|
19
|
+
If errors are found in the response, they are processed to raise an APIError.
|
|
16
20
|
"""
|
|
17
21
|
|
|
18
|
-
def __init__(self, api_key: str = None, base_url: str = None, alias: str =
|
|
22
|
+
def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
|
|
19
23
|
self.__organization_client = OrganizationClient(api_key=api_key, base_url=base_url, alias=alias)
|
|
20
24
|
|
|
21
25
|
def get_assistant_list(
|
|
@@ -32,13 +36,16 @@ class OrganizationManager:
|
|
|
32
36
|
- "summary": Provides a summarized list of assistants. (Default)
|
|
33
37
|
- "full": Provides a detailed list of assistants. (Optional)
|
|
34
38
|
:return: AssistantListResponse - The mapped response containing the list of assistants.
|
|
39
|
+
:raises APIError: If the API returns errors.
|
|
35
40
|
"""
|
|
36
41
|
response_data = self.__organization_client.get_assistant_list(detail=detail)
|
|
37
42
|
if ErrorHandler.has_errors(response_data):
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
error = ErrorHandler.extract_error(response_data)
|
|
44
|
+
logger.error(f"Error received while retrieving assistant list: {error}")
|
|
45
|
+
raise APIError(f"Error received while retrieving assistant list: {error}")
|
|
46
|
+
|
|
47
|
+
result = OrganizationResponseMapper.map_to_assistant_list_response(response_data)
|
|
48
|
+
# TODO -> Add assistant list from plugins API
|
|
42
49
|
return result
|
|
43
50
|
|
|
44
51
|
def get_project_list(
|
|
@@ -56,16 +63,19 @@ class OrganizationManager:
|
|
|
56
63
|
- "summary": Provides a summarized list of projects. (Default)
|
|
57
64
|
- "full": Provides a detailed list of projects. (Optional)
|
|
58
65
|
:param name: str, optional - Filters projects by name. If not provided, all projects are returned.
|
|
59
|
-
:return: ProjectListResponse - The mapped response containing the list of projects
|
|
66
|
+
:return: ProjectListResponse - The mapped response containing the list of projects.
|
|
67
|
+
:raises APIError: If the API returns errors.
|
|
60
68
|
"""
|
|
61
69
|
response_data = self.__organization_client.get_project_list(
|
|
62
70
|
detail=detail,
|
|
63
71
|
name=name
|
|
64
72
|
)
|
|
65
73
|
if ErrorHandler.has_errors(response_data):
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
error = ErrorHandler.extract_error(response_data)
|
|
75
|
+
logger.error(f"Error received while retrieving project list: {error}")
|
|
76
|
+
raise APIError(f"Error received while retrieving project list: {error}")
|
|
77
|
+
|
|
78
|
+
result = OrganizationResponseMapper.map_to_project_list_response(response_data)
|
|
69
79
|
return result
|
|
70
80
|
|
|
71
81
|
def get_project_data(
|
|
@@ -78,37 +88,34 @@ class OrganizationManager:
|
|
|
78
88
|
This method calls `OrganizationClient.get_project_data` to fetch project details
|
|
79
89
|
and maps the response using `OrganizationResponseMapper` into a `ProjectDataResponse` object.
|
|
80
90
|
|
|
81
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
82
|
-
|
|
83
91
|
:param project_id: str - The unique identifier of the project to retrieve.
|
|
84
|
-
:return: ProjectDataResponse - The mapped response containing project details
|
|
92
|
+
:return: ProjectDataResponse - The mapped response containing project details.
|
|
93
|
+
:raises APIError: If the API returns errors.
|
|
85
94
|
"""
|
|
86
95
|
response_data = self.__organization_client.get_project_data(
|
|
87
96
|
project_id=project_id
|
|
88
97
|
)
|
|
89
98
|
if ErrorHandler.has_errors(response_data):
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
error = ErrorHandler.extract_error(response_data)
|
|
100
|
+
logger.error(f"Error received while retrieving project data: {error}")
|
|
101
|
+
raise APIError(f"Error received while retrieving project data: {error}")
|
|
102
|
+
|
|
103
|
+
result = OrganizationResponseMapper.map_to_project_data(response_data)
|
|
93
104
|
return result
|
|
94
105
|
|
|
95
106
|
def create_project(
|
|
96
107
|
self,
|
|
97
108
|
project: Project
|
|
98
|
-
|
|
99
|
-
):
|
|
109
|
+
) -> ProjectDataResponse:
|
|
100
110
|
"""
|
|
101
111
|
Creates a new project with the given details and optional usage limit settings.
|
|
102
112
|
|
|
103
113
|
This method calls `OrganizationClient.create_project` to create a new project and maps the response
|
|
104
114
|
using `OrganizationResponseMapper` into a `ProjectDataResponse` object.
|
|
105
115
|
|
|
106
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
107
|
-
|
|
108
116
|
:param project: Project - The project object containing details such as name, email, and description.
|
|
109
|
-
:
|
|
110
|
-
|
|
111
|
-
:return: ProjectDataResponse - The mapped response containing the created project details or an error list.
|
|
117
|
+
:return: ProjectDataResponse - The mapped response containing the created project details.
|
|
118
|
+
:raises APIError: If the API returns errors.
|
|
112
119
|
"""
|
|
113
120
|
response_data = self.__organization_client.create_project(
|
|
114
121
|
name=project.name,
|
|
@@ -124,26 +131,26 @@ class OrganizationManager:
|
|
|
124
131
|
)
|
|
125
132
|
|
|
126
133
|
if ErrorHandler.has_errors(response_data):
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
134
|
+
error = ErrorHandler.extract_error(response_data)
|
|
135
|
+
logger.error(f"Error received while creating project: {error}")
|
|
136
|
+
raise APIError(f"Error received while creating project: {error}")
|
|
130
137
|
|
|
138
|
+
result = OrganizationResponseMapper.map_to_project_data(response_data)
|
|
131
139
|
return result
|
|
132
140
|
|
|
133
141
|
def update_project(
|
|
134
142
|
self,
|
|
135
143
|
project: Project
|
|
136
|
-
):
|
|
144
|
+
) -> ProjectDataResponse:
|
|
137
145
|
"""
|
|
138
146
|
Updates an existing project with the provided details.
|
|
139
147
|
|
|
140
148
|
This method calls `OrganizationClient.update_project` to update project information and maps the response
|
|
141
149
|
using `OrganizationResponseMapper` into a `ProjectDataResponse` object.
|
|
142
150
|
|
|
143
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
144
|
-
|
|
145
151
|
:param project: Project - The project object containing updated details such as project ID, name, and description.
|
|
146
|
-
:return: ProjectDataResponse - The mapped response containing the updated project details
|
|
152
|
+
:return: ProjectDataResponse - The mapped response containing the updated project details.
|
|
153
|
+
:raises APIError: If the API returns errors.
|
|
147
154
|
"""
|
|
148
155
|
response_data = self.__organization_client.update_project(
|
|
149
156
|
project_id=project.id,
|
|
@@ -151,10 +158,11 @@ class OrganizationManager:
|
|
|
151
158
|
description=project.description
|
|
152
159
|
)
|
|
153
160
|
if ErrorHandler.has_errors(response_data):
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
161
|
+
error = ErrorHandler.extract_error(response_data)
|
|
162
|
+
logger.error(f"Error received while updating project: {error}")
|
|
163
|
+
raise APIError(f"Error received while updating project: {error}")
|
|
157
164
|
|
|
165
|
+
result = OrganizationResponseMapper.map_to_project_data(response_data)
|
|
158
166
|
return result
|
|
159
167
|
|
|
160
168
|
def delete_project(
|
|
@@ -167,19 +175,19 @@ class OrganizationManager:
|
|
|
167
175
|
This method calls `OrganizationClient.delete_project` to remove a project and maps the response
|
|
168
176
|
using `ResponseMapper.map_to_empty_response`.
|
|
169
177
|
|
|
170
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
171
|
-
|
|
172
178
|
:param project_id: str - The unique identifier of the project to be deleted.
|
|
173
|
-
:return: EmptyResponse - An empty response indicating successful deletion
|
|
179
|
+
:return: EmptyResponse - An empty response indicating successful deletion.
|
|
180
|
+
:raises APIError: If the API returns errors.
|
|
174
181
|
"""
|
|
175
182
|
response_data = self.__organization_client.delete_project(
|
|
176
183
|
project_id=project_id
|
|
177
184
|
)
|
|
178
185
|
if ErrorHandler.has_errors(response_data):
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
186
|
+
error = ErrorHandler.extract_error(response_data)
|
|
187
|
+
logger.error(f"Error received while deleting project: {error}")
|
|
188
|
+
raise APIError(f"Error received while deleting project: {error}")
|
|
182
189
|
|
|
190
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Project deleted successfully")
|
|
183
191
|
return result
|
|
184
192
|
|
|
185
193
|
def get_project_tokens(
|
|
@@ -192,19 +200,19 @@ class OrganizationManager:
|
|
|
192
200
|
This method calls `OrganizationClient.get_project_tokens` to fetch token data and maps the response
|
|
193
201
|
using `OrganizationResponseMapper.map_to_token_list_response`.
|
|
194
202
|
|
|
195
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
196
|
-
|
|
197
203
|
:param project_id: str - The unique identifier of the project whose tokens are to be retrieved.
|
|
198
|
-
:return: ProjectTokensResponse - The mapped response containing the list of project tokens
|
|
204
|
+
:return: ProjectTokensResponse - The mapped response containing the list of project tokens.
|
|
205
|
+
:raises APIError: If the API returns errors.
|
|
199
206
|
"""
|
|
200
207
|
response_data = self.__organization_client.get_project_tokens(
|
|
201
208
|
project_id=project_id
|
|
202
209
|
)
|
|
203
210
|
if ErrorHandler.has_errors(response_data):
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
211
|
+
error = ErrorHandler.extract_error(response_data)
|
|
212
|
+
logger.error(f"Error received while retrieving project tokens: {error}")
|
|
213
|
+
raise APIError(f"Error received while retrieving project tokens: {error}")
|
|
207
214
|
|
|
215
|
+
result = OrganizationResponseMapper.map_to_token_list_response(response_data)
|
|
208
216
|
return result
|
|
209
217
|
|
|
210
218
|
def export_request_data(
|
|
@@ -221,13 +229,12 @@ class OrganizationManager:
|
|
|
221
229
|
filtered by assistant name, status, and pagination parameters. The response is mapped
|
|
222
230
|
using `OrganizationResponseMapper.map_to_item_list_response`.
|
|
223
231
|
|
|
224
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
225
|
-
|
|
226
232
|
:param assistant_name: str, optional - Filters requests by assistant name. If not provided, all assistants are included.
|
|
227
233
|
:param status: str, optional - Filters requests by status. If not provided, all statuses are included.
|
|
228
234
|
:param skip: int, optional - The number of records to skip for pagination. Default is 0.
|
|
229
235
|
:param count: int, optional - The number of records to retrieve. Default is 0 (no limit).
|
|
230
|
-
:return: ProjectItemListResponse - The mapped response containing the exported request data
|
|
236
|
+
:return: ProjectItemListResponse - The mapped response containing the exported request data.
|
|
237
|
+
:raises APIError: If the API returns errors.
|
|
231
238
|
"""
|
|
232
239
|
response_data = self.__organization_client.export_request_data(
|
|
233
240
|
assistant_name=assistant_name,
|
|
@@ -236,8 +243,295 @@ class OrganizationManager:
|
|
|
236
243
|
count=count
|
|
237
244
|
)
|
|
238
245
|
if ErrorHandler.has_errors(response_data):
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
246
|
+
error = ErrorHandler.extract_error(response_data)
|
|
247
|
+
logger.error(f"Error received while exporting request data: {error}")
|
|
248
|
+
raise APIError(f"Error received while exporting request data: {error}")
|
|
249
|
+
|
|
250
|
+
result = OrganizationResponseMapper.map_to_item_list_response(response_data)
|
|
251
|
+
return result
|
|
252
|
+
|
|
253
|
+
def get_memberships(
|
|
254
|
+
self,
|
|
255
|
+
email: str = None,
|
|
256
|
+
start_page: int = 1,
|
|
257
|
+
page_size: int = 20,
|
|
258
|
+
order_key: str = None,
|
|
259
|
+
order_direction: str = "desc",
|
|
260
|
+
role_types: str = None
|
|
261
|
+
) -> MembershipsResponse:
|
|
262
|
+
"""
|
|
263
|
+
Retrieves a list of Organizations and Projects a user belongs to with their Roles.
|
|
264
|
+
|
|
265
|
+
This method calls `OrganizationClient.get_memberships` to fetch membership data
|
|
266
|
+
and maps the response using `OrganizationResponseMapper.map_to_memberships_response`.
|
|
267
|
+
|
|
268
|
+
:param email: str, optional - The email address of the user to search for (case-insensitive).
|
|
269
|
+
:param start_page: int - The page number for pagination (default is 1).
|
|
270
|
+
:param page_size: int - The number of items per page (default is 20).
|
|
271
|
+
:param order_key: str, optional - Field for sorting. Only 'organizationName' is supported.
|
|
272
|
+
:param order_direction: str - Sort direction: 'asc' or 'desc' (default is 'desc').
|
|
273
|
+
:param role_types: str, optional - Comma-separated list of role types: 'backend', 'frontend' (case-insensitive).
|
|
274
|
+
:return: MembershipsResponse - The mapped response containing organizations and projects with roles.
|
|
275
|
+
:raises APIError: If the API returns errors.
|
|
276
|
+
"""
|
|
277
|
+
response_data = self.__organization_client.get_memberships(
|
|
278
|
+
email=email,
|
|
279
|
+
start_page=start_page,
|
|
280
|
+
page_size=page_size,
|
|
281
|
+
order_key=order_key,
|
|
282
|
+
order_direction=order_direction,
|
|
283
|
+
role_types=role_types
|
|
284
|
+
)
|
|
285
|
+
if ErrorHandler.has_errors(response_data):
|
|
286
|
+
error = ErrorHandler.extract_error(response_data)
|
|
287
|
+
logger.error(f"Error received while retrieving memberships: {error}")
|
|
288
|
+
raise APIError(f"Error received while retrieving memberships: {error}")
|
|
289
|
+
|
|
290
|
+
result = OrganizationResponseMapper.map_to_memberships_response(response_data)
|
|
291
|
+
return result
|
|
292
|
+
|
|
293
|
+
def get_project_memberships(
|
|
294
|
+
self,
|
|
295
|
+
email: str = None,
|
|
296
|
+
start_page: int = 1,
|
|
297
|
+
page_size: int = 20,
|
|
298
|
+
order_key: str = None,
|
|
299
|
+
order_direction: str = "desc",
|
|
300
|
+
role_types: str = None
|
|
301
|
+
) -> ProjectMembershipsResponse:
|
|
302
|
+
"""
|
|
303
|
+
Retrieves a list of Projects and Roles for a user within a specific Organization.
|
|
304
|
+
|
|
305
|
+
This method calls `OrganizationClient.get_project_memberships` to fetch project membership data
|
|
306
|
+
and maps the response using `OrganizationResponseMapper.map_to_project_memberships_response`.
|
|
307
|
+
|
|
308
|
+
:param email: str, optional - The email address of the user to search for (case-insensitive).
|
|
309
|
+
:param start_page: int - The page number for pagination (default is 1).
|
|
310
|
+
:param page_size: int - The number of items per page (default is 20).
|
|
311
|
+
:param order_key: str, optional - Field for sorting. Only 'projectName' is supported.
|
|
312
|
+
:param order_direction: str - Sort direction: 'asc' or 'desc' (default is 'desc').
|
|
313
|
+
:param role_types: str, optional - Comma-separated list of role types: 'backend', 'frontend' (case-insensitive).
|
|
314
|
+
:return: ProjectMembershipsResponse - The mapped response containing projects with roles.
|
|
315
|
+
:raises APIError: If the API returns errors.
|
|
316
|
+
"""
|
|
317
|
+
response_data = self.__organization_client.get_project_memberships(
|
|
318
|
+
email=email,
|
|
319
|
+
start_page=start_page,
|
|
320
|
+
page_size=page_size,
|
|
321
|
+
order_key=order_key,
|
|
322
|
+
order_direction=order_direction,
|
|
323
|
+
role_types=role_types
|
|
324
|
+
)
|
|
325
|
+
if ErrorHandler.has_errors(response_data):
|
|
326
|
+
error = ErrorHandler.extract_error(response_data)
|
|
327
|
+
logger.error(f"Error received while retrieving project memberships: {error}")
|
|
328
|
+
raise APIError(f"Error received while retrieving project memberships: {error}")
|
|
329
|
+
|
|
330
|
+
result = OrganizationResponseMapper.map_to_project_memberships_response(response_data)
|
|
331
|
+
return result
|
|
332
|
+
|
|
333
|
+
def get_project_roles(
|
|
334
|
+
self,
|
|
335
|
+
project_id: str
|
|
336
|
+
) -> ProjectRolesResponse:
|
|
337
|
+
"""
|
|
338
|
+
Retrieves all Roles supported by a specific Project.
|
|
339
|
+
|
|
340
|
+
This method calls `OrganizationClient.get_project_roles` to fetch project roles
|
|
341
|
+
and maps the response using `OrganizationResponseMapper.map_to_project_roles_response`.
|
|
342
|
+
|
|
343
|
+
:param project_id: str - The unique identifier of the project.
|
|
344
|
+
:return: ProjectRolesResponse - The mapped response containing the list of roles.
|
|
345
|
+
:raises APIError: If the API returns errors.
|
|
346
|
+
"""
|
|
347
|
+
response_data = self.__organization_client.get_project_roles(
|
|
348
|
+
project_id=project_id
|
|
349
|
+
)
|
|
350
|
+
if ErrorHandler.has_errors(response_data):
|
|
351
|
+
error = ErrorHandler.extract_error(response_data)
|
|
352
|
+
logger.error(f"Error received while retrieving project roles: {error}")
|
|
353
|
+
raise APIError(f"Error received while retrieving project roles: {error}")
|
|
354
|
+
|
|
355
|
+
result = OrganizationResponseMapper.map_to_project_roles_response(response_data)
|
|
356
|
+
return result
|
|
357
|
+
|
|
358
|
+
def get_project_members(
|
|
359
|
+
self,
|
|
360
|
+
project_id: str
|
|
361
|
+
) -> ProjectMembersResponse:
|
|
362
|
+
"""
|
|
363
|
+
Retrieves all members and their Roles for a specific Project.
|
|
364
|
+
|
|
365
|
+
This method calls `OrganizationClient.get_project_members` to fetch project members
|
|
366
|
+
and maps the response using `OrganizationResponseMapper.map_to_project_members_response`.
|
|
367
|
+
|
|
368
|
+
:param project_id: str - The unique identifier of the project.
|
|
369
|
+
:return: ProjectMembersResponse - The mapped response containing members with their roles.
|
|
370
|
+
:raises APIError: If the API returns errors.
|
|
371
|
+
"""
|
|
372
|
+
response_data = self.__organization_client.get_project_members(
|
|
373
|
+
project_id=project_id
|
|
374
|
+
)
|
|
375
|
+
if ErrorHandler.has_errors(response_data):
|
|
376
|
+
error = ErrorHandler.extract_error(response_data)
|
|
377
|
+
logger.error(f"Error received while retrieving project members: {error}")
|
|
378
|
+
raise APIError(f"Error received while retrieving project members: {error}")
|
|
379
|
+
|
|
380
|
+
result = OrganizationResponseMapper.map_to_project_members_response(response_data)
|
|
381
|
+
return result
|
|
382
|
+
|
|
383
|
+
def get_organization_members(
|
|
384
|
+
self,
|
|
385
|
+
organization_id: str
|
|
386
|
+
) -> OrganizationMembersResponse:
|
|
387
|
+
"""
|
|
388
|
+
Retrieves all members and their Roles for a specific Organization.
|
|
389
|
+
|
|
390
|
+
This method calls `OrganizationClient.get_organization_members` to fetch organization members
|
|
391
|
+
and maps the response using `OrganizationResponseMapper.map_to_organization_members_response`.
|
|
392
|
+
|
|
393
|
+
:param organization_id: str - The unique identifier of the organization.
|
|
394
|
+
:return: OrganizationMembersResponse - The mapped response containing members with their roles.
|
|
395
|
+
:raises APIError: If the API returns errors.
|
|
396
|
+
"""
|
|
397
|
+
response_data = self.__organization_client.get_organization_members(
|
|
398
|
+
organization_id=organization_id
|
|
399
|
+
)
|
|
400
|
+
if ErrorHandler.has_errors(response_data):
|
|
401
|
+
error = ErrorHandler.extract_error(response_data)
|
|
402
|
+
logger.error(f"Error received while retrieving organization members: {error}")
|
|
403
|
+
raise APIError(f"Error received while retrieving organization members: {error}")
|
|
404
|
+
|
|
405
|
+
result = OrganizationResponseMapper.map_to_organization_members_response(response_data)
|
|
406
|
+
return result
|
|
407
|
+
|
|
408
|
+
def add_project_member(
|
|
409
|
+
self,
|
|
410
|
+
project_id: str,
|
|
411
|
+
user_email: str,
|
|
412
|
+
roles: list
|
|
413
|
+
) -> EmptyResponse:
|
|
414
|
+
"""
|
|
415
|
+
Adds a user to a project by sending an invitation with the specified roles.
|
|
416
|
+
|
|
417
|
+
This method calls `OrganizationClient.add_project_member` to invite a user to the project
|
|
418
|
+
and maps the response to an `EmptyResponse`.
|
|
419
|
+
|
|
420
|
+
:param project_id: str - The unique identifier of the project.
|
|
421
|
+
:param user_email: str - The email address of the user to invite.
|
|
422
|
+
:param roles: list - A list of role names or GUIDs to assign to the user.
|
|
423
|
+
:return: EmptyResponse - An empty response indicating successful invitation.
|
|
424
|
+
:raises APIError: If the API returns errors.
|
|
425
|
+
"""
|
|
426
|
+
response_data = self.__organization_client.add_project_member(
|
|
427
|
+
project_id=project_id,
|
|
428
|
+
user_email=user_email,
|
|
429
|
+
roles=roles
|
|
430
|
+
)
|
|
431
|
+
if ErrorHandler.has_errors(response_data):
|
|
432
|
+
error = ErrorHandler.extract_error(response_data)
|
|
433
|
+
logger.error(f"Error received while adding project member: {error}")
|
|
434
|
+
raise APIError(f"Error received while adding project member: {error}")
|
|
435
|
+
|
|
436
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Invitation sent successfully")
|
|
437
|
+
return result
|
|
438
|
+
|
|
439
|
+
def create_organization(
|
|
440
|
+
self,
|
|
441
|
+
name: str,
|
|
442
|
+
administrator_user_email: str
|
|
443
|
+
) -> OrganizationDataResponse:
|
|
444
|
+
"""
|
|
445
|
+
Creates a new organization with the given details.
|
|
446
|
+
|
|
447
|
+
This endpoint requires an OAuth access token from the System Administrator role.
|
|
448
|
+
|
|
449
|
+
This method calls `OrganizationClient.create_organization` to create a new organization and maps the response
|
|
450
|
+
using `OrganizationResponseMapper` into an `OrganizationDataResponse` object.
|
|
451
|
+
|
|
452
|
+
:param name: str - The name of the new organization (required).
|
|
453
|
+
:param administrator_user_email: str - The email address of the organization administrator (required).
|
|
454
|
+
:return: OrganizationDataResponse - The mapped response containing the created organization details.
|
|
455
|
+
:raises APIError: If the API returns errors.
|
|
456
|
+
"""
|
|
457
|
+
response_data = self.__organization_client.create_organization(
|
|
458
|
+
name=name,
|
|
459
|
+
administrator_user_email=administrator_user_email
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
if ErrorHandler.has_errors(response_data):
|
|
463
|
+
error = ErrorHandler.extract_error(response_data)
|
|
464
|
+
logger.error(f"Error received while creating organization: {error}")
|
|
465
|
+
raise APIError(f"Error received while creating organization: {error}")
|
|
466
|
+
|
|
467
|
+
result = OrganizationResponseMapper.map_to_organization_data_response(response_data)
|
|
468
|
+
return result
|
|
469
|
+
|
|
470
|
+
def get_organization_list(
|
|
471
|
+
self,
|
|
472
|
+
start_page: int = None,
|
|
473
|
+
page_size: int = None,
|
|
474
|
+
order_key: str = None,
|
|
475
|
+
order_direction: str = "desc",
|
|
476
|
+
filter_key: str = None,
|
|
477
|
+
filter_value: str = None
|
|
478
|
+
) -> OrganizationListResponse:
|
|
479
|
+
"""
|
|
480
|
+
Retrieves a list of organizations based on the specified search criteria.
|
|
481
|
+
|
|
482
|
+
This endpoint requires an OAuth access token from the System Administrator role.
|
|
483
|
+
|
|
484
|
+
This method calls `OrganizationClient.get_organization_list` to fetch organization data
|
|
485
|
+
and maps the response using `OrganizationResponseMapper` into an `OrganizationListResponse` object.
|
|
486
|
+
|
|
487
|
+
:param start_page: int, optional - The page number for pagination.
|
|
488
|
+
:param page_size: int, optional - The number of items per page.
|
|
489
|
+
:param order_key: str, optional - Field for sorting. Only 'name' is supported.
|
|
490
|
+
:param order_direction: str - Sort direction: 'asc' or 'desc' (default is 'desc').
|
|
491
|
+
:param filter_key: str, optional - Field for filtering. Only 'name' is supported.
|
|
492
|
+
:param filter_value: str, optional - Value to filter by.
|
|
493
|
+
:return: OrganizationListResponse - The mapped response containing the list of organizations.
|
|
494
|
+
:raises APIError: If the API returns errors.
|
|
495
|
+
"""
|
|
496
|
+
response_data = self.__organization_client.get_organization_list(
|
|
497
|
+
start_page=start_page,
|
|
498
|
+
page_size=page_size,
|
|
499
|
+
order_key=order_key,
|
|
500
|
+
order_direction=order_direction,
|
|
501
|
+
filter_key=filter_key,
|
|
502
|
+
filter_value=filter_value
|
|
503
|
+
)
|
|
504
|
+
if ErrorHandler.has_errors(response_data):
|
|
505
|
+
error = ErrorHandler.extract_error(response_data)
|
|
506
|
+
logger.error(f"Error received while retrieving organization list: {error}")
|
|
507
|
+
raise APIError(f"Error received while retrieving organization list: {error}")
|
|
508
|
+
|
|
509
|
+
result = OrganizationResponseMapper.map_to_organization_list_response(response_data)
|
|
510
|
+
return result
|
|
511
|
+
|
|
512
|
+
def delete_organization(
|
|
513
|
+
self,
|
|
514
|
+
organization_id: str
|
|
515
|
+
) -> EmptyResponse:
|
|
516
|
+
"""
|
|
517
|
+
Deletes an organization by its unique identifier.
|
|
518
|
+
|
|
519
|
+
This endpoint requires an OAuth access token from the System Administrator role.
|
|
520
|
+
|
|
521
|
+
This method calls `OrganizationClient.delete_organization` to remove an organization and maps the response
|
|
522
|
+
using `ResponseMapper.map_to_empty_response`.
|
|
523
|
+
|
|
524
|
+
:param organization_id: str - The unique identifier of the organization to be deleted.
|
|
525
|
+
:return: EmptyResponse - An empty response indicating successful deletion.
|
|
526
|
+
:raises APIError: If the API returns errors.
|
|
527
|
+
"""
|
|
528
|
+
response_data = self.__organization_client.delete_organization(
|
|
529
|
+
organization_id=organization_id
|
|
530
|
+
)
|
|
531
|
+
if ErrorHandler.has_errors(response_data):
|
|
532
|
+
error = ErrorHandler.extract_error(response_data)
|
|
533
|
+
logger.error(f"Error received while deleting organization: {error}")
|
|
534
|
+
raise APIError(f"Error received while deleting organization: {error}")
|
|
242
535
|
|
|
536
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Organization deleted successfully")
|
|
243
537
|
return result
|
pygeai/organization/mappers.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
from pygeai.core.base.mappers import ModelMapper
|
|
2
|
-
from pygeai.core.models import Assistant, Project
|
|
2
|
+
from pygeai.core.models import Assistant, Project, Role, Member, OrganizationMembership, ProjectMembership, Organization
|
|
3
3
|
from pygeai.organization.responses import AssistantListResponse, ProjectListResponse, ProjectDataResponse, \
|
|
4
|
-
ProjectTokensResponse, ProjectItemListResponse
|
|
4
|
+
ProjectTokensResponse, ProjectItemListResponse, MembershipsResponse, ProjectMembershipsResponse, \
|
|
5
|
+
ProjectRolesResponse, ProjectMembersResponse, OrganizationMembersResponse, OrganizationListResponse, \
|
|
6
|
+
OrganizationDataResponse
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
class OrganizationResponseMapper:
|
|
@@ -76,3 +78,101 @@ class OrganizationResponseMapper:
|
|
|
76
78
|
items=item_list
|
|
77
79
|
)
|
|
78
80
|
|
|
81
|
+
@classmethod
|
|
82
|
+
def map_to_memberships_response(cls, data: dict) -> MembershipsResponse:
|
|
83
|
+
count = data.get("count", 0)
|
|
84
|
+
pages = data.get("pages", 0)
|
|
85
|
+
organizations_data = data.get("organizations", [])
|
|
86
|
+
organizations = []
|
|
87
|
+
|
|
88
|
+
for org_data in organizations_data:
|
|
89
|
+
org = OrganizationMembership.model_validate(org_data)
|
|
90
|
+
organizations.append(org)
|
|
91
|
+
|
|
92
|
+
return MembershipsResponse(
|
|
93
|
+
count=count,
|
|
94
|
+
pages=pages,
|
|
95
|
+
organizations=organizations
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def map_to_project_memberships_response(cls, data: dict) -> ProjectMembershipsResponse:
|
|
100
|
+
count = data.get("count", 0)
|
|
101
|
+
pages = data.get("pages", 0)
|
|
102
|
+
projects_data = data.get("projects", [])
|
|
103
|
+
projects = []
|
|
104
|
+
|
|
105
|
+
for project_data in projects_data:
|
|
106
|
+
project = ProjectMembership.model_validate(project_data)
|
|
107
|
+
projects.append(project)
|
|
108
|
+
|
|
109
|
+
return ProjectMembershipsResponse(
|
|
110
|
+
count=count,
|
|
111
|
+
pages=pages,
|
|
112
|
+
projects=projects
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def map_to_project_roles_response(cls, data: dict) -> ProjectRolesResponse:
|
|
117
|
+
roles_data = data.get("roles", [])
|
|
118
|
+
roles = []
|
|
119
|
+
|
|
120
|
+
for role_data in roles_data:
|
|
121
|
+
role = Role.model_validate(role_data)
|
|
122
|
+
roles.append(role)
|
|
123
|
+
|
|
124
|
+
return ProjectRolesResponse(
|
|
125
|
+
roles=roles
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
@classmethod
|
|
129
|
+
def map_to_project_members_response(cls, data: dict) -> ProjectMembersResponse:
|
|
130
|
+
members_data = data.get("members", [])
|
|
131
|
+
members = []
|
|
132
|
+
|
|
133
|
+
for member_data in members_data:
|
|
134
|
+
member = Member.model_validate(member_data)
|
|
135
|
+
members.append(member)
|
|
136
|
+
|
|
137
|
+
return ProjectMembersResponse(
|
|
138
|
+
members=members
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
@classmethod
|
|
142
|
+
def map_to_organization_members_response(cls, data: dict) -> OrganizationMembersResponse:
|
|
143
|
+
members_data = data.get("members", [])
|
|
144
|
+
members = []
|
|
145
|
+
|
|
146
|
+
for member_data in members_data:
|
|
147
|
+
member = Member.model_validate(member_data)
|
|
148
|
+
members.append(member)
|
|
149
|
+
|
|
150
|
+
return OrganizationMembersResponse(
|
|
151
|
+
members=members
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
@classmethod
|
|
155
|
+
def map_to_organization_list_response(cls, data: dict) -> OrganizationListResponse:
|
|
156
|
+
count = data.get("count", 0)
|
|
157
|
+
pages = data.get("pages", 0)
|
|
158
|
+
organizations_data = data.get("organizations", [])
|
|
159
|
+
organizations = []
|
|
160
|
+
|
|
161
|
+
for org_data in organizations_data:
|
|
162
|
+
organization = Organization.model_validate(org_data)
|
|
163
|
+
organizations.append(organization)
|
|
164
|
+
|
|
165
|
+
return OrganizationListResponse(
|
|
166
|
+
count=count,
|
|
167
|
+
pages=pages,
|
|
168
|
+
organizations=organizations
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
@classmethod
|
|
172
|
+
def map_to_organization_data_response(cls, data: dict) -> OrganizationDataResponse:
|
|
173
|
+
organization = Organization.model_validate(data)
|
|
174
|
+
|
|
175
|
+
return OrganizationDataResponse(
|
|
176
|
+
organization=organization
|
|
177
|
+
)
|
|
178
|
+
|