alita-sdk 0.3.193__tar.gz → 0.3.195__tar.gz
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.
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/PKG-INFO +1 -1
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/llms/alita.py +1 -1
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +6 -16
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/confluence/api_wrapper.py +19 -8
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/slack/__init__.py +13 -7
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_squad/__init__.py +5 -6
- alita_sdk-0.3.195/alita_sdk/tools/zephyr_squad/api_wrapper.py +319 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +57 -17
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/pyproject.toml +1 -1
- alita_sdk-0.3.193/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -135
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/LICENSE +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/README.md +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/clients/client.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/assistant.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/tools.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/bitbucket/tools.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/slack/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk.egg-info/SOURCES.txt +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/setup.cfg +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.193 → alita_sdk-0.3.195}/tests/test_jira_analysis.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.195
|
4
4
|
Summary: SDK for building langchain agents using resources from Alita
|
5
5
|
Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -139,7 +139,7 @@ class AlitaChatModel(BaseChatModel):
|
|
139
139
|
else:
|
140
140
|
message = _convert_delta_to_message_chunk(chunk, default_chunk_class)
|
141
141
|
finish_reason = None
|
142
|
-
generation_info = ()
|
142
|
+
generation_info = dict()
|
143
143
|
if stop:
|
144
144
|
for stop_word in stop:
|
145
145
|
if stop_word in message.content:
|
@@ -286,10 +286,7 @@ class BitbucketCloudApi(BitbucketApiAbstract):
|
|
286
286
|
Returns:
|
287
287
|
List[Dict[str, Any]]: List of commits in the pull request
|
288
288
|
"""
|
289
|
-
|
290
|
-
if not isinstance(commits, list):
|
291
|
-
commits = list(commits)
|
292
|
-
return commits
|
289
|
+
return self.repository.pullrequests.get(pr_id).get('commits', {}).get('values', [])
|
293
290
|
|
294
291
|
def get_pull_request(self, pr_id: str) -> Any:
|
295
292
|
""" Get details of a pull request
|
@@ -322,18 +319,11 @@ class BitbucketCloudApi(BitbucketApiAbstract):
|
|
322
319
|
"""
|
323
320
|
# Build the content dict for Bitbucket Cloud
|
324
321
|
if isinstance(content, str):
|
325
|
-
|
326
|
-
elif isinstance(content, dict):
|
327
|
-
|
328
|
-
content_dict = {k: v for k, v in content.items() if k in ("raw", "markup", "html")}
|
329
|
-
if not content_dict:
|
330
|
-
content_dict = {"raw": str(content)}
|
322
|
+
content_raw = content
|
323
|
+
elif isinstance(content, dict) and "raw" in content:
|
324
|
+
content_raw = content.get("raw")
|
331
325
|
else:
|
332
|
-
|
333
|
-
|
334
|
-
data = {"content": content_dict}
|
335
|
-
if inline:
|
336
|
-
data["inline"] = inline
|
326
|
+
content_raw = str(content)
|
337
327
|
|
338
|
-
response = self.repository.pullrequests.
|
328
|
+
response = self.repository.pullrequests.get(pr_id).comment(content_raw)
|
339
329
|
return response['links']['self']['href']
|
@@ -201,6 +201,8 @@ GetPageAttachmentsInput = create_model(
|
|
201
201
|
page_id=(str, Field(description="Confluence page ID from which attachments will be retrieved")),
|
202
202
|
max_content_length=(int, Field(default=10000, description="Maximum number of characters to return for attachment content. Content will be truncated if longer. Default is 10000.")),
|
203
203
|
custom_prompt=(Optional[str], Field(default=None, description="Custom prompt to use for LLM-based analysis of attachments (images, pdfs, etc). If not provided, a default prompt will be used.")),
|
204
|
+
allowed_extensions=(Optional[List[str]], Field(default=None, description="List of file extensions to include (e.g. ['pdf', 'docx']). If None, all extensions are included.", examples=[["pdf", "docx"]])),
|
205
|
+
name_pattern=(Optional[str], Field(default=None, description="Regex pattern to filter attachment names (e.g. '^report_.*\\.pdf$'). If None, all names are included.", examples=["^report_.*\\.pdf$"])),
|
204
206
|
)
|
205
207
|
|
206
208
|
|
@@ -1427,8 +1429,8 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
1427
1429
|
stacktrace = traceback.format_exc()
|
1428
1430
|
logger.error(f"Error processing page with images: {stacktrace}")
|
1429
1431
|
return f"Error processing page with images: {str(e)}"
|
1430
|
-
|
1431
|
-
def get_page_attachments(self, page_id: str, max_content_length: int = 10000, custom_prompt: str = None):
|
1432
|
+
|
1433
|
+
def get_page_attachments(self, page_id: str, max_content_length: int = 10000, custom_prompt: str = None, allowed_extensions: Optional[List[str]] = None, name_pattern: Optional[str] = None):
|
1432
1434
|
"""
|
1433
1435
|
Retrieve all attachments for a Confluence page, including core metadata (with creator, created, updated), comments,
|
1434
1436
|
file content, and LLM-based analysis for supported types.
|
@@ -1449,8 +1451,19 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
1449
1451
|
logger.warning(f"Failed to fetch history for attachment {attachment.get('title', '')}: {str(e)}")
|
1450
1452
|
history_map[attachment['id']] = None
|
1451
1453
|
|
1454
|
+
import re
|
1452
1455
|
results = []
|
1453
1456
|
for attachment in attachments['results']:
|
1457
|
+
title = attachment.get('title', '')
|
1458
|
+
file_ext = title.lower().split('.')[-1] if '.' in title else ''
|
1459
|
+
|
1460
|
+
# Filter by allowed_extensions
|
1461
|
+
if allowed_extensions and file_ext not in allowed_extensions:
|
1462
|
+
continue
|
1463
|
+
# Filter by name_pattern
|
1464
|
+
if name_pattern and not re.match(name_pattern, title):
|
1465
|
+
continue
|
1466
|
+
|
1454
1467
|
media_type = attachment.get('metadata', {}).get('mediaType', '')
|
1455
1468
|
# Core metadata extraction with history
|
1456
1469
|
hist = history_map.get(attachment['id']) or {}
|
@@ -1458,7 +1471,7 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
1458
1471
|
created_date = hist.get('createdDate', '') if hist else attachment.get('created', '')
|
1459
1472
|
last_updated = hist.get('lastUpdated', {}).get('when', '') if hist else ''
|
1460
1473
|
metadata = {
|
1461
|
-
'name':
|
1474
|
+
'name': title,
|
1462
1475
|
'size': attachment.get('extensions', {}).get('fileSize', None),
|
1463
1476
|
'creator': created_by,
|
1464
1477
|
'created': created_date,
|
@@ -1467,6 +1480,7 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
1467
1480
|
'labels': [label['name'] for label in attachment.get('metadata', {}).get('labels', {}).get('results', [])],
|
1468
1481
|
'download_url': self.base_url.rstrip('/') + attachment['_links']['download'] if attachment.get('_links', {}).get('download') else None
|
1469
1482
|
}
|
1483
|
+
|
1470
1484
|
# Fetch comments for the attachment
|
1471
1485
|
comments = []
|
1472
1486
|
try:
|
@@ -1480,16 +1494,13 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
1480
1494
|
'body': comment.get('body', {}).get('storage', {}).get('value', '')
|
1481
1495
|
})
|
1482
1496
|
except Exception as e:
|
1483
|
-
logger.warning(f"Failed to fetch comments for attachment {
|
1497
|
+
logger.warning(f"Failed to fetch comments for attachment {title}: {str(e)}")
|
1484
1498
|
|
1485
1499
|
content = None
|
1486
1500
|
llm_analysis = None
|
1487
|
-
title = attachment.get('title', '')
|
1488
1501
|
download_url = self.base_url.rstrip('/') + attachment['_links']['download']
|
1489
1502
|
|
1490
1503
|
# --- Begin: Raw content for xml, json, markdown, txt ---
|
1491
|
-
# Check by media type or file extension
|
1492
|
-
file_ext = title.lower().split('.')[-1] if '.' in title else ''
|
1493
1504
|
is_text_type = (
|
1494
1505
|
media_type in [
|
1495
1506
|
'application/xml', 'text/xml',
|
@@ -1661,7 +1672,7 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
1661
1672
|
llm_analysis = self._process_image_with_llm(image_data, title, context_text, custom_prompt)
|
1662
1673
|
|
1663
1674
|
if llm_analysis and isinstance(llm_analysis, str) and len(llm_analysis) > max_content_length:
|
1664
|
-
|
1675
|
+
llm_analysis = llm_analysis[:max_content_length] + f"\n...[truncated, showing first {max_content_length} characters]"
|
1665
1676
|
|
1666
1677
|
results.append({
|
1667
1678
|
'metadata': metadata,
|
@@ -44,14 +44,20 @@ class SlackToolkit(BaseToolkit):
|
|
44
44
|
except SlackApiError as e:
|
45
45
|
logger.error(f"Slack connection failed: {e.response['error']}")
|
46
46
|
return {"success": False, "error": e.response['error']}
|
47
|
-
|
47
|
+
|
48
48
|
model = create_model(
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
name,
|
50
|
+
name=(str, Field(description="Toolkit name", json_schema_extra={'toolkit_name': True,
|
51
|
+
'max_toolkit_length': SlackToolkit.toolkit_max_length,
|
52
|
+
'configuration': True,
|
53
|
+
'configuration_title': True})),
|
54
|
+
slack_token=(SecretStr, Field(description="Slack Token like XOXB-*****-*****-*****-*****",
|
55
|
+
json_schema_extra={'secret': True, 'configuration': True})),
|
56
|
+
channel_id=(str, Field(description="Channel ID", json_schema_extra={'configuration': True})),
|
57
|
+
selected_tools=(List[Literal[tuple(selected_tools)]],
|
58
|
+
Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
59
|
+
__config__={'json_schema_extra': {'metadata': {"label": "Slack", "icon_url": "slack-icon.svg"}}}
|
60
|
+
)
|
55
61
|
model.check_connection = check_connection
|
56
62
|
return model
|
57
63
|
|
@@ -1,14 +1,13 @@
|
|
1
1
|
from typing import List, Literal, Optional
|
2
2
|
|
3
|
-
from
|
4
|
-
from langchain_core.tools import BaseTool
|
3
|
+
from langchain_core.tools import BaseToolkit, BaseTool
|
5
4
|
from pydantic import create_model, BaseModel, Field, SecretStr
|
6
5
|
|
7
6
|
from .api_wrapper import ZephyrSquadApiWrapper
|
8
7
|
from ..base.tool import BaseAction
|
9
8
|
from ..utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length
|
10
9
|
|
11
|
-
name = "
|
10
|
+
name = "zephyr_squad"
|
12
11
|
|
13
12
|
def get_tools(tool):
|
14
13
|
return ZephyrSquadToolkit().get_toolkit(
|
@@ -28,10 +27,10 @@ class ZephyrSquadToolkit(BaseToolkit):
|
|
28
27
|
selected_tools = {x['name']: x['args_schema'].schema() for x in ZephyrSquadApiWrapper.model_construct().get_available_tools()}
|
29
28
|
ZephyrSquadToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
|
30
29
|
return create_model(
|
31
|
-
|
30
|
+
name,
|
32
31
|
account_id=(str, Field(description="AccountID for the user that is going to be authenticating")),
|
33
|
-
access_key=(
|
34
|
-
secret_key=(SecretStr, Field(description="Generated secret key")),
|
32
|
+
access_key=(SecretStr, Field(description="Generated access key", json_schema_extra={'secret': True})),
|
33
|
+
secret_key=(SecretStr, Field(description="Generated secret key", json_schema_extra={'secret': True})),
|
35
34
|
selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
36
35
|
__config__={'json_schema_extra': {'metadata': {"label": "Zephyr Squad", "icon_url": "zephyr.svg",
|
37
36
|
"categories": ["test management"],
|
@@ -0,0 +1,319 @@
|
|
1
|
+
from typing import List, Literal
|
2
|
+
|
3
|
+
from pydantic import model_validator, create_model, Field, SecretStr, BaseModel, PrivateAttr
|
4
|
+
|
5
|
+
from .zephyr_squad_cloud_client import ZephyrSquadCloud
|
6
|
+
from ..elitea_base import BaseToolApiWrapper
|
7
|
+
|
8
|
+
|
9
|
+
class ZephyrSquadApiWrapper(BaseToolApiWrapper):
|
10
|
+
account_id: str
|
11
|
+
access_key: str
|
12
|
+
secret_key: SecretStr
|
13
|
+
_client: ZephyrSquadCloud = PrivateAttr()
|
14
|
+
|
15
|
+
@model_validator(mode='before')
|
16
|
+
@classmethod
|
17
|
+
def validate_toolkit(cls, values):
|
18
|
+
account_id = values.get("account_id", None)
|
19
|
+
access_key = values.get("access_key", None)
|
20
|
+
secret_key = values.get("secret_key", None)
|
21
|
+
if not account_id:
|
22
|
+
raise ValueError("account_id is required.")
|
23
|
+
if not access_key:
|
24
|
+
raise ValueError("access_key is required.")
|
25
|
+
if not secret_key:
|
26
|
+
raise ValueError("secret_key is required.")
|
27
|
+
cls._client = ZephyrSquadCloud(
|
28
|
+
account_id=account_id,
|
29
|
+
access_key=access_key,
|
30
|
+
secret_key=secret_key
|
31
|
+
)
|
32
|
+
return values
|
33
|
+
|
34
|
+
def get_test_step(self, issue_id, step_id, project_id):
|
35
|
+
"""Retrieve details for a specific test step in a Jira test case."""
|
36
|
+
return self._client.get_test_step(issue_id, step_id, project_id)
|
37
|
+
|
38
|
+
def update_test_step(self, issue_id, step_id, project_id, json):
|
39
|
+
"""Update the content or a specific test step in a Jira test case."""
|
40
|
+
return self._client.update_test_step(issue_id, step_id, project_id, json)
|
41
|
+
|
42
|
+
def delete_test_step(self, issue_id, step_id, project_id):
|
43
|
+
"""Remove a specific test step from a Jira test case."""
|
44
|
+
return self._client.delete_test_step(issue_id, step_id, project_id)
|
45
|
+
|
46
|
+
def create_new_test_step(self, issue_id, project_id, json):
|
47
|
+
"""Add a new test step to a Jira test case."""
|
48
|
+
return self._client.create_new_test_step(issue_id, project_id, json)
|
49
|
+
|
50
|
+
def get_all_test_steps(self, issue_id, project_id):
|
51
|
+
"""List all test steps associated with a Jira test case."""
|
52
|
+
return self._client.get_all_test_steps(issue_id, project_id)
|
53
|
+
|
54
|
+
def get_all_test_step_statuses(self):
|
55
|
+
"""Retrieve all possible statuses for test steps in Jira."""
|
56
|
+
return self._client.get_all_test_step_statuses()
|
57
|
+
|
58
|
+
def get_bdd_content(self, issue_id):
|
59
|
+
"""Retrieve BDD (Gherkin) content of an issue (feature or scenario)."""
|
60
|
+
return self._client.get_bdd_content(issue_id)
|
61
|
+
|
62
|
+
def update_bdd_content(self, issue_id, new_content):
|
63
|
+
"""Replace BDD (Gherkin) content of an issue (feature or scenario)."""
|
64
|
+
return self._client.update_bdd_content(issue_id, new_content)
|
65
|
+
|
66
|
+
def delete_bdd_content(self, issue_id):
|
67
|
+
"""Remove BDD (Gherkin) content of an issue (feature or scenario)."""
|
68
|
+
return self._client.delete_bdd_content(issue_id)
|
69
|
+
|
70
|
+
def create_new_cycle(self, json):
|
71
|
+
"""Creates a Cycle from a JSON representation. If no VersionId is passed in the request, it will be defaulted to an unscheduled version"""
|
72
|
+
return self._client.create_new_cycle(json)
|
73
|
+
|
74
|
+
def create_folder(self, json):
|
75
|
+
"""Creates a Folder from a JSON representation. Folder names within a cycle needs to be unique."""
|
76
|
+
return self._client.create_folder(json)
|
77
|
+
|
78
|
+
def add_test_to_cycle(self, cycle_id, json):
|
79
|
+
"""Adds Tests(s) to a Cycle."""
|
80
|
+
return self._client.add_test_to_cycle(cycle_id, json)
|
81
|
+
|
82
|
+
def add_test_to_folder(self, folder_id, json):
|
83
|
+
"""Adds Tests(s) to a Folder."""
|
84
|
+
return self._client.add_test_to_folder(folder_id, json)
|
85
|
+
|
86
|
+
def create_execution(self, json):
|
87
|
+
"""Creates an execution from a JSON representation."""
|
88
|
+
return self._client.create_execution(json)
|
89
|
+
|
90
|
+
def get_execution(self, execution_id, issue_id, project_id):
|
91
|
+
"""Retrieves Execution and ExecutionStatus by ExecutionId"""
|
92
|
+
return self._client.get_execution(execution_id, issue_id, project_id)
|
93
|
+
|
94
|
+
def get_available_tools(self):
|
95
|
+
return [
|
96
|
+
{
|
97
|
+
"name": "get_test_step",
|
98
|
+
"description": self.get_test_step.__doc__,
|
99
|
+
"args_schema": ProjectIssueStep,
|
100
|
+
"ref": self.get_test_step,
|
101
|
+
},
|
102
|
+
{
|
103
|
+
"name": "update_test_step",
|
104
|
+
"description": self.update_test_step.__doc__,
|
105
|
+
"args_schema": UpdateTestStep,
|
106
|
+
"ref": self.update_test_step,
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"name": "delete_test_step",
|
110
|
+
"description": self.delete_test_step.__doc__,
|
111
|
+
"args_schema": ProjectIssueStep,
|
112
|
+
"ref": self.delete_test_step,
|
113
|
+
},
|
114
|
+
{
|
115
|
+
"name": "create_new_test_step",
|
116
|
+
"description": self.create_new_test_step.__doc__,
|
117
|
+
"args_schema": CreateNewTestStep,
|
118
|
+
"ref": self.create_new_test_step,
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"name": "get_all_test_steps",
|
122
|
+
"description": self.get_all_test_steps.__doc__,
|
123
|
+
"args_schema": ProjectIssue,
|
124
|
+
"ref": self.get_all_test_steps,
|
125
|
+
},
|
126
|
+
{
|
127
|
+
"name": "get_all_test_step_statuses",
|
128
|
+
"description": self.get_all_test_step_statuses.__doc__,
|
129
|
+
"args_schema": create_model("NoInput"),
|
130
|
+
"ref": self.get_all_test_step_statuses,
|
131
|
+
},
|
132
|
+
{
|
133
|
+
"name": "get_bdd_content",
|
134
|
+
"description": self.get_bdd_content.__doc__,
|
135
|
+
"args_schema": Issue,
|
136
|
+
"ref": self.get_bdd_content,
|
137
|
+
},
|
138
|
+
{
|
139
|
+
"name": "update_bdd_content",
|
140
|
+
"description": self.update_bdd_content.__doc__,
|
141
|
+
"args_schema": UpdateBddContent,
|
142
|
+
"ref": self.update_bdd_content,
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"name": "delete_bdd_content",
|
146
|
+
"description": self.delete_bdd_content.__doc__,
|
147
|
+
"args_schema": Issue,
|
148
|
+
"ref": self.delete_bdd_content,
|
149
|
+
},
|
150
|
+
{
|
151
|
+
"name": "create_new_cycle",
|
152
|
+
"description": self.create_new_cycle.__doc__,
|
153
|
+
"args_schema": CycleJson,
|
154
|
+
"ref": self.create_new_cycle,
|
155
|
+
},
|
156
|
+
{
|
157
|
+
"name": "create_folder",
|
158
|
+
"description": self.create_folder.__doc__,
|
159
|
+
"args_schema": FolderJson,
|
160
|
+
"ref": self.create_folder,
|
161
|
+
},
|
162
|
+
{
|
163
|
+
"name": "add_test_to_cycle",
|
164
|
+
"description": self.add_test_to_cycle.__doc__,
|
165
|
+
"args_schema": TestToCycle,
|
166
|
+
"ref": self.add_test_to_cycle,
|
167
|
+
},
|
168
|
+
{
|
169
|
+
"name": "add_test_to_folder",
|
170
|
+
"description": self.add_test_to_folder.__doc__,
|
171
|
+
"args_schema": TestToFolder,
|
172
|
+
"ref": self.add_test_to_folder,
|
173
|
+
},
|
174
|
+
{
|
175
|
+
"name": "create_execution",
|
176
|
+
"description": self.create_execution.__doc__,
|
177
|
+
"args_schema": ExecutionJson,
|
178
|
+
"ref": self.create_execution,
|
179
|
+
},
|
180
|
+
{
|
181
|
+
"name": "get_execution",
|
182
|
+
"description": self.get_execution.__doc__,
|
183
|
+
"args_schema": GetExecution,
|
184
|
+
"ref": self.get_execution,
|
185
|
+
}
|
186
|
+
]
|
187
|
+
|
188
|
+
|
189
|
+
Issue = create_model(
|
190
|
+
"Issue",
|
191
|
+
issue_id=(int, Field(description="Jira ticket id of test case."))
|
192
|
+
)
|
193
|
+
|
194
|
+
ProjectIssue = create_model(
|
195
|
+
"ProjectIssue",
|
196
|
+
project_id=(int, Field(description="Jira project id to which test case belongs.")),
|
197
|
+
__base__=Issue
|
198
|
+
)
|
199
|
+
|
200
|
+
ProjectIssueStep = create_model(
|
201
|
+
"ProjectIssueStep",
|
202
|
+
step_id=(str, Field(description="Test step id to operate.")),
|
203
|
+
__base__=ProjectIssue
|
204
|
+
)
|
205
|
+
|
206
|
+
UpdateTestStep = create_model(
|
207
|
+
"UpdateTestStep",
|
208
|
+
json=(str, Field(description=(
|
209
|
+
"JSON body to update a Zephyr test step. Fields:\n"
|
210
|
+
"- id (string, required): Unique identifier for the test step. Example: \"0001481146115453-3a0480a3ffffc384-0001\"\n"
|
211
|
+
"- step (string, required): Description of the test step. Example: \"Sample Test Step\"\n"
|
212
|
+
"- data (string, optional): Test data used in this step. Example: \"Sample Test Data\"\n"
|
213
|
+
"- result (string, optional): Expected result after executing the step. Example: \"Expected Test Result\"\n"
|
214
|
+
"- customFieldValues (array[object], optional): List of custom field values for the test step. Each object contains:\n"
|
215
|
+
" - customFieldId (string, required): ID of the custom field. Example: \"3ce1c679-7c43-4d37-89f6-757603379e31\"\n"
|
216
|
+
" - value (object, required): Value for the custom field. Example: {\"value\": \"08/21/2018\"}\n"
|
217
|
+
"*IMPORTANT*: Use double quotes for all field names and string values."))),
|
218
|
+
__base__=ProjectIssueStep
|
219
|
+
)
|
220
|
+
|
221
|
+
CreateNewTestStep = create_model(
|
222
|
+
"CreateNewTestStep",
|
223
|
+
json=(str, Field(description=(
|
224
|
+
"JSON body to create a Zephyr test step. Fields:\n"
|
225
|
+
"- step (string, required): Description of the test step. Example: \"Sample Test Step\"\n"
|
226
|
+
"- data (string, optional): Test data used in this step. Example: \"Sample Test Data\"\n"
|
227
|
+
"- result (string, optional): Expected result after executing the step. Example: \"Expected Test Result\"\n"
|
228
|
+
"*IMPORTANT*: Use double quotes for all field names and string values."))),
|
229
|
+
__base__=ProjectIssue
|
230
|
+
)
|
231
|
+
|
232
|
+
UpdateBddContent = create_model(
|
233
|
+
"UpdateTestStep",
|
234
|
+
new_content=(str, Field(description=(
|
235
|
+
"String containing a Gherkin scenario or a feature background.\n"
|
236
|
+
"New lines must be encoded as \\n or \\r\\n, and other characters that have special meaning in JSON strings must be escaped accordingly"))),
|
237
|
+
__base__=Issue
|
238
|
+
)
|
239
|
+
|
240
|
+
CycleJson = create_model(
|
241
|
+
"CycleJson",
|
242
|
+
json=(str, Field(description=(
|
243
|
+
"JSON body to create a Zephyr test cycle. Fields:\n"
|
244
|
+
"- name (string, required): Test cycle name. Example: \"Test Cycle\"\n"
|
245
|
+
"- build (string, optional): Build name. Example: \"build 1.0\"\n"
|
246
|
+
"- environment (string, optional): Environment name. Example: \"Bug Fix\"\n"
|
247
|
+
"- description (string, optional): Cycle description. Example: \"This contains the zephyr tests for a version\"\n"
|
248
|
+
"- startDate (long, optional): Start date as a Unix timestamp. Example: 1485278607\n"
|
249
|
+
"- endDate (long, optional): End date as a Unix timestamp. Example: 1485302400\n"
|
250
|
+
"- projectId (integer, required): Project ID. Example: 10100\n"
|
251
|
+
"- versionId (integer, required): Version ID. Example: 10000\n"
|
252
|
+
"*IMPORTANT*: Use double quotes for all field names and string values.")))
|
253
|
+
)
|
254
|
+
|
255
|
+
FolderJson = create_model(
|
256
|
+
"FolderJson",
|
257
|
+
json=(str, Field(description=(
|
258
|
+
"JSON body to create a Zephyr folder. Fields:\n"
|
259
|
+
"- name (string, required): Folder name. Example: \"Folder 01\"\n"
|
260
|
+
"- description (string, optional): Folder description. Example: \"Create New Folder\"\n"
|
261
|
+
"- cycleId (string, required): Cycle ID. Example: \"0001513838430954-242ac112-0001\"\n"
|
262
|
+
"- projectId (integer, required): Project ID. Example: 10100\n"
|
263
|
+
"- versionId (integer, required): Version ID. Example: 10000\n"
|
264
|
+
"*IMPORTANT*: Use double quotes for all field names and string values.")))
|
265
|
+
)
|
266
|
+
|
267
|
+
ExecutionJson = create_model(
|
268
|
+
"ExecutionJson",
|
269
|
+
json=(str, Field(description=(
|
270
|
+
"JSON body for Zephyr operation. Fields:\n"
|
271
|
+
"- status (object, optional): Status object. Example: {\"id\": 1}\n"
|
272
|
+
"- id (string, optional): Unique identifier. Example: \"0001456664462103-5aoee13a3fob-0001\"\n"
|
273
|
+
"- projectId (integer, required): Project ID. Example: 10000\n"
|
274
|
+
"- issueId (integer, required): Issue ID. Example: 10000\n"
|
275
|
+
"- cycleId (string, optional): Cycle ID. Example: \"0001456664262308-5a6ee13a3f6b-0001\"\n"
|
276
|
+
"- versionId (integer, required): Version ID. Example: -1\n"
|
277
|
+
"- assigneeType (string, optional): \"currentUser\" or \"assignee\". Example: \"assignee\"\n"
|
278
|
+
"- assignee (string, optional): Assignee name if assigneeType is \"assignee\". Example: \"jiraUserKey\"\n"
|
279
|
+
"*IMPORTANT*: Use double quotes for all field names and string values.")))
|
280
|
+
)
|
281
|
+
|
282
|
+
TestToCycle = create_model(
|
283
|
+
"TestToCycle",
|
284
|
+
step_id=(str, Field(description="Test step id to operate.")),
|
285
|
+
json=(str, Field(description=(
|
286
|
+
"JSON body for Zephyr operation. Fields:\n"
|
287
|
+
"- issues (array[string], required if method=1): List of Jira issue keys. Example: [\"TEST-1\"]\n"
|
288
|
+
"- jql (string, required if method=2): JQL query string. Example: \"project = DEMO AND type = Test AND reporter = admin\"\n"
|
289
|
+
"- versionId (integer, required): Version ID. Example: -1\n"
|
290
|
+
"- projectId (integer, required): Project ID. Example: 10000\n"
|
291
|
+
"- fromVersionId (integer, required if method=3): Source Version ID. Example: -1\n"
|
292
|
+
"- fromCycleId (string, required if method=3): Source Cycle ID. Example: \"-0001484006184518-242ac112-0001\"\n"
|
293
|
+
"- statuses (string, optional, used when method=3): Statuses. Example: \"-1\"\n"
|
294
|
+
"- priorities (string, optional, used when method=3): Priorities (comma-separated). Example: \"1,4\"\n"
|
295
|
+
"- labels (string, optional, used when method=3): Labels (comma-separated). Example: \"-High,dock\"\n"
|
296
|
+
"- method (string, required): Operation method. Example: \"1\"\n"
|
297
|
+
"*IMPORTANT*: Use double quotes for all field names and string values.")))
|
298
|
+
)
|
299
|
+
|
300
|
+
TestToFolder = create_model(
|
301
|
+
"TestToFolder",
|
302
|
+
step_id=(str, Field(description="folderId of Execution.")),
|
303
|
+
json=(str, Field(description=(
|
304
|
+
"JSON body to update a Zephyr test step. Fields:\n"
|
305
|
+
"- issues (array[string], required): List of Jira issue keys. Example: [\"FSC-2\", \"FSC-3\"]\n"
|
306
|
+
"- assigneeType (string, required): Type of assignee. Example: \"currentUser\"\n"
|
307
|
+
"- method (integer, required): Method identifier. Example: 1\n"
|
308
|
+
"- versionId (integer, required): Version ID. Example: 12829\n"
|
309
|
+
"- projectId (integer, required): Project ID. Example: 10930\n"
|
310
|
+
"- cycleId (string, required): Cycle ID. Example: \"0001513838430954-242ac112-0001\"\n"
|
311
|
+
"*IMPORTANT*: Use double quotes for all field names and string values.")))
|
312
|
+
)
|
313
|
+
|
314
|
+
GetExecution = create_model(
|
315
|
+
"GetExecution",
|
316
|
+
execution_id=(str, Field(description="executionId of Execution.")),
|
317
|
+
issue_id=(int, Field(description="issueId of Execution.")),
|
318
|
+
project_id=(int, Field(description="projectId of Execution."))
|
319
|
+
)
|
{alita_sdk-0.3.193 → alita_sdk-0.3.195}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py
RENAMED
@@ -1,4 +1,5 @@
|
|
1
1
|
import hashlib
|
2
|
+
import json
|
2
3
|
import time
|
3
4
|
|
4
5
|
import jwt
|
@@ -18,44 +19,79 @@ class ZephyrSquadCloud(object):
|
|
18
19
|
self.base_url = "https://prod-api.zephyr4jiracloud.com/connect"
|
19
20
|
|
20
21
|
def get_test_step(self, issue_id, step_id, project_id):
|
21
|
-
canonical_path = "/public/rest/api/1.0/teststep/issueId/id?projectId="
|
22
22
|
api_path = f"/public/rest/api/1.0/teststep/{issue_id}/{step_id}?projectId={project_id}"
|
23
|
-
return self._do_request(method="GET", api_path=api_path
|
23
|
+
return self._do_request(method="GET", api_path=api_path)
|
24
24
|
|
25
25
|
def update_test_step(self, issue_id, step_id, project_id, json):
|
26
|
-
canonical_path = "/public/rest/api/1.0/teststep/issueId/id?projectId="
|
27
26
|
api_path = f"/public/rest/api/1.0/teststep/{issue_id}/{step_id}?projectId={project_id}"
|
28
|
-
return self._do_request(method="PUT", api_path=api_path,
|
27
|
+
return self._do_request(method="PUT", api_path=api_path, json=json)
|
29
28
|
|
30
29
|
def delete_test_step(self, issue_id, step_id, project_id):
|
31
|
-
canonical_path = "/public/rest/api/1.0/teststep/issueId/id?projectId="
|
32
30
|
api_path = f"/public/rest/api/1.0/teststep/{issue_id}/{step_id}?projectId={project_id}"
|
33
|
-
return self._do_request(method="DELETE", api_path=api_path
|
31
|
+
return self._do_request(method="DELETE", api_path=api_path)
|
34
32
|
|
35
33
|
def create_new_test_step(self, issue_id, project_id, json):
|
36
|
-
canonical_path = "/public/rest/api/1.0/teststep/issueId?projectId="
|
37
34
|
api_path = f"/public/rest/api/1.0/teststep/{issue_id}?projectId={project_id}"
|
38
|
-
return self._do_request(method="POST", api_path=api_path,
|
35
|
+
return self._do_request(method="POST", api_path=api_path, json=json)
|
39
36
|
|
40
37
|
def get_all_test_steps(self, issue_id, project_id):
|
41
|
-
canonical_path = "/public/rest/api/2.0/teststep/issueId?projectId="
|
42
38
|
api_path = f"/public/rest/api/2.0/teststep/{issue_id}?projectId={project_id}"
|
43
|
-
return self._do_request(method='GET', api_path=api_path
|
39
|
+
return self._do_request(method='GET', api_path=api_path)
|
44
40
|
|
45
41
|
def get_all_test_step_statuses(self):
|
46
42
|
api_path = "/public/rest/api/1.0/teststep/statuses"
|
47
43
|
return self._do_request(method='GET', api_path=api_path)
|
48
44
|
|
49
|
-
def
|
45
|
+
def get_bdd_content(self, issue_id):
|
46
|
+
api_path = f"/public/rest/api/1.0/integration/bddcontent/{issue_id}"
|
47
|
+
return self._do_request(method='GET', api_path=api_path)
|
48
|
+
|
49
|
+
def update_bdd_content(self, issue_id, new_content: str):
|
50
|
+
api_path = f"/public/rest/api/1.0/integration/bddcontent/{issue_id}"
|
51
|
+
return self._do_request(method='POST', api_path=api_path, json=json.dumps({"content": new_content}))
|
52
|
+
|
53
|
+
def delete_bdd_content(self, issue_id):
|
54
|
+
api_path = f"/public/rest/api/1.0/integration/bddcontent/{issue_id}"
|
55
|
+
return self._do_request(method='DELETE', api_path=api_path, json="[]")
|
56
|
+
|
57
|
+
def create_new_cycle(self, json):
|
58
|
+
api_path = f"public/rest/api/1.0/cycle"
|
59
|
+
return self._do_request(method='POST', api_path=api_path, json=json)
|
60
|
+
|
61
|
+
def create_folder(self, json):
|
62
|
+
api_path = f"/public/rest/api/1.0/folder"
|
63
|
+
return self._do_request(method='POST', api_path=api_path, json=json)
|
64
|
+
|
65
|
+
def add_test_to_cycle(self, cycle_id, json):
|
66
|
+
api_path = f"/public/rest/api/1.0/executions/add/cycle/{cycle_id}"
|
67
|
+
return self._do_request(method='POST', api_path=api_path, json=json)
|
68
|
+
|
69
|
+
def add_test_to_folder(self, folder_id, json):
|
70
|
+
api_path = f"/public/rest/api/1.0/executions/add/folder/{folder_id}"
|
71
|
+
return self._do_request(method='POST', api_path=api_path, json=json)
|
72
|
+
|
73
|
+
def create_execution(self, json):
|
74
|
+
api_path = f"/public/rest/api/1.0/execution"
|
75
|
+
return self._do_request(method='POST', api_path=api_path, json=json)
|
76
|
+
|
77
|
+
def get_execution(self, execution_id, issue_id, project_id):
|
78
|
+
api_path = f"/public/rest/api/1.0/execution/{execution_id}?issueId={issue_id}&projectId={project_id}"
|
79
|
+
return self._do_request(method='GET', api_path=api_path)
|
80
|
+
|
81
|
+
def _do_request(self, method, api_path, json=None):
|
50
82
|
url = f"{self.base_url}{api_path}"
|
51
83
|
headers = {
|
52
|
-
"Authorization": f"JWT {self._generate_jwt_token(method,
|
53
|
-
"zapiAccessKey": self.access_key
|
54
|
-
"Content-Type": "application/json"
|
84
|
+
"Authorization": f"JWT {self._generate_jwt_token(method, api_path)}",
|
85
|
+
"zapiAccessKey": self.access_key
|
55
86
|
}
|
87
|
+
if json is not None:
|
88
|
+
headers["Content-Type"] = "application/json"
|
89
|
+
params = {"method": method, "url": url, "headers": headers}
|
90
|
+
if json is not None:
|
91
|
+
params["data"] = json
|
56
92
|
|
57
93
|
try:
|
58
|
-
resp = requests.request(
|
94
|
+
resp = requests.request(**params)
|
59
95
|
|
60
96
|
if resp.ok:
|
61
97
|
if resp.headers.get("Content-Type", "").startswith("application/json"):
|
@@ -68,12 +104,16 @@ class ZephyrSquadCloud(object):
|
|
68
104
|
raise ToolException(f"Error performing request {method}:{api_path}: {e}")
|
69
105
|
|
70
106
|
def _generate_jwt_token(self, method, path):
|
71
|
-
canonical_path = f"{method}&{path}&
|
107
|
+
canonical_path = f"{method}&{path}".replace('?', '&')
|
108
|
+
|
109
|
+
if '&' not in path and '?' not in path:
|
110
|
+
canonical_path += '&'
|
111
|
+
|
72
112
|
payload_token = {
|
73
113
|
'sub': self.account_id,
|
74
114
|
'qsh': hashlib.sha256(canonical_path.encode('utf-8')).hexdigest(),
|
75
115
|
'iss': self.access_key,
|
76
|
-
'exp': int(time.time()) +
|
116
|
+
'exp': int(time.time()) + 300,
|
77
117
|
'iat': int(time.time())
|
78
118
|
}
|
79
119
|
return jwt.encode(payload_token, self.secret_key, algorithm='HS256').strip()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.195
|
4
4
|
Summary: SDK for building langchain agents using resources from Alita
|
5
5
|
Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
|
6
6
|
License-Expression: Apache-2.0
|