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,290 @@
|
|
|
1
|
+
"""Conversion between Keboola API JSON and local _config.yml format.
|
|
2
|
+
|
|
3
|
+
The local format is a human-friendly YAML structure that "promotes" deeply
|
|
4
|
+
nested configuration keys (parameters, storage.input, storage.output,
|
|
5
|
+
processors) to the top level and adds a ``_keboola`` metadata block.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import copy
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from ..constants import CONFIG_YML_VERSION
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _normalize_scripts(parameters: Any) -> Any:
|
|
17
|
+
"""Normalize script arrays in transformation parameters.
|
|
18
|
+
|
|
19
|
+
The Keboola API inconsistently returns code scripts as either:
|
|
20
|
+
- ``["line1", "line2", ...]`` (per-line array)
|
|
21
|
+
- ``["full\\ncode\\nwith\\nnewlines"]`` (single multiline string)
|
|
22
|
+
|
|
23
|
+
This normalizes to single-string-per-code-block format so that local
|
|
24
|
+
merge (which produces single-string via ``_lines_to_script``) and
|
|
25
|
+
remote data compare identically. The Keboola transformation runner
|
|
26
|
+
treats each array element as a separate executable statement, so each
|
|
27
|
+
CODE block must be a single joined string.
|
|
28
|
+
"""
|
|
29
|
+
if not isinstance(parameters, dict):
|
|
30
|
+
return parameters
|
|
31
|
+
params = copy.deepcopy(parameters)
|
|
32
|
+
for block in params.get("blocks", []):
|
|
33
|
+
if not isinstance(block, dict):
|
|
34
|
+
continue
|
|
35
|
+
for code in block.get("codes", []):
|
|
36
|
+
if not isinstance(code, dict):
|
|
37
|
+
continue
|
|
38
|
+
scripts = code.get("script")
|
|
39
|
+
if isinstance(scripts, list) and scripts:
|
|
40
|
+
# Flatten everything into individual lines first.
|
|
41
|
+
all_lines: list[str] = []
|
|
42
|
+
for s in scripts:
|
|
43
|
+
if isinstance(s, str) and "\n" in s:
|
|
44
|
+
all_lines.extend(s.split("\n"))
|
|
45
|
+
else:
|
|
46
|
+
all_lines.append(s)
|
|
47
|
+
# Strip trailing whitespace per line (YAML roundtrip
|
|
48
|
+
# strips it) and remove trailing empty lines.
|
|
49
|
+
all_lines = [line.rstrip() for line in all_lines]
|
|
50
|
+
while all_lines and all_lines[-1] == "":
|
|
51
|
+
all_lines.pop()
|
|
52
|
+
# Join into a single string per code block.
|
|
53
|
+
code["script"] = ["\n".join(all_lines)] if all_lines else []
|
|
54
|
+
return params
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# ---------------------------------------------------------------------------
|
|
58
|
+
# Component type mapping
|
|
59
|
+
# ---------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
COMPONENT_TYPE_MAP: dict[str, str] = {
|
|
62
|
+
"extractor": "extractor",
|
|
63
|
+
"writer": "writer",
|
|
64
|
+
"transformation": "transformation",
|
|
65
|
+
"application": "application",
|
|
66
|
+
"other": "other",
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# Row-bearing components whose `configuration` top-level keys do NOT fit the
|
|
70
|
+
# standard `parameters` / `storage` / `processors` shape. For these, the
|
|
71
|
+
# non-standard keys (e.g. `values` for variables, `code_content` for shared-code)
|
|
72
|
+
# are hoisted to the top level of the local YAML instead of being hidden inside
|
|
73
|
+
# `_configuration_extra`, so that humans and agents can edit them directly
|
|
74
|
+
# (matching `kbc push` convention — FIIA scaffold kit relies on this).
|
|
75
|
+
ROW_HOIST_COMPONENTS: set[str] = {"keboola.variables", "keboola.shared-code"}
|
|
76
|
+
|
|
77
|
+
# Top-level keys in the local row YAML that are never part of the API
|
|
78
|
+
# `configuration` body. Used by `local_row_to_api` to separate editable payload
|
|
79
|
+
# keys from local metadata when the component is in ROW_HOIST_COMPONENTS.
|
|
80
|
+
_ROW_LOCAL_RESERVED_KEYS: frozenset[str] = frozenset(
|
|
81
|
+
{
|
|
82
|
+
"version",
|
|
83
|
+
"name",
|
|
84
|
+
"description",
|
|
85
|
+
"parameters",
|
|
86
|
+
"input",
|
|
87
|
+
"output",
|
|
88
|
+
"processors",
|
|
89
|
+
"_configuration_extra",
|
|
90
|
+
"_keboola",
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def classify_component_type(api_type: str) -> str:
|
|
96
|
+
"""Map an API component type string to its filesystem directory name.
|
|
97
|
+
|
|
98
|
+
Falls back to ``"other"`` for unknown types.
|
|
99
|
+
"""
|
|
100
|
+
return COMPONENT_TYPE_MAP.get(api_type, "other")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# ---------------------------------------------------------------------------
|
|
104
|
+
# API -> local _config.yml
|
|
105
|
+
# ---------------------------------------------------------------------------
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def api_config_to_local(
|
|
109
|
+
component_id: str, config_data: dict[str, Any], config_id: str
|
|
110
|
+
) -> dict[str, Any]:
|
|
111
|
+
"""Convert an API configuration response to the local ``_config.yml`` structure.
|
|
112
|
+
|
|
113
|
+
Transformation rules:
|
|
114
|
+
- ``version``: always ``CONFIG_YML_VERSION``
|
|
115
|
+
- ``name``, ``description``: taken from the top-level API response
|
|
116
|
+
- ``configuration.parameters`` -> ``parameters``
|
|
117
|
+
- ``configuration.storage.input`` -> ``input``
|
|
118
|
+
- ``configuration.storage.output`` -> ``output``
|
|
119
|
+
- ``configuration.processors`` -> ``processors``
|
|
120
|
+
- ``_keboola``: ``{component_id, config_id}``
|
|
121
|
+
|
|
122
|
+
Any remaining keys inside ``configuration`` that are not explicitly
|
|
123
|
+
promoted are preserved under a ``_configuration_extra`` key so that
|
|
124
|
+
round-tripping does not lose data.
|
|
125
|
+
"""
|
|
126
|
+
configuration: dict[str, Any] = config_data.get("configuration") or {}
|
|
127
|
+
|
|
128
|
+
local: dict[str, Any] = {
|
|
129
|
+
"version": CONFIG_YML_VERSION,
|
|
130
|
+
"name": config_data.get("name", ""),
|
|
131
|
+
"description": config_data.get("description", ""),
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# Promote well-known nested keys
|
|
135
|
+
if "parameters" in configuration:
|
|
136
|
+
local["parameters"] = _normalize_scripts(configuration["parameters"])
|
|
137
|
+
|
|
138
|
+
storage: dict[str, Any] = configuration.get("storage") or {}
|
|
139
|
+
if "input" in storage:
|
|
140
|
+
local["input"] = storage["input"]
|
|
141
|
+
if "output" in storage:
|
|
142
|
+
local["output"] = storage["output"]
|
|
143
|
+
|
|
144
|
+
if "processors" in configuration:
|
|
145
|
+
local["processors"] = configuration["processors"]
|
|
146
|
+
|
|
147
|
+
# Preserve any extra keys that we do not explicitly promote
|
|
148
|
+
promoted_keys = {"parameters", "storage", "processors"}
|
|
149
|
+
extras = {k: v for k, v in configuration.items() if k not in promoted_keys}
|
|
150
|
+
if extras:
|
|
151
|
+
local["_configuration_extra"] = extras
|
|
152
|
+
|
|
153
|
+
# Keboola metadata footer
|
|
154
|
+
local["_keboola"] = {
|
|
155
|
+
"component_id": component_id,
|
|
156
|
+
"config_id": config_id,
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return local
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
# ---------------------------------------------------------------------------
|
|
163
|
+
# local _config.yml -> API
|
|
164
|
+
# ---------------------------------------------------------------------------
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def local_config_to_api(
|
|
168
|
+
config_yml: dict[str, Any],
|
|
169
|
+
) -> tuple[str, str, dict[str, Any]]:
|
|
170
|
+
"""Convert a local ``_config.yml`` dict back to API format.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
A tuple of ``(name, description, configuration_dict)`` suitable for
|
|
174
|
+
an API create/update call.
|
|
175
|
+
"""
|
|
176
|
+
name: str = config_yml.get("name", "")
|
|
177
|
+
description: str = config_yml.get("description", "")
|
|
178
|
+
|
|
179
|
+
configuration: dict[str, Any] = {}
|
|
180
|
+
|
|
181
|
+
if "parameters" in config_yml:
|
|
182
|
+
configuration["parameters"] = config_yml["parameters"]
|
|
183
|
+
|
|
184
|
+
# Re-nest input/output under storage
|
|
185
|
+
storage: dict[str, Any] = {}
|
|
186
|
+
if "input" in config_yml:
|
|
187
|
+
storage["input"] = config_yml["input"]
|
|
188
|
+
if "output" in config_yml:
|
|
189
|
+
storage["output"] = config_yml["output"]
|
|
190
|
+
if storage:
|
|
191
|
+
configuration["storage"] = storage
|
|
192
|
+
|
|
193
|
+
if "processors" in config_yml:
|
|
194
|
+
configuration["processors"] = config_yml["processors"]
|
|
195
|
+
|
|
196
|
+
# Merge back any extras that were preserved during api->local conversion
|
|
197
|
+
extras: dict[str, Any] = config_yml.get("_configuration_extra", {})
|
|
198
|
+
for key, value in extras.items():
|
|
199
|
+
configuration.setdefault(key, value)
|
|
200
|
+
|
|
201
|
+
return name, description, configuration
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
# ---------------------------------------------------------------------------
|
|
205
|
+
# Row helpers
|
|
206
|
+
# ---------------------------------------------------------------------------
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def api_row_to_local(row_data: dict[str, Any], component_id: str) -> dict[str, Any]:
|
|
210
|
+
"""Convert an API configuration row to a local row ``_config.yml``.
|
|
211
|
+
|
|
212
|
+
Follows the same promotion rules as :func:`api_config_to_local`, with one
|
|
213
|
+
exception: for components in :data:`ROW_HOIST_COMPONENTS`, non-standard
|
|
214
|
+
top-level ``configuration`` keys (e.g. ``values`` for ``keboola.variables``)
|
|
215
|
+
are hoisted directly into the local YAML instead of being wrapped under
|
|
216
|
+
``_configuration_extra``, so users can edit them naturally.
|
|
217
|
+
"""
|
|
218
|
+
configuration: dict[str, Any] = row_data.get("configuration") or {}
|
|
219
|
+
|
|
220
|
+
local: dict[str, Any] = {
|
|
221
|
+
"version": CONFIG_YML_VERSION,
|
|
222
|
+
"name": row_data.get("name", ""),
|
|
223
|
+
"description": row_data.get("description", ""),
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if "parameters" in configuration:
|
|
227
|
+
local["parameters"] = configuration["parameters"]
|
|
228
|
+
|
|
229
|
+
storage: dict[str, Any] = configuration.get("storage") or {}
|
|
230
|
+
if "input" in storage:
|
|
231
|
+
local["input"] = storage["input"]
|
|
232
|
+
if "output" in storage:
|
|
233
|
+
local["output"] = storage["output"]
|
|
234
|
+
|
|
235
|
+
if "processors" in configuration:
|
|
236
|
+
local["processors"] = configuration["processors"]
|
|
237
|
+
|
|
238
|
+
promoted_keys = {"parameters", "storage", "processors"}
|
|
239
|
+
extras = {k: v for k, v in configuration.items() if k not in promoted_keys}
|
|
240
|
+
if extras:
|
|
241
|
+
if component_id in ROW_HOIST_COMPONENTS:
|
|
242
|
+
for key, value in extras.items():
|
|
243
|
+
local[key] = value
|
|
244
|
+
else:
|
|
245
|
+
local["_configuration_extra"] = extras
|
|
246
|
+
|
|
247
|
+
local["_keboola"] = {
|
|
248
|
+
"component_id": component_id,
|
|
249
|
+
"row_id": row_data.get("id", ""),
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return local
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def local_row_to_api(
|
|
256
|
+
row_yml: dict[str, Any],
|
|
257
|
+
component_id: str | None = None,
|
|
258
|
+
) -> tuple[str, str, dict[str, Any]]:
|
|
259
|
+
"""Convert a local row ``_config.yml`` back to API format.
|
|
260
|
+
|
|
261
|
+
For components in :data:`ROW_HOIST_COMPONENTS`, hoisted top-level keys
|
|
262
|
+
(outside the reserved set) are pulled back into the API ``configuration``
|
|
263
|
+
body. For all other components this behaves identically to
|
|
264
|
+
:func:`local_config_to_api`.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
row_yml: The local row ``_config.yml`` dict.
|
|
268
|
+
component_id: The component id the row belongs to. When provided
|
|
269
|
+
(the caller almost always knows it), it drives the hoist check
|
|
270
|
+
directly. When ``None`` (back-compat), the id is read from the
|
|
271
|
+
file's ``_keboola.component_id``. The explicit form is required
|
|
272
|
+
for fresh-CREATE rows whose scaffold ``_config.yml`` does not yet
|
|
273
|
+
carry a ``_keboola`` block, so that ``keboola.variables`` rows
|
|
274
|
+
still hoist their ``values`` array into the API body (KFR-04).
|
|
275
|
+
|
|
276
|
+
Returns:
|
|
277
|
+
A tuple of ``(name, description, configuration_dict)``.
|
|
278
|
+
"""
|
|
279
|
+
keboola_meta: dict[str, Any] = row_yml.get("_keboola") or {}
|
|
280
|
+
resolved_component_id: str = component_id or keboola_meta.get("component_id", "")
|
|
281
|
+
|
|
282
|
+
name, description, configuration = local_config_to_api(row_yml)
|
|
283
|
+
|
|
284
|
+
if resolved_component_id in ROW_HOIST_COMPONENTS:
|
|
285
|
+
for key, value in row_yml.items():
|
|
286
|
+
if key in _ROW_LOCAL_RESERVED_KEYS:
|
|
287
|
+
continue
|
|
288
|
+
configuration.setdefault(key, value)
|
|
289
|
+
|
|
290
|
+
return name, description, configuration
|