alita-sdk 0.3.185__tar.gz → 0.3.186__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.185 → alita_sdk-0.3.186}/PKG-INFO +1 -1
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/repos/__init__.py +6 -5
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/test_plan/__init__.py +5 -3
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +26 -35
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/wiki/__init__.py +3 -2
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/work_item/__init__.py +3 -2
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/bitbucket/api_wrapper.py +63 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +143 -2
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/bitbucket/tools.py +78 -2
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/pyproject.toml +1 -1
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/LICENSE +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/README.md +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/clients/client.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/assistant.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/llms/alita.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/tools.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/slack/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/slack/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk.egg-info/SOURCES.txt +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/setup.cfg +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.185 → alita_sdk-0.3.186}/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.186
|
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
|
@@ -46,19 +46,19 @@ class AzureDevOpsReposToolkit(BaseToolkit):
|
|
46
46
|
AzureDevOpsReposToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
|
47
47
|
m = create_model(
|
48
48
|
name,
|
49
|
-
organization_url=(
|
49
|
+
organization_url=(str, Field(title="Organization URL",
|
50
50
|
description="ADO organization url",
|
51
51
|
json_schema_extra={
|
52
52
|
'configuration': True,
|
53
53
|
"configuration_title": True
|
54
54
|
})),
|
55
|
-
project=(
|
56
|
-
repository_id=(
|
55
|
+
project=(str, Field(title="Project", description="ADO project", json_schema_extra={'configuration': True})),
|
56
|
+
repository_id=(str, Field(title="Repository ID", description="ADO repository ID",
|
57
57
|
json_schema_extra={
|
58
58
|
'toolkit_name': True,
|
59
59
|
'max_toolkit_length': AzureDevOpsReposToolkit.toolkit_max_length,
|
60
60
|
'configuration': True})),
|
61
|
-
token=(
|
61
|
+
token=(SecretStr, Field(title="Token", description="ADO token", json_schema_extra={'secret': True, 'configuration': True})),
|
62
62
|
base_branch=(Optional[str], Field(default="", title="Base branch", description="ADO base branch (e.g., main)")),
|
63
63
|
active_branch=(Optional[str], Field(default="", title="Active branch", description="ADO active branch (e.g., main)")),
|
64
64
|
|
@@ -84,7 +84,8 @@ class AzureDevOpsReposToolkit(BaseToolkit):
|
|
84
84
|
}
|
85
85
|
},
|
86
86
|
"categories": ["code repositories"],
|
87
|
-
"extra_categories": ["code", "repository", "version control"]
|
87
|
+
"extra_categories": ["code", "repository", "version control"],
|
88
|
+
"configuration_group": "ado-repos",
|
88
89
|
}}}
|
89
90
|
)
|
90
91
|
|
@@ -24,12 +24,13 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
|
|
24
24
|
m = create_model(
|
25
25
|
name_alias,
|
26
26
|
name=(str, Field(description="Toolkit name", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': AzureDevOpsPlansToolkit.toolkit_max_length})),
|
27
|
-
organization_url=(str, Field(
|
27
|
+
organization_url=(str, Field(title="Organization URL",
|
28
28
|
description="ADO organization url",
|
29
29
|
json_schema_extra={
|
30
30
|
'configuration': True,
|
31
|
-
|
31
|
+
'configuration_title': True
|
32
32
|
})),
|
33
|
+
project=(str, Field(title="Project", description="ADO project", json_schema_extra={'configuration': True})),
|
33
34
|
limit=(Optional[int], Field(description="ADO plans limit used for limitation of the list with results", default=5)),
|
34
35
|
token=(SecretStr, Field(description="ADO token", json_schema_extra={'secret': True, 'configuration': True})),
|
35
36
|
selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
@@ -49,7 +50,8 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
|
|
49
50
|
}
|
50
51
|
]
|
51
52
|
}
|
52
|
-
}
|
53
|
+
},
|
54
|
+
"configuration_group": "ado",
|
53
55
|
}
|
54
56
|
}
|
55
57
|
}
|
@@ -20,19 +20,16 @@ logger = logging.getLogger(__name__)
|
|
20
20
|
# Input models for Test Plan operations
|
21
21
|
TestPlanCreateModel = create_model(
|
22
22
|
"TestPlanCreateModel",
|
23
|
-
test_plan_create_params=(str, Field(description="JSON of the test plan create parameters"))
|
24
|
-
project=(str, Field(description="Project ID or project name"))
|
23
|
+
test_plan_create_params=(str, Field(description="JSON of the test plan create parameters"))
|
25
24
|
)
|
26
25
|
|
27
26
|
TestPlanDeleteModel = create_model(
|
28
27
|
"TestPlanDeleteModel",
|
29
|
-
project=(str, Field(description="Project ID or project name")),
|
30
28
|
plan_id=(int, Field(description="ID of the test plan to be deleted"))
|
31
29
|
)
|
32
30
|
|
33
31
|
TestPlanGetModel = create_model(
|
34
32
|
"TestPlanGetModel",
|
35
|
-
project=(str, Field(description="Project ID or project name")),
|
36
33
|
plan_id=(Optional[int], Field(description="ID of the test plan to get", default=None))
|
37
34
|
)
|
38
35
|
|
@@ -77,20 +74,17 @@ TestSuiteCreateModel = create_model(
|
|
77
74
|
'name':'str'
|
78
75
|
}
|
79
76
|
""")),
|
80
|
-
project=(str, Field(description="Project ID or project name")),
|
81
77
|
plan_id=(int, Field(description="ID of the test plan that contains the suites"))
|
82
78
|
)
|
83
79
|
|
84
80
|
TestSuiteDeleteModel = create_model(
|
85
81
|
"TestSuiteDeleteModel",
|
86
|
-
project=(str, Field(description="Project ID or project name")),
|
87
82
|
plan_id=(int, Field(description="ID of the test plan that contains the suite")),
|
88
83
|
suite_id=(int, Field(description="ID of the test suite to delete"))
|
89
84
|
)
|
90
85
|
|
91
86
|
TestSuiteGetModel = create_model(
|
92
87
|
"TestSuiteGetModel",
|
93
|
-
project=(str, Field(description="Project ID or project name")),
|
94
88
|
plan_id=(int, Field(description="ID of the test plan that contains the suites")),
|
95
89
|
suite_id=(Optional[int], Field(description="ID of the suite to get", default=None))
|
96
90
|
)
|
@@ -98,14 +92,12 @@ TestSuiteGetModel = create_model(
|
|
98
92
|
TestCaseAddModel = create_model(
|
99
93
|
"TestCaseAddModel",
|
100
94
|
suite_test_case_create_update_parameters=(str, Field(description='JSON array of the suite test case create update parameters. Example: \"[{"work_item":{"id":"23"}}]\"')),
|
101
|
-
project=(str, Field(description="Project ID or project name")),
|
102
95
|
plan_id=(int, Field(description="ID of the test plan to which test cases are to be added")),
|
103
96
|
suite_id=(int, Field(description="ID of the test suite to which test cases are to be added"))
|
104
97
|
)
|
105
98
|
|
106
99
|
TestCaseCreateModel = create_model(
|
107
100
|
"TestCaseCreateModel",
|
108
|
-
project=(str, Field(description="Project ID or project name")),
|
109
101
|
plan_id=(int, Field(description="ID of the test plan to which test cases are to be added")),
|
110
102
|
suite_id=(int, Field(description="ID of the test suite to which test cases are to be added")),
|
111
103
|
title=(str, Field(description="Test case title")),
|
@@ -115,7 +107,6 @@ TestCaseCreateModel = create_model(
|
|
115
107
|
|
116
108
|
TestCaseGetModel = create_model(
|
117
109
|
"TestCaseGetModel",
|
118
|
-
project=(str, Field(description="Project ID or project name")),
|
119
110
|
plan_id=(int, Field(description="ID of the test plan for which test cases are requested")),
|
120
111
|
suite_id=(int, Field(description="ID of the test suite for which test cases are requested")),
|
121
112
|
test_case_id=(str, Field(description="Test Case Id to be fetched"))
|
@@ -123,7 +114,6 @@ TestCaseGetModel = create_model(
|
|
123
114
|
|
124
115
|
TestCasesGetModel = create_model(
|
125
116
|
"TestCasesGetModel",
|
126
|
-
project=(str, Field(description="Project ID or project name")),
|
127
117
|
plan_id=(int, Field(description="ID of the test plan for which test cases are requested")),
|
128
118
|
suite_id=(int, Field(description="ID of the test suite for which test cases are requested"))
|
129
119
|
)
|
@@ -131,6 +121,7 @@ TestCasesGetModel = create_model(
|
|
131
121
|
class TestPlanApiWrapper(BaseToolApiWrapper):
|
132
122
|
__test__ = False
|
133
123
|
organization_url: str
|
124
|
+
project: str
|
134
125
|
token: SecretStr
|
135
126
|
limit: Optional[int] = 5
|
136
127
|
_client: Optional[TestPlanClient] = PrivateAttr()
|
@@ -148,90 +139,90 @@ class TestPlanApiWrapper(BaseToolApiWrapper):
|
|
148
139
|
raise ImportError(f"Failed to connect to Azure DevOps: {e}")
|
149
140
|
return values
|
150
141
|
|
151
|
-
def create_test_plan(self, test_plan_create_params: str
|
142
|
+
def create_test_plan(self, test_plan_create_params: str):
|
152
143
|
"""Create a test plan in Azure DevOps."""
|
153
144
|
try:
|
154
145
|
params = json.loads(test_plan_create_params)
|
155
146
|
test_plan_create_params_obj = TestPlanCreateParams(**params)
|
156
|
-
test_plan = self._client.create_test_plan(test_plan_create_params_obj, project)
|
147
|
+
test_plan = self._client.create_test_plan(test_plan_create_params_obj, self.project)
|
157
148
|
return f"Test plan {test_plan.id} created successfully."
|
158
149
|
except Exception as e:
|
159
150
|
logger.error(f"Error creating test plan: {e}")
|
160
151
|
return ToolException(f"Error creating test plan: {e}")
|
161
152
|
|
162
|
-
def delete_test_plan(self,
|
153
|
+
def delete_test_plan(self, plan_id: int):
|
163
154
|
"""Delete a test plan in Azure DevOps."""
|
164
155
|
try:
|
165
|
-
self._client.delete_test_plan(project, plan_id)
|
156
|
+
self._client.delete_test_plan(self.project, plan_id)
|
166
157
|
return f"Test plan {plan_id} deleted successfully."
|
167
158
|
except Exception as e:
|
168
159
|
logger.error(f"Error deleting test plan: {e}")
|
169
160
|
return ToolException(f"Error deleting test plan: {e}")
|
170
161
|
|
171
|
-
def get_test_plan(self,
|
162
|
+
def get_test_plan(self, plan_id: Optional[int] = None):
|
172
163
|
"""Get a test plan or list of test plans in Azure DevOps."""
|
173
164
|
try:
|
174
165
|
if plan_id:
|
175
|
-
test_plan = self._client.get_test_plan_by_id(project, plan_id)
|
166
|
+
test_plan = self._client.get_test_plan_by_id(self.project, plan_id)
|
176
167
|
return test_plan.as_dict()
|
177
168
|
else:
|
178
|
-
test_plans = self._client.get_test_plans(project)
|
169
|
+
test_plans = self._client.get_test_plans(self.project)
|
179
170
|
return [plan.as_dict() for plan in test_plans]
|
180
171
|
except Exception as e:
|
181
172
|
logger.error(f"Error getting test plan(s): {e}")
|
182
173
|
return ToolException(f"Error getting test plan(s): {e}")
|
183
174
|
|
184
|
-
def create_test_suite(self, test_suite_create_params: str,
|
175
|
+
def create_test_suite(self, test_suite_create_params: str, plan_id: int):
|
185
176
|
"""Create a test suite in Azure DevOps."""
|
186
177
|
try:
|
187
178
|
params = json.loads(test_suite_create_params)
|
188
179
|
test_suite_create_params_obj = TestSuiteCreateParams(**params)
|
189
|
-
test_suite = self._client.create_test_suite(test_suite_create_params_obj, project, plan_id)
|
180
|
+
test_suite = self._client.create_test_suite(test_suite_create_params_obj, self.project, plan_id)
|
190
181
|
return f"Test suite {test_suite.id} created successfully."
|
191
182
|
except Exception as e:
|
192
183
|
logger.error(f"Error creating test suite: {e}")
|
193
184
|
return ToolException(f"Error creating test suite: {e}")
|
194
185
|
|
195
|
-
def delete_test_suite(self,
|
186
|
+
def delete_test_suite(self, plan_id: int, suite_id: int):
|
196
187
|
"""Delete a test suite in Azure DevOps."""
|
197
188
|
try:
|
198
|
-
self._client.delete_test_suite(project, plan_id, suite_id)
|
189
|
+
self._client.delete_test_suite(self.project, plan_id, suite_id)
|
199
190
|
return f"Test suite {suite_id} deleted successfully."
|
200
191
|
except Exception as e:
|
201
192
|
logger.error(f"Error deleting test suite: {e}")
|
202
193
|
return ToolException(f"Error deleting test suite: {e}")
|
203
194
|
|
204
|
-
def get_test_suite(self,
|
195
|
+
def get_test_suite(self, plan_id: int, suite_id: Optional[int] = None):
|
205
196
|
"""Get a test suite or list of test suites in Azure DevOps."""
|
206
197
|
try:
|
207
198
|
if suite_id:
|
208
|
-
test_suite = self._client.get_test_suite_by_id(project, plan_id, suite_id)
|
199
|
+
test_suite = self._client.get_test_suite_by_id(self.project, plan_id, suite_id)
|
209
200
|
return test_suite.as_dict()
|
210
201
|
else:
|
211
|
-
test_suites = self._client.get_test_suites_for_plan(project, plan_id)
|
202
|
+
test_suites = self._client.get_test_suites_for_plan(self.project, plan_id)
|
212
203
|
return [suite.as_dict() for suite in test_suites]
|
213
204
|
except Exception as e:
|
214
205
|
logger.error(f"Error getting test suite(s): {e}")
|
215
206
|
return ToolException(f"Error getting test suite(s): {e}")
|
216
207
|
|
217
|
-
def add_test_case(self, suite_test_case_create_update_parameters,
|
208
|
+
def add_test_case(self, suite_test_case_create_update_parameters, plan_id: int, suite_id: int):
|
218
209
|
"""Add a test case to a suite in Azure DevOps."""
|
219
210
|
try:
|
220
211
|
if isinstance(suite_test_case_create_update_parameters, str):
|
221
212
|
suite_test_case_create_update_parameters = json.loads(suite_test_case_create_update_parameters)
|
222
213
|
suite_test_case_create_update_params_obj = [SuiteTestCaseCreateUpdateParameters(**param) for param in suite_test_case_create_update_parameters]
|
223
|
-
test_cases = self._client.add_test_cases_to_suite(suite_test_case_create_update_params_obj, project, plan_id, suite_id)
|
214
|
+
test_cases = self._client.add_test_cases_to_suite(suite_test_case_create_update_params_obj, self.project, plan_id, suite_id)
|
224
215
|
return [test_case.as_dict() for test_case in test_cases]
|
225
216
|
except Exception as e:
|
226
217
|
logger.error(f"Error adding test case: {e}")
|
227
218
|
return ToolException(f"Error adding test case: {e}")
|
228
219
|
|
229
|
-
def create_test_case(self,
|
220
|
+
def create_test_case(self, plan_id: int, suite_id: int, title: str, description: str, test_steps: str):
|
230
221
|
"""Creates a new test case in specified suite in Azure DevOps."""
|
231
|
-
work_item_wrapper = AzureDevOpsApiWrapper(organization_url=self.organization_url, token=self.token.get_secret_value(), project=project)
|
222
|
+
work_item_wrapper = AzureDevOpsApiWrapper(organization_url=self.organization_url, token=self.token.get_secret_value(), project=self.project)
|
232
223
|
work_item_json = self.build_ado_test_case(title, description, json.loads(test_steps))
|
233
224
|
created_work_item_id = work_item_wrapper.create_work_item(work_item_json=json.dumps(work_item_json), wi_type="Test Case")['id']
|
234
|
-
return self.add_test_case([{"work_item":{"id":created_work_item_id}}],
|
225
|
+
return self.add_test_case([{"work_item":{"id":created_work_item_id}}], plan_id, suite_id)
|
235
226
|
|
236
227
|
def build_ado_test_case(self, title, description, steps):
|
237
228
|
"""
|
@@ -259,23 +250,23 @@ class TestPlanApiWrapper(BaseToolApiWrapper):
|
|
259
250
|
}
|
260
251
|
}
|
261
252
|
|
262
|
-
def get_test_case(self,
|
253
|
+
def get_test_case(self, plan_id: int, suite_id: int, test_case_id: str):
|
263
254
|
"""Get a test case from a suite in Azure DevOps."""
|
264
255
|
try:
|
265
|
-
test_cases = self._client.get_test_case(project, plan_id, suite_id, test_case_id)
|
256
|
+
test_cases = self._client.get_test_case(self.project, plan_id, suite_id, test_case_id)
|
266
257
|
if test_cases: # This checks if the list is not empty
|
267
258
|
test_case = test_cases[0]
|
268
259
|
return test_case.as_dict()
|
269
260
|
else:
|
270
|
-
return f"No test cases found per given criteria: project {project}, plan {plan_id}, suite {suite_id}, test case id {test_case_id}"
|
261
|
+
return f"No test cases found per given criteria: project {self.project}, plan {plan_id}, suite {suite_id}, test case id {test_case_id}"
|
271
262
|
except Exception as e:
|
272
263
|
logger.error(f"Error getting test case: {e}")
|
273
264
|
return ToolException(f"Error getting test case: {e}")
|
274
265
|
|
275
|
-
def get_test_cases(self,
|
266
|
+
def get_test_cases(self, plan_id: int, suite_id: int):
|
276
267
|
"""Get test cases from a suite in Azure DevOps."""
|
277
268
|
try:
|
278
|
-
test_cases = self._client.get_test_case_list(project, plan_id, suite_id)
|
269
|
+
test_cases = self._client.get_test_case_list(self.project, plan_id, suite_id)
|
279
270
|
return [test_case.as_dict() for test_case in test_cases]
|
280
271
|
except Exception as e:
|
281
272
|
logger.error(f"Error getting test cases: {e}")
|
@@ -25,7 +25,7 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
|
|
25
25
|
'toolkit_name': True,
|
26
26
|
'max_toolkit_length': AzureDevOpsWikiToolkit.toolkit_max_length})
|
27
27
|
),
|
28
|
-
organization_url=(str, Field(
|
28
|
+
organization_url=(str, Field(title="Organization URL",
|
29
29
|
description="ADO organization url",
|
30
30
|
json_schema_extra={
|
31
31
|
'configuration': True,
|
@@ -52,7 +52,8 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
|
|
52
52
|
}
|
53
53
|
]
|
54
54
|
}
|
55
|
-
}
|
55
|
+
},
|
56
|
+
"configuration_group": "ado",
|
56
57
|
}
|
57
58
|
}
|
58
59
|
}
|
@@ -24,7 +24,7 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
|
|
24
24
|
'toolkit_name': True,
|
25
25
|
'max_toolkit_length': AzureDevOpsWorkItemsToolkit.toolkit_max_length})
|
26
26
|
),
|
27
|
-
organization_url=(str, Field(
|
27
|
+
organization_url=(str, Field(title="Organization URL",
|
28
28
|
description="ADO organization url",
|
29
29
|
json_schema_extra={
|
30
30
|
'configuration': True,
|
@@ -51,7 +51,8 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
|
|
51
51
|
}
|
52
52
|
]
|
53
53
|
}
|
54
|
-
}
|
54
|
+
},
|
55
|
+
"configuration_group": "ado",
|
55
56
|
}
|
56
57
|
}
|
57
58
|
}
|
@@ -149,6 +149,69 @@ class BitbucketAPIWrapper(BaseCodeToolApiWrapper):
|
|
149
149
|
return result if isinstance(result, ToolException) else f"File has been updated: {file_path}."
|
150
150
|
except Exception as e:
|
151
151
|
return ToolException(f"File was not updated due to error: {str(e)}")
|
152
|
+
|
153
|
+
def get_pull_requests_commits(self, pr_id: str) -> List[Dict[str, Any]]:
|
154
|
+
"""
|
155
|
+
Get commits from a pull request
|
156
|
+
Parameters:
|
157
|
+
pr_id(str): the pull request ID
|
158
|
+
Returns:
|
159
|
+
List[Dict[str, Any]]: List of commits in the pull request
|
160
|
+
"""
|
161
|
+
try:
|
162
|
+
result = self._bitbucket.get_pull_request_commits(pr_id=pr_id)
|
163
|
+
return result
|
164
|
+
except Exception as e:
|
165
|
+
return ToolException(f"Can't get commits from pull request `{pr_id}` due to error:\n{str(e)}")
|
166
|
+
|
167
|
+
def get_pull_requests(self) -> List[Dict[str, Any]]:
|
168
|
+
"""
|
169
|
+
Get pull requests from the repository
|
170
|
+
Returns:
|
171
|
+
List[Dict[str, Any]]: List of pull requests in the repository
|
172
|
+
"""
|
173
|
+
return self._bitbucket.get_pull_requests()
|
174
|
+
|
175
|
+
def get_pull_request(self, pr_id: str) -> Any:
|
176
|
+
"""
|
177
|
+
Get details of a pull request
|
178
|
+
Parameters:
|
179
|
+
pr_id(str): the pull request ID
|
180
|
+
Returns:
|
181
|
+
Any: Details of the pull request
|
182
|
+
"""
|
183
|
+
try:
|
184
|
+
return self._bitbucket.get_pull_request(pr_id=pr_id)
|
185
|
+
except Exception as e:
|
186
|
+
return ToolException(f"Can't get pull request `{pr_id}` due to error:\n{str(e)}")
|
187
|
+
|
188
|
+
def get_pull_requests_changes(self, pr_id: str) -> Any:
|
189
|
+
"""
|
190
|
+
Get changes of a pull request
|
191
|
+
Parameters:
|
192
|
+
pr_id(str): the pull request ID
|
193
|
+
Returns:
|
194
|
+
Any: Changes of the pull request
|
195
|
+
"""
|
196
|
+
try:
|
197
|
+
return self._bitbucket.get_pull_requests_changes(pr_id=pr_id)
|
198
|
+
except Exception as e:
|
199
|
+
return ToolException(f"Can't get changes from pull request `{pr_id}` due to error:\n{str(e)}")
|
200
|
+
|
201
|
+
def add_pull_request_comment(self, pr_id: str, content, inline=None) -> str:
|
202
|
+
"""
|
203
|
+
Add a comment to a pull request. Supports multiple content types and inline comments.
|
204
|
+
Parameters:
|
205
|
+
pr_id (str): the pull request ID
|
206
|
+
content (str or dict): The comment content. Can be a string (raw text) or a dict with keys 'raw', 'markup', 'html'.
|
207
|
+
inline (dict, optional): Inline comment details. Example: {"from": 57, "to": 122, "path": "<string>"}
|
208
|
+
Returns:
|
209
|
+
str: A success or failure message
|
210
|
+
"""
|
211
|
+
try:
|
212
|
+
return self._bitbucket.add_pull_request_comment(pr_id=pr_id, content=content, inline=inline)
|
213
|
+
except Exception as e:
|
214
|
+
return ToolException(f"Can't add comment to pull request `{pr_id}` due to error:\n{str(e)}")
|
152
215
|
|
153
216
|
def _get_files(self, file_path: str, branch: str) -> str:
|
154
217
|
"""
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
3
3
|
import json
|
4
4
|
import logging
|
5
5
|
from abc import ABC, abstractmethod
|
6
|
-
from typing import TYPE_CHECKING, Any
|
6
|
+
from typing import TYPE_CHECKING, Any, Dict, List
|
7
7
|
|
8
8
|
from atlassian.bitbucket import Bitbucket, Cloud
|
9
9
|
from langchain_core.tools import ToolException
|
@@ -43,6 +43,22 @@ class BitbucketApiAbstract(ABC):
|
|
43
43
|
def create_file(self, file_path: str, file_contents: str, branch: str) -> str:
|
44
44
|
pass
|
45
45
|
|
46
|
+
@abstractmethod
|
47
|
+
def get_pull_request_commits(self, pr_id: str) -> List[Dict[str, Any]]:
|
48
|
+
pass
|
49
|
+
|
50
|
+
@abstractmethod
|
51
|
+
def get_pull_request(self, pr_id: str) -> Any:
|
52
|
+
pass
|
53
|
+
|
54
|
+
@abstractmethod
|
55
|
+
def get_pull_requests_changes(self, pr_id: str) -> Any:
|
56
|
+
pass
|
57
|
+
|
58
|
+
@abstractmethod
|
59
|
+
def add_pull_request_comment(self, pr_id: str, text: str) -> str:
|
60
|
+
pass
|
61
|
+
|
46
62
|
|
47
63
|
class BitbucketServerApi(BitbucketApiAbstract):
|
48
64
|
api_client: Bitbucket
|
@@ -122,6 +138,71 @@ class BitbucketServerApi(BitbucketApiAbstract):
|
|
122
138
|
filename=file_path,
|
123
139
|
source_commit_id=source_commit['id']
|
124
140
|
)
|
141
|
+
|
142
|
+
def get_pull_request_commits(self, pr_id: str) -> List[Dict[str, Any]]:
|
143
|
+
"""
|
144
|
+
Get commits from a pull request
|
145
|
+
Parameters:
|
146
|
+
pr_id(str): the pull request ID
|
147
|
+
Returns:
|
148
|
+
List[Dict[str, Any]]: List of commits in the pull request
|
149
|
+
"""
|
150
|
+
return self.api_client.get_pull_requests_commits(project_key=self.project, repository_slug=self.repository, pull_request_id=pr_id)
|
151
|
+
|
152
|
+
def get_pull_request(self, pr_id):
|
153
|
+
""" Get details of a pull request
|
154
|
+
Parameters:
|
155
|
+
pr_id(str): the pull request ID
|
156
|
+
Returns:
|
157
|
+
Any: Details of the pull request
|
158
|
+
"""
|
159
|
+
return self.api_client.get_pull_request(project_key=self.project, repository_slug=self.repository, pull_request_id=pr_id)
|
160
|
+
|
161
|
+
def get_pull_requests_changes(self, pr_id: str) -> Any:
|
162
|
+
"""
|
163
|
+
Get changes of a pull request
|
164
|
+
Parameters:
|
165
|
+
pr_id(str): the pull request ID
|
166
|
+
Returns:
|
167
|
+
Any: Changes of the pull request
|
168
|
+
"""
|
169
|
+
return self.api_client.get_pull_requests_changes(project_key=self.project, repository_slug=self.repository, pull_request_id=pr_id)
|
170
|
+
|
171
|
+
def add_pull_request_comment(self, pr_id, content, inline=None):
|
172
|
+
"""
|
173
|
+
Add a comment to a pull request. Supports multiple content types and inline comments.
|
174
|
+
Parameters:
|
175
|
+
pr_id (str): the pull request ID
|
176
|
+
content (dict or str): The comment content. If str, will be used as raw text. If dict, can include 'raw', 'markup', 'html'.
|
177
|
+
inline (dict, optional): Inline comment details. Example: {"from": 57, "to": 122, "path": "<string>"}
|
178
|
+
Returns:
|
179
|
+
str: The API response or created comment URL
|
180
|
+
"""
|
181
|
+
# Build the comment data
|
182
|
+
if isinstance(content, str):
|
183
|
+
comment_data = {"text": content}
|
184
|
+
elif isinstance(content, dict):
|
185
|
+
# Bitbucket Server API expects 'text' (raw), and optionally 'markup' and 'html' in a 'content' field
|
186
|
+
if 'raw' in content or 'markup' in content or 'html' in content:
|
187
|
+
comment_data = {"text": content.get("raw", "")}
|
188
|
+
if 'markup' in content:
|
189
|
+
comment_data["markup"] = content["markup"]
|
190
|
+
if 'html' in content:
|
191
|
+
comment_data["html"] = content["html"]
|
192
|
+
else:
|
193
|
+
comment_data = {"text": str(content)}
|
194
|
+
else:
|
195
|
+
comment_data = {"text": str(content)}
|
196
|
+
|
197
|
+
if inline:
|
198
|
+
comment_data["inline"] = inline
|
199
|
+
|
200
|
+
return self.api_client.add_pull_request_comment(
|
201
|
+
project_key=self.project,
|
202
|
+
repository_slug=self.repository,
|
203
|
+
pull_request_id=pr_id,
|
204
|
+
**comment_data
|
205
|
+
)
|
125
206
|
|
126
207
|
class BitbucketCloudApi(BitbucketApiAbstract):
|
127
208
|
api_client: Cloud
|
@@ -195,4 +276,64 @@ class BitbucketCloudApi(BitbucketApiAbstract):
|
|
195
276
|
"It may be helpful to use the read_file action to get "
|
196
277
|
"the current file contents."
|
197
278
|
)
|
198
|
-
return self.create_file(file_path, updated_file_content, branch)
|
279
|
+
return self.create_file(file_path, updated_file_content, branch)
|
280
|
+
|
281
|
+
def get_pull_request_commits(self, pr_id: str) -> List[Dict[str, Any]]:
|
282
|
+
"""
|
283
|
+
Get commits from a pull request
|
284
|
+
Parameters:
|
285
|
+
pr_id(str): the pull request ID
|
286
|
+
Returns:
|
287
|
+
List[Dict[str, Any]]: List of commits in the pull request
|
288
|
+
"""
|
289
|
+
commits = self.repository.pullrequests.get(pr_id).get('commits', [])
|
290
|
+
if not isinstance(commits, list):
|
291
|
+
commits = list(commits)
|
292
|
+
return commits
|
293
|
+
|
294
|
+
def get_pull_request(self, pr_id: str) -> Any:
|
295
|
+
""" Get details of a pull request
|
296
|
+
Parameters:
|
297
|
+
pr_id(str): the pull request ID
|
298
|
+
Returns:
|
299
|
+
Any: Details of the pull request
|
300
|
+
"""
|
301
|
+
return self.repository.pullrequests.get(pr_id)
|
302
|
+
|
303
|
+
def get_pull_requests_changes(self, pr_id: str) -> Any:
|
304
|
+
"""
|
305
|
+
Get changes of a pull request
|
306
|
+
Parameters:
|
307
|
+
pr_id(str): the pull request ID
|
308
|
+
Returns:
|
309
|
+
Any: Changes of the pull request
|
310
|
+
"""
|
311
|
+
return self.repository.pullrequests.get(pr_id).get('diff', {})
|
312
|
+
|
313
|
+
def add_pull_request_comment(self, pr_id: str, content, inline=None) -> str:
|
314
|
+
"""
|
315
|
+
Add a comment to a pull request. Supports multiple content types and inline comments.
|
316
|
+
Parameters:
|
317
|
+
pr_id (str): the pull request ID
|
318
|
+
content (dict or str): The comment content. If str, will be used as raw text. If dict, can include 'raw', 'markup', 'html'.
|
319
|
+
inline (dict, optional): Inline comment details. Example: {"from": 57, "to": 122, "path": "<string>"}
|
320
|
+
Returns:
|
321
|
+
str: The URL of the created comment
|
322
|
+
"""
|
323
|
+
# Build the content dict for Bitbucket Cloud
|
324
|
+
if isinstance(content, str):
|
325
|
+
content_dict = {"raw": content}
|
326
|
+
elif isinstance(content, dict):
|
327
|
+
# Only include allowed keys
|
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)}
|
331
|
+
else:
|
332
|
+
content_dict = {"raw": str(content)}
|
333
|
+
|
334
|
+
data = {"content": content_dict}
|
335
|
+
if inline:
|
336
|
+
data["inline"] = inline
|
337
|
+
|
338
|
+
response = self.repository.pullrequests.comments.post(pr_id, data=data)
|
339
|
+
return response['links']['self']['href']
|