keboola-cli 0.63.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- keboola_agent_cli/__init__.py +34 -0
- keboola_agent_cli/__main__.py +5 -0
- keboola_agent_cli/_ui_dist/assets/arc-DhFYIddx.js +2 -0
- keboola_agent_cli/_ui_dist/assets/arc-DhFYIddx.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/architecture-7EHR7CIX-hNCijx_H.js +1 -0
- keboola_agent_cli/_ui_dist/assets/architectureDiagram-3BPJPVTR-C6hUlprM.js +37 -0
- keboola_agent_cli/_ui_dist/assets/architectureDiagram-3BPJPVTR-C6hUlprM.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/array-BifhSqXX.js +2 -0
- keboola_agent_cli/_ui_dist/assets/array-BifhSqXX.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/blockDiagram-GPEHLZMM-DC7qY9i4.js +133 -0
- keboola_agent_cli/_ui_dist/assets/blockDiagram-GPEHLZMM-DC7qY9i4.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/c4Diagram-AAUBKEIU-5Lh44evt.js +11 -0
- keboola_agent_cli/_ui_dist/assets/c4Diagram-AAUBKEIU-5Lh44evt.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/channel-DBMrXlxx.js +2 -0
- keboola_agent_cli/_ui_dist/assets/channel-DBMrXlxx.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-2J33WTMH-Coy82EBh.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-2J33WTMH-Coy82EBh.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-3OPIFGDE-BQC5CRHI.js +63 -0
- keboola_agent_cli/_ui_dist/assets/chunk-3OPIFGDE-BQC5CRHI.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-4BX2VUAB-DUuEt70o.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-4BX2VUAB-DUuEt70o.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-55IACEB6-BvR-6chF.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-55IACEB6-BvR-6chF.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-5ZQYHXKU-BjcTN7ul.js +3 -0
- keboola_agent_cli/_ui_dist/assets/chunk-5ZQYHXKU-BjcTN7ul.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-727SXJPM-C0zxqqRN.js +207 -0
- keboola_agent_cli/_ui_dist/assets/chunk-727SXJPM-C0zxqqRN.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-AQP2D5EJ-CXf7rIlZ.js +232 -0
- keboola_agent_cli/_ui_dist/assets/chunk-AQP2D5EJ-CXf7rIlZ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-BSJP7CBP-Oj_FO9Q7.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-BSJP7CBP-Oj_FO9Q7.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-CSCIHK7Q-CcTsLrFc.js +124 -0
- keboola_agent_cli/_ui_dist/assets/chunk-CSCIHK7Q-CcTsLrFc.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-FMBD7UC4-FH-zLkkW.js +16 -0
- keboola_agent_cli/_ui_dist/assets/chunk-FMBD7UC4-FH-zLkkW.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-L5ZTLDWV-B1Ky_e7O.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-L5ZTLDWV-B1Ky_e7O.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-ND2GUHAM-BHz1rpbm.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-ND2GUHAM-BHz1rpbm.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NNHCCRGN-DlpIbxXb.js +160 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NNHCCRGN-DlpIbxXb.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NZK2D7GU-tnrSoegS.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NZK2D7GU-tnrSoegS.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-O5CBEL6O-DxxqDH0l.js +71 -0
- keboola_agent_cli/_ui_dist/assets/chunk-O5CBEL6O-DxxqDH0l.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-QZHKN3VN-CSjc2gjj.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-QZHKN3VN-CSjc2gjj.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-4FO5ZUOK-BuZcZu85.js +2 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-4FO5ZUOK-BuZcZu85.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-v2-Q7XG4LA2-BuZcZu85.js +2 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-v2-Q7XG4LA2-BuZcZu85.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/cose-bilkent-S5V4N54A-Y0L8LDMa.js +2 -0
- keboola_agent_cli/_ui_dist/assets/cose-bilkent-S5V4N54A-Y0L8LDMa.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/cytoscape.esm-C8YCVR3_.js +322 -0
- keboola_agent_cli/_ui_dist/assets/cytoscape.esm-C8YCVR3_.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/dagre-BM42HDAG-UZ-9BTqF.js +5 -0
- keboola_agent_cli/_ui_dist/assets/dagre-BM42HDAG-UZ-9BTqF.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/dagre-Bx709z4p.js +2 -0
- keboola_agent_cli/_ui_dist/assets/dagre-Bx709z4p.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/defaultLocale-C8Fc0cco.js +2 -0
- keboola_agent_cli/_ui_dist/assets/defaultLocale-C8Fc0cco.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-2AECGRRQ-DoDQ60wi.js +44 -0
- keboola_agent_cli/_ui_dist/assets/diagram-2AECGRRQ-DoDQ60wi.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-5GNKFQAL-CMGFxpUs.js +11 -0
- keboola_agent_cli/_ui_dist/assets/diagram-5GNKFQAL-CMGFxpUs.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-KO2AKTUF-1uGDa-Iu.js +4 -0
- keboola_agent_cli/_ui_dist/assets/diagram-KO2AKTUF-1uGDa-Iu.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-LMA3HP47-XtFH7B51.js +25 -0
- keboola_agent_cli/_ui_dist/assets/diagram-LMA3HP47-XtFH7B51.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-OG6HWLK6-B4_Te1T5.js +25 -0
- keboola_agent_cli/_ui_dist/assets/diagram-OG6HWLK6-B4_Te1T5.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/dist-Di6zmlv0.js +2 -0
- keboola_agent_cli/_ui_dist/assets/dist-Di6zmlv0.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/erDiagram-TEJ5UH35-NjQkrdFt.js +86 -0
- keboola_agent_cli/_ui_dist/assets/erDiagram-TEJ5UH35-NjQkrdFt.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/eventmodeling-FCH6USID-BrJMIks8.js +1 -0
- keboola_agent_cli/_ui_dist/assets/flowDiagram-I6XJVG4X-CIr8DWl7.js +163 -0
- keboola_agent_cli/_ui_dist/assets/flowDiagram-I6XJVG4X-CIr8DWl7.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/ganttDiagram-6RSMTGT7-C1VY_xbQ.js +293 -0
- keboola_agent_cli/_ui_dist/assets/ganttDiagram-6RSMTGT7-C1VY_xbQ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/gitGraph-WXDBUCRP-COacYjo-.js +1 -0
- keboola_agent_cli/_ui_dist/assets/gitGraphDiagram-PVQCEYII-DQT8-kg2.js +107 -0
- keboola_agent_cli/_ui_dist/assets/gitGraphDiagram-PVQCEYII-DQT8-kg2.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/graphlib-B8gBHxth.js +2 -0
- keboola_agent_cli/_ui_dist/assets/graphlib-B8gBHxth.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/index-CMq50kkV.css +1 -0
- keboola_agent_cli/_ui_dist/assets/index-D8W97DAz.js +118 -0
- keboola_agent_cli/_ui_dist/assets/index-D8W97DAz.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/info-J43DQDTF-DdCTRIzU.js +1 -0
- keboola_agent_cli/_ui_dist/assets/infoDiagram-5YYISTIA-C77rsoTp.js +3 -0
- keboola_agent_cli/_ui_dist/assets/infoDiagram-5YYISTIA-C77rsoTp.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/init-D6jRqBbL.js +2 -0
- keboola_agent_cli/_ui_dist/assets/init-D6jRqBbL.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/ishikawaDiagram-YF4QCWOH-BcTbXaLy.js +71 -0
- keboola_agent_cli/_ui_dist/assets/ishikawaDiagram-YF4QCWOH-BcTbXaLy.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/journeyDiagram-JHISSGLW-BejeAJQ_.js +140 -0
- keboola_agent_cli/_ui_dist/assets/journeyDiagram-JHISSGLW-BejeAJQ_.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/kanban-definition-UN3LZRKU-BRNz_UrH.js +90 -0
- keboola_agent_cli/_ui_dist/assets/kanban-definition-UN3LZRKU-BRNz_UrH.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/katex-C4eR7coU.js +258 -0
- keboola_agent_cli/_ui_dist/assets/katex-C4eR7coU.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/line-CzAQKFbJ.js +2 -0
- keboola_agent_cli/_ui_dist/assets/line-CzAQKFbJ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/linear-DUNFFdck.js +2 -0
- keboola_agent_cli/_ui_dist/assets/linear-DUNFFdck.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/mermaid-parser.core-CpuBOkFa.js +5 -0
- keboola_agent_cli/_ui_dist/assets/mermaid-parser.core-CpuBOkFa.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/mindmap-definition-RKZ34NQL-9EJQNjH0.js +97 -0
- keboola_agent_cli/_ui_dist/assets/mindmap-definition-RKZ34NQL-9EJQNjH0.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/ordinal-hYBb2elL.js +2 -0
- keboola_agent_cli/_ui_dist/assets/ordinal-hYBb2elL.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/packet-YPE3B663-DLiiw_B2.js +1 -0
- keboola_agent_cli/_ui_dist/assets/path-BWPyau1x.js +2 -0
- keboola_agent_cli/_ui_dist/assets/path-BWPyau1x.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/pie-LRSECV5Y-CRoO8G1g.js +1 -0
- keboola_agent_cli/_ui_dist/assets/pieDiagram-4H26LBE5-XH4cy6Cb.js +31 -0
- keboola_agent_cli/_ui_dist/assets/pieDiagram-4H26LBE5-XH4cy6Cb.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/quadrantDiagram-W4KKPZXB-fdhc93U8.js +8 -0
- keboola_agent_cli/_ui_dist/assets/quadrantDiagram-W4KKPZXB-fdhc93U8.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/radar-GUYGQ44K-DAlLVJHm.js +1 -0
- keboola_agent_cli/_ui_dist/assets/requirementDiagram-4Y6WPE33-a94eP3R9.js +85 -0
- keboola_agent_cli/_ui_dist/assets/requirementDiagram-4Y6WPE33-a94eP3R9.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/rough.esm-CSKSodPl.js +2 -0
- keboola_agent_cli/_ui_dist/assets/rough.esm-CSKSodPl.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/sankeyDiagram-5OEKKPKP-jcBa02sp.js +41 -0
- keboola_agent_cli/_ui_dist/assets/sankeyDiagram-5OEKKPKP-jcBa02sp.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/sequenceDiagram-3UESZ5HK-A5-GGM-e.js +163 -0
- keboola_agent_cli/_ui_dist/assets/sequenceDiagram-3UESZ5HK-A5-GGM-e.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/src-ZI-V_AF0.js +2 -0
- keboola_agent_cli/_ui_dist/assets/src-ZI-V_AF0.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-AJRCARHV-BKAA5rqE.js +2 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-AJRCARHV-BKAA5rqE.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-v2-BHNVJYJU-DnJwJBsE.js +2 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-v2-BHNVJYJU-DnJwJBsE.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/timeline-definition-PNZ67QCA-Cy39jp8b.js +121 -0
- keboola_agent_cli/_ui_dist/assets/timeline-definition-PNZ67QCA-Cy39jp8b.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/treeView-BLDUP644-DbLYl23-.js +1 -0
- keboola_agent_cli/_ui_dist/assets/treemap-LRROVOQU-Bp0eGlOt.js +1 -0
- keboola_agent_cli/_ui_dist/assets/vennDiagram-CIIHVFJN-BGECKubd.js +35 -0
- keboola_agent_cli/_ui_dist/assets/vennDiagram-CIIHVFJN-BGECKubd.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/wardley-L42UT6IY-D4yH4jqS.js +1 -0
- keboola_agent_cli/_ui_dist/assets/wardleyDiagram-YWT4CUSO-D6XRG3cZ.js +79 -0
- keboola_agent_cli/_ui_dist/assets/wardleyDiagram-YWT4CUSO-D6XRG3cZ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/xychartDiagram-2RQKCTM6-DRre-pfZ.js +8 -0
- keboola_agent_cli/_ui_dist/assets/xychartDiagram-2RQKCTM6-DRre-pfZ.js.map +1 -0
- keboola_agent_cli/_ui_dist/index.html +50 -0
- keboola_agent_cli/ai_client.py +83 -0
- keboola_agent_cli/auto_update.py +550 -0
- keboola_agent_cli/changelog.py +1198 -0
- keboola_agent_cli/cli.py +448 -0
- keboola_agent_cli/client.py +3422 -0
- keboola_agent_cli/commands/__init__.py +0 -0
- keboola_agent_cli/commands/_data_app_git.py +343 -0
- keboola_agent_cli/commands/_helpers.py +377 -0
- keboola_agent_cli/commands/_metadata_input.py +49 -0
- keboola_agent_cli/commands/_semantic_layer_crud.py +632 -0
- keboola_agent_cli/commands/_semantic_layer_helpers.py +44 -0
- keboola_agent_cli/commands/_semantic_layer_reference_data.py +247 -0
- keboola_agent_cli/commands/agent.py +968 -0
- keboola_agent_cli/commands/branch.py +423 -0
- keboola_agent_cli/commands/changelog.py +168 -0
- keboola_agent_cli/commands/component.py +216 -0
- keboola_agent_cli/commands/config.py +2442 -0
- keboola_agent_cli/commands/context.py +1481 -0
- keboola_agent_cli/commands/data_app.py +1279 -0
- keboola_agent_cli/commands/dev_portal.py +584 -0
- keboola_agent_cli/commands/doctor.py +37 -0
- keboola_agent_cli/commands/encrypt.py +145 -0
- keboola_agent_cli/commands/feature.py +311 -0
- keboola_agent_cli/commands/flow.py +948 -0
- keboola_agent_cli/commands/http_client.py +157 -0
- keboola_agent_cli/commands/init.py +279 -0
- keboola_agent_cli/commands/job.py +661 -0
- keboola_agent_cli/commands/kai.py +301 -0
- keboola_agent_cli/commands/lineage.py +1464 -0
- keboola_agent_cli/commands/org.py +292 -0
- keboola_agent_cli/commands/permissions.py +360 -0
- keboola_agent_cli/commands/project.py +1192 -0
- keboola_agent_cli/commands/repl.py +243 -0
- keboola_agent_cli/commands/schedule.py +340 -0
- keboola_agent_cli/commands/search.py +178 -0
- keboola_agent_cli/commands/semantic_layer.py +939 -0
- keboola_agent_cli/commands/serve.py +272 -0
- keboola_agent_cli/commands/sharing.py +340 -0
- keboola_agent_cli/commands/storage.py +2630 -0
- keboola_agent_cli/commands/stream.py +266 -0
- keboola_agent_cli/commands/sync.py +1277 -0
- keboola_agent_cli/commands/tool.py +206 -0
- keboola_agent_cli/commands/version.py +186 -0
- keboola_agent_cli/commands/workspace.py +635 -0
- keboola_agent_cli/config_store.py +582 -0
- keboola_agent_cli/constants.py +528 -0
- keboola_agent_cli/data_science_client.py +342 -0
- keboola_agent_cli/dev_portal_client.py +323 -0
- keboola_agent_cli/errors.py +248 -0
- keboola_agent_cli/http_base.py +315 -0
- keboola_agent_cli/json_utils.py +126 -0
- keboola_agent_cli/lib.py +536 -0
- keboola_agent_cli/manage_client.py +324 -0
- keboola_agent_cli/metastore_client.py +214 -0
- keboola_agent_cli/models.py +427 -0
- keboola_agent_cli/output.py +1084 -0
- keboola_agent_cli/permissions.py +469 -0
- keboola_agent_cli/py.typed +3 -0
- keboola_agent_cli/result_models.py +271 -0
- keboola_agent_cli/server/__init__.py +34 -0
- keboola_agent_cli/server/agent_runner.py +1289 -0
- keboola_agent_cli/server/agents_store.py +325 -0
- keboola_agent_cli/server/app.py +764 -0
- keboola_agent_cli/server/auth.py +117 -0
- keboola_agent_cli/server/dependencies.py +149 -0
- keboola_agent_cli/server/pricing.py +303 -0
- keboola_agent_cli/server/routers/__init__.py +1 -0
- keboola_agent_cli/server/routers/agents.py +616 -0
- keboola_agent_cli/server/routers/ai_chat.py +129 -0
- keboola_agent_cli/server/routers/branches.py +133 -0
- keboola_agent_cli/server/routers/components.py +48 -0
- keboola_agent_cli/server/routers/configs.py +507 -0
- keboola_agent_cli/server/routers/data_apps.py +384 -0
- keboola_agent_cli/server/routers/dev_portal.py +67 -0
- keboola_agent_cli/server/routers/encrypt.py +35 -0
- keboola_agent_cli/server/routers/feature.py +179 -0
- keboola_agent_cli/server/routers/flows.py +204 -0
- keboola_agent_cli/server/routers/health.py +53 -0
- keboola_agent_cli/server/routers/jobs.py +175 -0
- keboola_agent_cli/server/routers/kai.py +80 -0
- keboola_agent_cli/server/routers/lineage.py +226 -0
- keboola_agent_cli/server/routers/mcp.py +70 -0
- keboola_agent_cli/server/routers/members.py +170 -0
- keboola_agent_cli/server/routers/org.py +96 -0
- keboola_agent_cli/server/routers/projects.py +106 -0
- keboola_agent_cli/server/routers/schedules.py +54 -0
- keboola_agent_cli/server/routers/search.py +30 -0
- keboola_agent_cli/server/routers/semantic_layer.py +650 -0
- keboola_agent_cli/server/routers/sharing.py +86 -0
- keboola_agent_cli/server/routers/storage.py +574 -0
- keboola_agent_cli/server/routers/stream.py +100 -0
- keboola_agent_cli/server/routers/workspaces.py +302 -0
- keboola_agent_cli/server/run_broadcaster.py +329 -0
- keboola_agent_cli/server/sse.py +25 -0
- keboola_agent_cli/services/__init__.py +0 -0
- keboola_agent_cli/services/_encryption.py +217 -0
- keboola_agent_cli/services/_semantic_layer_cascade.py +147 -0
- keboola_agent_cli/services/_semantic_layer_crud.py +382 -0
- keboola_agent_cli/services/_semantic_layer_internals.py +1078 -0
- keboola_agent_cli/services/_semantic_layer_lookup.py +181 -0
- keboola_agent_cli/services/_semantic_layer_reference_data.py +217 -0
- keboola_agent_cli/services/_sync_bindings.py +456 -0
- keboola_agent_cli/services/_sync_branch.py +191 -0
- keboola_agent_cli/services/_sync_bulk.py +228 -0
- keboola_agent_cli/services/_sync_clone.py +163 -0
- keboola_agent_cli/services/_sync_models.py +97 -0
- keboola_agent_cli/services/_sync_push_ops.py +369 -0
- keboola_agent_cli/services/_sync_storage.py +376 -0
- keboola_agent_cli/services/_sync_writeback.py +167 -0
- keboola_agent_cli/services/agent_service.py +458 -0
- keboola_agent_cli/services/base.py +175 -0
- keboola_agent_cli/services/branch_service.py +588 -0
- keboola_agent_cli/services/component_service.py +694 -0
- keboola_agent_cli/services/config_service.py +2099 -0
- keboola_agent_cli/services/data_app_git_service.py +224 -0
- keboola_agent_cli/services/data_app_service.py +2082 -0
- keboola_agent_cli/services/deep_lineage_service.py +1322 -0
- keboola_agent_cli/services/dev_portal_service.py +345 -0
- keboola_agent_cli/services/doctor_service.py +445 -0
- keboola_agent_cli/services/encrypt_service.py +87 -0
- keboola_agent_cli/services/feature_service.py +268 -0
- keboola_agent_cli/services/flow_service.py +769 -0
- keboola_agent_cli/services/flow_validation.py +188 -0
- keboola_agent_cli/services/http_forwarder_service.py +236 -0
- keboola_agent_cli/services/job_idempotency_store.py +285 -0
- keboola_agent_cli/services/job_service.py +797 -0
- keboola_agent_cli/services/kai_service.py +367 -0
- keboola_agent_cli/services/lineage_service.py +274 -0
- keboola_agent_cli/services/mcp_service.py +1498 -0
- keboola_agent_cli/services/mcp_transport.py +259 -0
- keboola_agent_cli/services/member_service.py +593 -0
- keboola_agent_cli/services/org_service.py +619 -0
- keboola_agent_cli/services/project_service.py +947 -0
- keboola_agent_cli/services/repo_validate_service.py +767 -0
- keboola_agent_cli/services/schedule_service.py +731 -0
- keboola_agent_cli/services/search_service.py +331 -0
- keboola_agent_cli/services/semantic_layer_service.py +1497 -0
- keboola_agent_cli/services/sharing_service.py +307 -0
- keboola_agent_cli/services/storage_service.py +2524 -0
- keboola_agent_cli/services/stream_service.py +395 -0
- keboola_agent_cli/services/sync_service.py +2244 -0
- keboola_agent_cli/services/variables_service.py +447 -0
- keboola_agent_cli/services/version_service.py +1038 -0
- keboola_agent_cli/services/workspace_service.py +1103 -0
- keboola_agent_cli/stream_client.py +217 -0
- keboola_agent_cli/sync/__init__.py +1 -0
- keboola_agent_cli/sync/branch_mapping.py +174 -0
- keboola_agent_cli/sync/clone.py +211 -0
- keboola_agent_cli/sync/code_extraction.py +655 -0
- keboola_agent_cli/sync/config_format.py +290 -0
- keboola_agent_cli/sync/diff_engine.py +566 -0
- keboola_agent_cli/sync/git_utils.py +93 -0
- keboola_agent_cli/sync/manifest.py +162 -0
- keboola_agent_cli/sync/naming.py +90 -0
- keboola_agent_cli/sync/secrets.py +62 -0
- keboola_agent_cli/sync/sql_split.py +134 -0
- keboola_cli-0.63.4.dist-info/METADATA +308 -0
- keboola_cli-0.63.4.dist-info/RECORD +306 -0
- keboola_cli-0.63.4.dist-info/WHEEL +4 -0
- keboola_cli-0.63.4.dist-info/entry_points.txt +2 -0
|
File without changes
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"""``data-app git-*`` commands (sandboxes-service ``/apps/{id}/git-repo/*``).
|
|
2
|
+
|
|
3
|
+
Split out of ``data_app.py`` to respect the file-size budget
|
|
4
|
+
(CONTRIBUTING.md "File-size budgets"). The commands attach to the existing
|
|
5
|
+
``data-app`` Typer sub-app via :func:`register_git_commands`, called at the
|
|
6
|
+
bottom of ``data_app.py`` -- so they still surface as
|
|
7
|
+
``kbagent data-app git-*`` and the permission gate
|
|
8
|
+
(``data-app.<subcommand>``) and CLI command-sync checks see them unchanged.
|
|
9
|
+
|
|
10
|
+
Read trio (git-repo / git-branches / git-entrypoints) needs only the project
|
|
11
|
+
storage token; the credential pair (git-credentials /
|
|
12
|
+
git-credentials-create) needs an admin storage token and targets *managed*
|
|
13
|
+
git repos only. See ``references/gotchas.md`` for the deploy-once precondition.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
import typer
|
|
21
|
+
from rich.console import Console
|
|
22
|
+
from rich.markup import escape
|
|
23
|
+
|
|
24
|
+
from ..errors import ConfigError, ErrorCode, KeboolaApiError
|
|
25
|
+
from ._helpers import get_formatter, get_service, map_error_to_exit_code
|
|
26
|
+
|
|
27
|
+
# sandboxes-service git-repo credential enums (API contract literals).
|
|
28
|
+
_GIT_CRED_TYPES = ("ssh_key", "http_token")
|
|
29
|
+
_GIT_CRED_PERMISSIONS = ("readOnly", "readWrite")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def register_git_commands(app: typer.Typer) -> None:
|
|
33
|
+
"""Attach the five ``data-app git-*`` commands to the data-app sub-app."""
|
|
34
|
+
|
|
35
|
+
@app.command("git-repo")
|
|
36
|
+
def data_app_git_repo(
|
|
37
|
+
ctx: typer.Context,
|
|
38
|
+
project: str = typer.Option(..., "--project", help="Project alias"),
|
|
39
|
+
app_id: str = typer.Option(..., "--app-id", help="Data Science numeric app id"),
|
|
40
|
+
) -> None:
|
|
41
|
+
"""Show the clone URLs of a data app's configured git repository.
|
|
42
|
+
|
|
43
|
+
Returns sshUrl / httpsUrl and whether the repo is *managed* by Keboola.
|
|
44
|
+
Apps created with `data-app create --git-repo <url>` are *external*
|
|
45
|
+
(not managed), so the git-credentials commands do not apply to them.
|
|
46
|
+
"""
|
|
47
|
+
formatter = get_formatter(ctx)
|
|
48
|
+
service = get_service(ctx, "data_app_git_service")
|
|
49
|
+
try:
|
|
50
|
+
result = service.get_data_app_git_repo(alias=project, app_id=app_id)
|
|
51
|
+
except KeboolaApiError as exc:
|
|
52
|
+
formatter.error(
|
|
53
|
+
message=exc.message,
|
|
54
|
+
error_code=exc.error_code,
|
|
55
|
+
retryable=exc.retryable,
|
|
56
|
+
details=exc.details,
|
|
57
|
+
)
|
|
58
|
+
raise typer.Exit(code=map_error_to_exit_code(exc)) from None
|
|
59
|
+
except ConfigError as exc:
|
|
60
|
+
formatter.error(message=exc.message, error_code=ErrorCode.CONFIG_ERROR)
|
|
61
|
+
raise typer.Exit(code=5) from None
|
|
62
|
+
|
|
63
|
+
formatter.output(
|
|
64
|
+
result,
|
|
65
|
+
lambda c, d: (
|
|
66
|
+
c.print(
|
|
67
|
+
f"\n[bold]Git repository[/bold] (app {d['app_id']} in {d['project_alias']})"
|
|
68
|
+
),
|
|
69
|
+
c.print(f" [bold]Managed:[/bold] {d['is_managed_git_repo']}"),
|
|
70
|
+
c.print(f" [bold]SSH URL:[/bold] {d.get('ssh_url') or '-'}"),
|
|
71
|
+
c.print(f" [bold]HTTPS URL:[/bold] {d.get('https_url') or '-'}"),
|
|
72
|
+
),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
@app.command("git-branches")
|
|
76
|
+
def data_app_git_branches(
|
|
77
|
+
ctx: typer.Context,
|
|
78
|
+
project: str = typer.Option(..., "--project", help="Project alias"),
|
|
79
|
+
app_id: str = typer.Option(..., "--app-id", help="Data Science numeric app id"),
|
|
80
|
+
) -> None:
|
|
81
|
+
"""List the remote branches of a data app's git repository."""
|
|
82
|
+
formatter = get_formatter(ctx)
|
|
83
|
+
service = get_service(ctx, "data_app_git_service")
|
|
84
|
+
try:
|
|
85
|
+
result = service.list_data_app_git_branches(alias=project, app_id=app_id)
|
|
86
|
+
except KeboolaApiError as exc:
|
|
87
|
+
formatter.error(
|
|
88
|
+
message=exc.message,
|
|
89
|
+
error_code=exc.error_code,
|
|
90
|
+
retryable=exc.retryable,
|
|
91
|
+
details=exc.details,
|
|
92
|
+
)
|
|
93
|
+
raise typer.Exit(code=map_error_to_exit_code(exc)) from None
|
|
94
|
+
except ConfigError as exc:
|
|
95
|
+
formatter.error(message=exc.message, error_code=ErrorCode.CONFIG_ERROR)
|
|
96
|
+
raise typer.Exit(code=5) from None
|
|
97
|
+
|
|
98
|
+
def _human(c: Console, d: dict) -> None:
|
|
99
|
+
branches = d.get("branches", [])
|
|
100
|
+
if not branches:
|
|
101
|
+
c.print("[dim]No branches returned.[/dim]")
|
|
102
|
+
return
|
|
103
|
+
c.print(
|
|
104
|
+
f"\n[bold]{d['count']} branch(es)[/bold] "
|
|
105
|
+
f"(app {d['app_id']} in {d['project_alias']})"
|
|
106
|
+
)
|
|
107
|
+
for b in branches:
|
|
108
|
+
author = b.get("author", {})
|
|
109
|
+
c.print(
|
|
110
|
+
f" [bold cyan]{b['branch']}[/bold cyan] "
|
|
111
|
+
f"[yellow]{b.get('sha', '')}[/yellow] "
|
|
112
|
+
f"[dim]{author.get('name', '')} · {b.get('date', '')}[/dim]"
|
|
113
|
+
)
|
|
114
|
+
if b.get("comment"):
|
|
115
|
+
c.print(f" {escape(b['comment'])}")
|
|
116
|
+
|
|
117
|
+
formatter.output(result, _human)
|
|
118
|
+
|
|
119
|
+
@app.command("git-entrypoints")
|
|
120
|
+
def data_app_git_entrypoints(
|
|
121
|
+
ctx: typer.Context,
|
|
122
|
+
project: str = typer.Option(..., "--project", help="Project alias"),
|
|
123
|
+
app_id: str = typer.Option(..., "--app-id", help="Data Science numeric app id"),
|
|
124
|
+
) -> None:
|
|
125
|
+
"""List root-level .py entrypoint files of a data app's git repository.
|
|
126
|
+
|
|
127
|
+
The server only lists Python (.py) files at the repo root on the
|
|
128
|
+
configured branch (or the repo default).
|
|
129
|
+
"""
|
|
130
|
+
formatter = get_formatter(ctx)
|
|
131
|
+
service = get_service(ctx, "data_app_git_service")
|
|
132
|
+
try:
|
|
133
|
+
result = service.list_data_app_git_entrypoints(alias=project, app_id=app_id)
|
|
134
|
+
except KeboolaApiError as exc:
|
|
135
|
+
formatter.error(
|
|
136
|
+
message=exc.message,
|
|
137
|
+
error_code=exc.error_code,
|
|
138
|
+
retryable=exc.retryable,
|
|
139
|
+
details=exc.details,
|
|
140
|
+
)
|
|
141
|
+
raise typer.Exit(code=map_error_to_exit_code(exc)) from None
|
|
142
|
+
except ConfigError as exc:
|
|
143
|
+
formatter.error(message=exc.message, error_code=ErrorCode.CONFIG_ERROR)
|
|
144
|
+
raise typer.Exit(code=5) from None
|
|
145
|
+
|
|
146
|
+
def _human(c: Console, d: dict) -> None:
|
|
147
|
+
entrypoints = d.get("entrypoints", [])
|
|
148
|
+
if not entrypoints:
|
|
149
|
+
c.print("[dim]No .py entrypoints found at the repo root.[/dim]")
|
|
150
|
+
return
|
|
151
|
+
c.print(
|
|
152
|
+
f"\n[bold]{d['count']} entrypoint(s)[/bold] "
|
|
153
|
+
f"(app {d['app_id']} in {d['project_alias']})"
|
|
154
|
+
)
|
|
155
|
+
for name in entrypoints:
|
|
156
|
+
c.print(f" [cyan]{name}[/cyan]")
|
|
157
|
+
|
|
158
|
+
formatter.output(result, _human)
|
|
159
|
+
|
|
160
|
+
@app.command("git-credentials")
|
|
161
|
+
def data_app_git_credentials(
|
|
162
|
+
ctx: typer.Context,
|
|
163
|
+
project: str = typer.Option(..., "--project", help="Project alias"),
|
|
164
|
+
app_id: str = typer.Option(..., "--app-id", help="Data Science numeric app id"),
|
|
165
|
+
) -> None:
|
|
166
|
+
"""List the credentials of a data app's MANAGED git repository.
|
|
167
|
+
|
|
168
|
+
Only applies to managed repos (the server returns 409 for external
|
|
169
|
+
repos). The credential secret is never returned by this endpoint --
|
|
170
|
+
it is shown once at create time only.
|
|
171
|
+
"""
|
|
172
|
+
formatter = get_formatter(ctx)
|
|
173
|
+
service = get_service(ctx, "data_app_git_service")
|
|
174
|
+
try:
|
|
175
|
+
result = service.list_data_app_git_credentials(alias=project, app_id=app_id)
|
|
176
|
+
except KeboolaApiError as exc:
|
|
177
|
+
formatter.error(
|
|
178
|
+
message=exc.message,
|
|
179
|
+
error_code=exc.error_code,
|
|
180
|
+
retryable=exc.retryable,
|
|
181
|
+
details=exc.details,
|
|
182
|
+
)
|
|
183
|
+
raise typer.Exit(code=map_error_to_exit_code(exc)) from None
|
|
184
|
+
except ConfigError as exc:
|
|
185
|
+
formatter.error(message=exc.message, error_code=ErrorCode.CONFIG_ERROR)
|
|
186
|
+
raise typer.Exit(code=5) from None
|
|
187
|
+
|
|
188
|
+
def _human(c: Console, d: dict) -> None:
|
|
189
|
+
credentials = d.get("credentials", [])
|
|
190
|
+
if not credentials:
|
|
191
|
+
c.print("[dim]No git credentials configured.[/dim]")
|
|
192
|
+
return
|
|
193
|
+
c.print(
|
|
194
|
+
f"\n[bold]{d['count']} credential(s)[/bold] "
|
|
195
|
+
f"(app {d['app_id']} in {d['project_alias']})"
|
|
196
|
+
)
|
|
197
|
+
for cred in credentials:
|
|
198
|
+
c.print(
|
|
199
|
+
f" [bold]{cred['id']}[/bold] "
|
|
200
|
+
f"[cyan]{cred.get('type', '')}[/cyan] "
|
|
201
|
+
f"[magenta]{cred.get('permissions', '')}[/magenta] "
|
|
202
|
+
f"{cred.get('name', '') or '(no name)'} "
|
|
203
|
+
f"[dim]owner={cred.get('owner_admin_id', '')} · "
|
|
204
|
+
f"{cred.get('created_at', '')}[/dim]"
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
formatter.output(result, _human)
|
|
208
|
+
|
|
209
|
+
@app.command("git-credentials-create")
|
|
210
|
+
def data_app_git_credentials_create(
|
|
211
|
+
ctx: typer.Context,
|
|
212
|
+
project: str = typer.Option(..., "--project", help="Project alias"),
|
|
213
|
+
app_id: str = typer.Option(..., "--app-id", help="Data Science numeric app id"),
|
|
214
|
+
cred_type: str = typer.Option(
|
|
215
|
+
...,
|
|
216
|
+
"--type",
|
|
217
|
+
help="Credential type: ssh_key | http_token.",
|
|
218
|
+
),
|
|
219
|
+
permissions: str = typer.Option(
|
|
220
|
+
...,
|
|
221
|
+
"--permissions",
|
|
222
|
+
help="Access level: readOnly | readWrite.",
|
|
223
|
+
),
|
|
224
|
+
public_key: str | None = typer.Option(
|
|
225
|
+
None,
|
|
226
|
+
"--public-key",
|
|
227
|
+
help=(
|
|
228
|
+
"SSH public key inline (required for --type ssh_key; "
|
|
229
|
+
"mutually exclusive with --public-key-file)."
|
|
230
|
+
),
|
|
231
|
+
),
|
|
232
|
+
public_key_file: Path | None = typer.Option(
|
|
233
|
+
None,
|
|
234
|
+
"--public-key-file",
|
|
235
|
+
help="Read the SSH public key from this file (required for --type ssh_key).",
|
|
236
|
+
),
|
|
237
|
+
name: str | None = typer.Option(
|
|
238
|
+
None,
|
|
239
|
+
"--name",
|
|
240
|
+
help="Optional display label for the credential.",
|
|
241
|
+
),
|
|
242
|
+
yes: bool = typer.Option(
|
|
243
|
+
False,
|
|
244
|
+
"--yes",
|
|
245
|
+
"-y",
|
|
246
|
+
help="Skip the confirmation prompt.",
|
|
247
|
+
),
|
|
248
|
+
) -> None:
|
|
249
|
+
"""Create a git credential (SSH key or HTTP token) for a MANAGED repo.
|
|
250
|
+
|
|
251
|
+
Only managed repos accept credentials (external repos return 409, and a
|
|
252
|
+
non-admin storage token returns 403). For --type http_token the response
|
|
253
|
+
includes a ONE-TIME secret that is shown once and cannot be retrieved
|
|
254
|
+
again. For --type ssh_key you must supply a public key.
|
|
255
|
+
"""
|
|
256
|
+
formatter = get_formatter(ctx)
|
|
257
|
+
service = get_service(ctx, "data_app_git_service")
|
|
258
|
+
|
|
259
|
+
if cred_type not in _GIT_CRED_TYPES:
|
|
260
|
+
raise typer.BadParameter(
|
|
261
|
+
f"--type must be one of {', '.join(_GIT_CRED_TYPES)} (got {cred_type!r}).",
|
|
262
|
+
param_hint="--type",
|
|
263
|
+
)
|
|
264
|
+
if permissions not in _GIT_CRED_PERMISSIONS:
|
|
265
|
+
raise typer.BadParameter(
|
|
266
|
+
f"--permissions must be one of {', '.join(_GIT_CRED_PERMISSIONS)} "
|
|
267
|
+
f"(got {permissions!r}).",
|
|
268
|
+
param_hint="--permissions",
|
|
269
|
+
)
|
|
270
|
+
if public_key and public_key_file:
|
|
271
|
+
raise typer.BadParameter(
|
|
272
|
+
"--public-key and --public-key-file are mutually exclusive; pick one.",
|
|
273
|
+
param_hint="--public-key",
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
resolved_public_key = public_key
|
|
277
|
+
if public_key_file is not None:
|
|
278
|
+
try:
|
|
279
|
+
resolved_public_key = public_key_file.read_text(encoding="utf-8").strip()
|
|
280
|
+
except OSError as exc:
|
|
281
|
+
raise typer.BadParameter(
|
|
282
|
+
f"Cannot read public-key file {public_key_file}: {exc}",
|
|
283
|
+
param_hint="--public-key-file",
|
|
284
|
+
) from exc
|
|
285
|
+
|
|
286
|
+
if cred_type == "ssh_key" and not resolved_public_key:
|
|
287
|
+
raise typer.BadParameter(
|
|
288
|
+
"--type ssh_key requires --public-key or --public-key-file.",
|
|
289
|
+
param_hint="--public-key",
|
|
290
|
+
)
|
|
291
|
+
if cred_type == "http_token" and resolved_public_key:
|
|
292
|
+
raise typer.BadParameter(
|
|
293
|
+
"--type http_token must not be given a public key.",
|
|
294
|
+
param_hint="--public-key",
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
if (
|
|
298
|
+
not yes
|
|
299
|
+
and not formatter.json_mode
|
|
300
|
+
and not typer.confirm(
|
|
301
|
+
f"Create a {cred_type} credential ({permissions}) for data app "
|
|
302
|
+
f"{app_id} in '{project}'?"
|
|
303
|
+
)
|
|
304
|
+
):
|
|
305
|
+
formatter.console.print("Aborted.")
|
|
306
|
+
raise typer.Exit(code=0)
|
|
307
|
+
|
|
308
|
+
try:
|
|
309
|
+
result = service.create_data_app_git_credential(
|
|
310
|
+
alias=project,
|
|
311
|
+
app_id=app_id,
|
|
312
|
+
type_=cred_type,
|
|
313
|
+
permissions=permissions,
|
|
314
|
+
public_key=resolved_public_key,
|
|
315
|
+
name=name,
|
|
316
|
+
)
|
|
317
|
+
except KeboolaApiError as exc:
|
|
318
|
+
formatter.error(
|
|
319
|
+
message=exc.message,
|
|
320
|
+
error_code=exc.error_code,
|
|
321
|
+
retryable=exc.retryable,
|
|
322
|
+
details=exc.details,
|
|
323
|
+
)
|
|
324
|
+
raise typer.Exit(code=map_error_to_exit_code(exc)) from None
|
|
325
|
+
except ConfigError as exc:
|
|
326
|
+
formatter.error(message=exc.message, error_code=ErrorCode.CONFIG_ERROR)
|
|
327
|
+
raise typer.Exit(code=5) from None
|
|
328
|
+
|
|
329
|
+
def _human(c: Console, d: dict) -> None:
|
|
330
|
+
cred = d.get("credential", {})
|
|
331
|
+
c.print(f"[bold green]Success:[/bold green] {d['message']}")
|
|
332
|
+
c.print(f" [bold]ID:[/bold] {cred.get('id', '')}")
|
|
333
|
+
c.print(f" [bold]Type:[/bold] {cred.get('type', '')}")
|
|
334
|
+
c.print(f" [bold]Permissions:[/bold] {cred.get('permissions', '')}")
|
|
335
|
+
if cred.get("name"):
|
|
336
|
+
c.print(f" [bold]Name:[/bold] {cred['name']}")
|
|
337
|
+
secret = cred.get("secret")
|
|
338
|
+
if secret:
|
|
339
|
+
c.print(
|
|
340
|
+
f"\n[bold yellow]One-time secret (won't be shown again):[/bold yellow] {secret}"
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
formatter.output(result, _human)
|