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
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"""Per-change push CRUD operations (create/update/delete config + rows).
|
|
2
|
+
|
|
3
|
+
Extracted from sync_service.py. ``push()`` calls :func:`push_create`,
|
|
4
|
+
:func:`push_update`, and :func:`push_row_change`; the row dispatcher fans out to
|
|
5
|
+
the create/update/delete row helpers. Each reads a local ``_config.yml``,
|
|
6
|
+
encrypts ``#``-prefixed secrets (fail-closed), POSTs/PUTs/DELETEs, then writes
|
|
7
|
+
the API-assigned id + encrypted secrets back to disk and refreshes the manifest
|
|
8
|
+
hashes. Free functions taking the ``SyncService`` for the on-disk helpers it owns
|
|
9
|
+
(``_read_config_file`` / ``_file_hash`` / ``_resolve_source_branch_path``).
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import copy
|
|
15
|
+
import logging
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from typing import TYPE_CHECKING, Any
|
|
18
|
+
|
|
19
|
+
from ..constants import CONFIG_FILENAME
|
|
20
|
+
from ..errors import ErrorCode, KeboolaApiError
|
|
21
|
+
from ..sync.code_extraction import merge_code_files
|
|
22
|
+
from ..sync.config_format import local_config_to_api, local_row_to_api
|
|
23
|
+
from ..sync.diff_engine import config_hash
|
|
24
|
+
from ..sync.manifest import Manifest, ManifestConfiguration
|
|
25
|
+
from ._encryption import encrypt_secrets_in_config
|
|
26
|
+
from ._sync_writeback import writeback_after_push, writeback_create_row_in_manifest
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from .sync_service import SyncService
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def push_row_change(
|
|
35
|
+
service: SyncService,
|
|
36
|
+
client: Any,
|
|
37
|
+
*,
|
|
38
|
+
change_type: str,
|
|
39
|
+
component_id: str,
|
|
40
|
+
parent_config_id: str,
|
|
41
|
+
row_id: str,
|
|
42
|
+
row_path_str: str,
|
|
43
|
+
project_root: Path,
|
|
44
|
+
manifest: Manifest,
|
|
45
|
+
branch_id: int | None,
|
|
46
|
+
allow_plaintext_fallback: bool = False,
|
|
47
|
+
) -> str | None:
|
|
48
|
+
"""Dispatch a single row-level change (added/modified/deleted) to the API.
|
|
49
|
+
|
|
50
|
+
``#``-prefixed secrets in the row's configuration are encrypted via
|
|
51
|
+
:func:`encrypt_secrets_in_config` before POST/PUT (same fail-closed semantics
|
|
52
|
+
as parent configs). Mutates ``manifest`` in place; the caller is responsible
|
|
53
|
+
for persisting it.
|
|
54
|
+
|
|
55
|
+
``parent_config_id`` must already be the *effective* parent id: on a fresh
|
|
56
|
+
CREATE the caller remaps the diff-time placeholder to the API-assigned ULID
|
|
57
|
+
before dispatch, so both the manifest parent lookup and
|
|
58
|
+
``create_config_row(config_id=...)`` hit the real config (KFR-05).
|
|
59
|
+
|
|
60
|
+
Returns the API-assigned row id on ``added`` (so the caller can map
|
|
61
|
+
placeholder -> ULID for variable-link backfill), else ``None``.
|
|
62
|
+
"""
|
|
63
|
+
parent = next(
|
|
64
|
+
(
|
|
65
|
+
c
|
|
66
|
+
for c in manifest.configurations
|
|
67
|
+
if c.component_id == component_id and c.id == parent_config_id
|
|
68
|
+
),
|
|
69
|
+
None,
|
|
70
|
+
)
|
|
71
|
+
if parent is None and change_type != "deleted":
|
|
72
|
+
raise KeboolaApiError(
|
|
73
|
+
message=(
|
|
74
|
+
f"Cannot push row {row_id}: parent config {component_id}/"
|
|
75
|
+
f"{parent_config_id} is not tracked in the manifest."
|
|
76
|
+
),
|
|
77
|
+
status_code=0,
|
|
78
|
+
error_code=ErrorCode.PARENT_CONFIG_NOT_TRACKED,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
project_id = manifest.project.id if manifest.project else None
|
|
82
|
+
|
|
83
|
+
if change_type == "deleted":
|
|
84
|
+
_push_delete_row(
|
|
85
|
+
client,
|
|
86
|
+
component_id=component_id,
|
|
87
|
+
parent_config_id=parent_config_id,
|
|
88
|
+
row_id=row_id,
|
|
89
|
+
parent=parent,
|
|
90
|
+
branch_id=branch_id,
|
|
91
|
+
)
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
# added / modified both read a local row file and encrypt-then-push.
|
|
95
|
+
assert parent is not None # guarded above for non-deleted change_types
|
|
96
|
+
source_branch_path = service._resolve_source_branch_path(manifest, project_root, branch_id)
|
|
97
|
+
row_dir = project_root / source_branch_path / parent.path / row_path_str
|
|
98
|
+
|
|
99
|
+
if change_type == "added":
|
|
100
|
+
return _push_create_row(
|
|
101
|
+
service,
|
|
102
|
+
client,
|
|
103
|
+
component_id=component_id,
|
|
104
|
+
parent_config_id=parent_config_id,
|
|
105
|
+
row_dir=row_dir,
|
|
106
|
+
parent=parent,
|
|
107
|
+
row_path_str=row_path_str,
|
|
108
|
+
branch_id=branch_id,
|
|
109
|
+
project_id=project_id,
|
|
110
|
+
allow_plaintext_fallback=allow_plaintext_fallback,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
if change_type == "modified":
|
|
114
|
+
push_update_row(
|
|
115
|
+
service,
|
|
116
|
+
client,
|
|
117
|
+
component_id=component_id,
|
|
118
|
+
parent_config_id=parent_config_id,
|
|
119
|
+
row_id=row_id,
|
|
120
|
+
row_dir=row_dir,
|
|
121
|
+
parent=parent,
|
|
122
|
+
branch_id=branch_id,
|
|
123
|
+
project_id=project_id,
|
|
124
|
+
allow_plaintext_fallback=allow_plaintext_fallback,
|
|
125
|
+
)
|
|
126
|
+
return None
|
|
127
|
+
|
|
128
|
+
raise ValueError(f"Unsupported row change_type: {change_type}")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _push_create_row(
|
|
132
|
+
service: SyncService,
|
|
133
|
+
client: Any,
|
|
134
|
+
*,
|
|
135
|
+
component_id: str,
|
|
136
|
+
parent_config_id: str,
|
|
137
|
+
row_dir: Path,
|
|
138
|
+
parent: ManifestConfiguration,
|
|
139
|
+
row_path_str: str,
|
|
140
|
+
branch_id: int | None,
|
|
141
|
+
project_id: int | None,
|
|
142
|
+
allow_plaintext_fallback: bool,
|
|
143
|
+
) -> str:
|
|
144
|
+
"""POST a new row; record API-assigned id + hashes in the parent's row list.
|
|
145
|
+
|
|
146
|
+
Returns the API-assigned row id.
|
|
147
|
+
"""
|
|
148
|
+
local_data = service._read_config_file(row_dir)
|
|
149
|
+
if local_data is None:
|
|
150
|
+
raise FileNotFoundError(f"Row file not found: {row_dir / CONFIG_FILENAME}")
|
|
151
|
+
|
|
152
|
+
pristine_data = copy.deepcopy(local_data)
|
|
153
|
+
name, description, configuration = local_row_to_api(local_data, component_id)
|
|
154
|
+
configuration = encrypt_secrets_in_config(
|
|
155
|
+
client,
|
|
156
|
+
project_id,
|
|
157
|
+
component_id,
|
|
158
|
+
configuration,
|
|
159
|
+
allow_plaintext_fallback=allow_plaintext_fallback,
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
result = client.create_config_row(
|
|
163
|
+
component_id=component_id,
|
|
164
|
+
config_id=parent_config_id,
|
|
165
|
+
name=name,
|
|
166
|
+
configuration=configuration,
|
|
167
|
+
description=description,
|
|
168
|
+
branch_id=branch_id,
|
|
169
|
+
)
|
|
170
|
+
new_row_id = str(result.get("id", ""))
|
|
171
|
+
logger.info("Created row %s/%s/%s", component_id, parent_config_id, new_row_id)
|
|
172
|
+
|
|
173
|
+
# Write-back: encrypted secrets land in the local file so a subsequent diff
|
|
174
|
+
# sees local == remote. ``config_id=""`` tells the shared helper to skip
|
|
175
|
+
# writing a config_id into ``_keboola`` (rows use ``row_id``).
|
|
176
|
+
writeback_after_push(service, pristine_data, row_dir, "", configuration)
|
|
177
|
+
|
|
178
|
+
row_file = row_dir / CONFIG_FILENAME
|
|
179
|
+
new_file_hash = service._file_hash(row_file) if row_file.exists() else ""
|
|
180
|
+
cfg_hash_value = config_hash(pristine_data)
|
|
181
|
+
writeback_create_row_in_manifest(
|
|
182
|
+
parent=parent,
|
|
183
|
+
row_path_str=row_path_str,
|
|
184
|
+
new_row_id=new_row_id,
|
|
185
|
+
file_hash=new_file_hash,
|
|
186
|
+
cfg_hash=cfg_hash_value,
|
|
187
|
+
)
|
|
188
|
+
return new_row_id
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def push_update_row(
|
|
192
|
+
service: SyncService,
|
|
193
|
+
client: Any,
|
|
194
|
+
*,
|
|
195
|
+
component_id: str,
|
|
196
|
+
parent_config_id: str,
|
|
197
|
+
row_id: str,
|
|
198
|
+
row_dir: Path,
|
|
199
|
+
parent: ManifestConfiguration,
|
|
200
|
+
branch_id: int | None,
|
|
201
|
+
project_id: int | None,
|
|
202
|
+
allow_plaintext_fallback: bool,
|
|
203
|
+
) -> None:
|
|
204
|
+
"""PUT an existing row; refresh its hashes in the parent's row list."""
|
|
205
|
+
local_data = service._read_config_file(row_dir)
|
|
206
|
+
if local_data is None:
|
|
207
|
+
raise FileNotFoundError(f"Row file not found: {row_dir / CONFIG_FILENAME}")
|
|
208
|
+
|
|
209
|
+
pristine_data = copy.deepcopy(local_data)
|
|
210
|
+
name, description, configuration = local_row_to_api(local_data, component_id)
|
|
211
|
+
configuration = encrypt_secrets_in_config(
|
|
212
|
+
client,
|
|
213
|
+
project_id,
|
|
214
|
+
component_id,
|
|
215
|
+
configuration,
|
|
216
|
+
allow_plaintext_fallback=allow_plaintext_fallback,
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
client.update_config_row(
|
|
220
|
+
component_id=component_id,
|
|
221
|
+
config_id=parent_config_id,
|
|
222
|
+
row_id=row_id,
|
|
223
|
+
name=name,
|
|
224
|
+
configuration=configuration,
|
|
225
|
+
description=description,
|
|
226
|
+
change_description="Updated via kbagent sync push",
|
|
227
|
+
branch_id=branch_id,
|
|
228
|
+
)
|
|
229
|
+
logger.info("Updated row %s/%s/%s", component_id, parent_config_id, row_id)
|
|
230
|
+
|
|
231
|
+
writeback_after_push(service, pristine_data, row_dir, "", configuration)
|
|
232
|
+
|
|
233
|
+
row_file = row_dir / CONFIG_FILENAME
|
|
234
|
+
new_file_hash = service._file_hash(row_file) if row_file.exists() else ""
|
|
235
|
+
cfg_hash_value = config_hash(pristine_data)
|
|
236
|
+
for r in parent.rows:
|
|
237
|
+
if r.id == row_id:
|
|
238
|
+
r.metadata["pull_hash"] = new_file_hash
|
|
239
|
+
r.metadata["pull_config_hash"] = cfg_hash_value
|
|
240
|
+
break
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def _push_delete_row(
|
|
244
|
+
client: Any,
|
|
245
|
+
*,
|
|
246
|
+
component_id: str,
|
|
247
|
+
parent_config_id: str,
|
|
248
|
+
row_id: str,
|
|
249
|
+
parent: ManifestConfiguration | None,
|
|
250
|
+
branch_id: int | None,
|
|
251
|
+
) -> None:
|
|
252
|
+
"""DELETE a row; prune it from the parent's row list in the manifest."""
|
|
253
|
+
client.delete_config_row(
|
|
254
|
+
component_id=component_id,
|
|
255
|
+
config_id=parent_config_id,
|
|
256
|
+
row_id=row_id,
|
|
257
|
+
branch_id=branch_id,
|
|
258
|
+
)
|
|
259
|
+
if parent is not None:
|
|
260
|
+
parent.rows = [r for r in parent.rows if r.id != row_id]
|
|
261
|
+
logger.info("Deleted row %s/%s/%s", component_id, parent_config_id, row_id)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def push_create(
|
|
265
|
+
service: SyncService,
|
|
266
|
+
client: Any,
|
|
267
|
+
component_id: str,
|
|
268
|
+
config_path_str: str,
|
|
269
|
+
project_root: Path,
|
|
270
|
+
manifest: Manifest,
|
|
271
|
+
branch_id: int | None,
|
|
272
|
+
*,
|
|
273
|
+
allow_plaintext_fallback: bool = False,
|
|
274
|
+
) -> dict[str, Any] | None:
|
|
275
|
+
"""Create a new config from a local _config.yml file."""
|
|
276
|
+
branch_path = service._resolve_source_branch_path(manifest, project_root, branch_id)
|
|
277
|
+
config_dir = project_root / branch_path / config_path_str
|
|
278
|
+
local_data = service._read_config_file(config_dir)
|
|
279
|
+
if local_data is None:
|
|
280
|
+
return None
|
|
281
|
+
|
|
282
|
+
# Preserve pristine data for writeback (merge_code_files mutates local_data
|
|
283
|
+
# by injecting parameters.blocks which should not end up in _config.yml).
|
|
284
|
+
pristine_data = copy.deepcopy(local_data)
|
|
285
|
+
|
|
286
|
+
# Merge code files (transform.sql, transform.py, code.py) back into config
|
|
287
|
+
merge_code_files(component_id, local_data, config_dir)
|
|
288
|
+
|
|
289
|
+
name, description, configuration = local_config_to_api(local_data)
|
|
290
|
+
|
|
291
|
+
# Encrypt #-prefixed secrets before sending to API
|
|
292
|
+
project_id = manifest.project.id if manifest.project else None
|
|
293
|
+
configuration = encrypt_secrets_in_config(
|
|
294
|
+
client,
|
|
295
|
+
project_id,
|
|
296
|
+
component_id,
|
|
297
|
+
configuration,
|
|
298
|
+
allow_plaintext_fallback=allow_plaintext_fallback,
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
result = client.create_config(
|
|
302
|
+
component_id=component_id,
|
|
303
|
+
name=name,
|
|
304
|
+
configuration=configuration,
|
|
305
|
+
description=description,
|
|
306
|
+
branch_id=branch_id,
|
|
307
|
+
)
|
|
308
|
+
new_config_id = result.get("id", "")
|
|
309
|
+
logger.info("Created config %s/%s (ID: %s)", component_id, name, new_config_id)
|
|
310
|
+
|
|
311
|
+
# Write back: update local file with config_id + encrypted secrets. Use
|
|
312
|
+
# pristine_data so blocks/code stay only in their code files.
|
|
313
|
+
writeback_after_push(service, pristine_data, config_dir, new_config_id, configuration)
|
|
314
|
+
|
|
315
|
+
return result
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def push_update(
|
|
319
|
+
service: SyncService,
|
|
320
|
+
client: Any,
|
|
321
|
+
component_id: str,
|
|
322
|
+
config_id: str,
|
|
323
|
+
config_path_str: str,
|
|
324
|
+
project_root: Path,
|
|
325
|
+
manifest: Manifest,
|
|
326
|
+
branch_id: int | None,
|
|
327
|
+
*,
|
|
328
|
+
allow_plaintext_fallback: bool = False,
|
|
329
|
+
) -> None:
|
|
330
|
+
"""Update an existing config from a local _config.yml file."""
|
|
331
|
+
branch_path = service._resolve_source_branch_path(manifest, project_root, branch_id)
|
|
332
|
+
config_dir = project_root / branch_path / config_path_str
|
|
333
|
+
local_data = service._read_config_file(config_dir)
|
|
334
|
+
if local_data is None:
|
|
335
|
+
raise FileNotFoundError(f"Config file not found: {config_dir / CONFIG_FILENAME}")
|
|
336
|
+
|
|
337
|
+
# Preserve pristine data for writeback (merge_code_files mutates local_data
|
|
338
|
+
# by injecting parameters.blocks which should not end up in _config.yml).
|
|
339
|
+
pristine_data = copy.deepcopy(local_data)
|
|
340
|
+
|
|
341
|
+
# Merge code files (transform.sql, transform.py, code.py) back into config
|
|
342
|
+
merge_code_files(component_id, local_data, config_dir)
|
|
343
|
+
|
|
344
|
+
name, description, configuration = local_config_to_api(local_data)
|
|
345
|
+
|
|
346
|
+
# Encrypt #-prefixed secrets before sending to API
|
|
347
|
+
project_id = manifest.project.id if manifest.project else None
|
|
348
|
+
configuration = encrypt_secrets_in_config(
|
|
349
|
+
client,
|
|
350
|
+
project_id,
|
|
351
|
+
component_id,
|
|
352
|
+
configuration,
|
|
353
|
+
allow_plaintext_fallback=allow_plaintext_fallback,
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
client.update_config(
|
|
357
|
+
component_id=component_id,
|
|
358
|
+
config_id=config_id,
|
|
359
|
+
name=name,
|
|
360
|
+
configuration=configuration,
|
|
361
|
+
description=description,
|
|
362
|
+
change_description="Updated via kbagent sync push",
|
|
363
|
+
branch_id=branch_id,
|
|
364
|
+
)
|
|
365
|
+
logger.info("Updated config %s/%s", component_id, config_id)
|
|
366
|
+
|
|
367
|
+
# Write back: update local file with encrypted secrets. Use pristine_data so
|
|
368
|
+
# blocks/code stay only in their code files.
|
|
369
|
+
writeback_after_push(service, pristine_data, config_dir, config_id, configuration)
|