databay-cli 0.1.0__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.
Files changed (403) hide show
  1. databay/__init__.py +5 -0
  2. databay/__main__.py +7 -0
  3. databay/agent_skill.py +184 -0
  4. databay/api.py +626 -0
  5. databay/cli/__init__.py +0 -0
  6. databay/cli/auth.py +377 -0
  7. databay/cli/build.py +89 -0
  8. databay/cli/commands/__init__.py +0 -0
  9. databay/cli/commands/alerting_webhook.py +19 -0
  10. databay/cli/commands/alerting_webhook_tag.py +14 -0
  11. databay/cli/commands/alerting_webhook_type.py +14 -0
  12. databay/cli/commands/alerting_webhook_undelivered.py +15 -0
  13. databay/cli/commands/announcement.py +17 -0
  14. databay/cli/commands/api_key.py +18 -0
  15. databay/cli/commands/api_key_project.py +16 -0
  16. databay/cli/commands/backfill_reason_code.py +14 -0
  17. databay/cli/commands/backfill_run.py +17 -0
  18. databay/cli/commands/canvas.py +16 -0
  19. databay/cli/commands/canvas_graph.py +15 -0
  20. databay/cli/commands/canvas_table_check.py +15 -0
  21. databay/cli/commands/dashboards.py +21 -0
  22. databay/cli/commands/dashboards_card.py +20 -0
  23. databay/cli/commands/dashboards_dataset.py +14 -0
  24. databay/cli/commands/dashboards_folder.py +16 -0
  25. databay/cli/commands/dashboards_home.py +17 -0
  26. databay/cli/commands/dashboards_placement.py +16 -0
  27. databay/cli/commands/db.py +19 -0
  28. databay/cli/commands/db_column.py +14 -0
  29. databay/cli/commands/docs_article.py +16 -0
  30. databay/cli/commands/dq_result.py +14 -0
  31. databay/cli/commands/dq_rule.py +16 -0
  32. databay/cli/commands/feature.py +14 -0
  33. databay/cli/commands/google_ads_source.py +14 -0
  34. databay/cli/commands/google_analytics_source.py +14 -0
  35. databay/cli/commands/instagram_account.py +14 -0
  36. databay/cli/commands/instagram_source.py +14 -0
  37. databay/cli/commands/linkedin_account.py +14 -0
  38. databay/cli/commands/linkedin_source.py +14 -0
  39. databay/cli/commands/me.py +14 -0
  40. databay/cli/commands/meta_ads_source.py +14 -0
  41. databay/cli/commands/metric_models.py +26 -0
  42. databay/cli/commands/metrics.py +14 -0
  43. databay/cli/commands/models.py +16 -0
  44. databay/cli/commands/nlq.py +15 -0
  45. databay/cli/commands/notebook_credential.py +16 -0
  46. databay/cli/commands/org.py +14 -0
  47. databay/cli/commands/org_member.py +17 -0
  48. databay/cli/commands/org_offboarding.py +14 -0
  49. databay/cli/commands/pipe.py +26 -0
  50. databay/cli/commands/pipe_backfill_run.py +14 -0
  51. databay/cli/commands/pipe_config_option.py +14 -0
  52. databay/cli/commands/pipe_destination.py +16 -0
  53. databay/cli/commands/pipe_leftover.py +16 -0
  54. databay/cli/commands/pipe_sink_type.py +14 -0
  55. databay/cli/commands/pipe_source_type.py +14 -0
  56. databay/cli/commands/pipe_status_bucket.py +14 -0
  57. databay/cli/commands/pipe_stuck_delete.py +14 -0
  58. databay/cli/commands/plan.py +14 -0
  59. databay/cli/commands/project.py +21 -0
  60. databay/cli/commands/project_budget.py +15 -0
  61. databay/cli/commands/project_member.py +18 -0
  62. databay/cli/commands/project_privilege.py +16 -0
  63. databay/cli/commands/project_share.py +16 -0
  64. databay/cli/commands/provision.py +14 -0
  65. databay/cli/commands/provisioning.py +14 -0
  66. databay/cli/commands/registry.py +14 -0
  67. databay/cli/commands/resource_home.py +14 -0
  68. databay/cli/commands/schema_change.py +18 -0
  69. databay/cli/commands/schema_history.py +17 -0
  70. databay/cli/commands/schema_version.py +16 -0
  71. databay/cli/commands/shopify_store.py +14 -0
  72. databay/cli/commands/sink_data_type.py +14 -0
  73. databay/cli/commands/source.py +24 -0
  74. databay/cli/commands/source_catalog.py +15 -0
  75. databay/cli/commands/source_check_run.py +17 -0
  76. databay/cli/commands/source_hidden_type.py +14 -0
  77. databay/cli/commands/source_name.py +14 -0
  78. databay/cli/commands/source_pipe.py +14 -0
  79. databay/cli/commands/source_publication.py +16 -0
  80. databay/cli/commands/source_readiness_override.py +15 -0
  81. databay/cli/commands/source_setup_choice.py +16 -0
  82. databay/cli/commands/source_stream.py +15 -0
  83. databay/cli/commands/source_table.py +14 -0
  84. databay/cli/commands/ssbi_job.py +18 -0
  85. databay/cli/commands/transform_type.py +14 -0
  86. databay/cli/commands/usage.py +14 -0
  87. databay/cli/commands/warehouse.py +21 -0
  88. databay/cli/commands/warehouse_access_assignment.py +16 -0
  89. databay/cli/commands/warehouse_access_role.py +22 -0
  90. databay/cli/commands/warehouse_access_settings.py +17 -0
  91. databay/cli/commands/warehouse_login.py +20 -0
  92. databay/cli/commands/warehouse_principal.py +17 -0
  93. databay/cli/commands/warehouse_service_account.py +17 -0
  94. databay/cli/commands/warehouse_service_account_credential.py +18 -0
  95. databay/cli/common.py +93 -0
  96. databay/cli/console.py +121 -0
  97. databay/cli/flags.py +183 -0
  98. databay/cli/handwritten.py +22 -0
  99. databay/cli/main.py +198 -0
  100. databay/cli/metrics.py +171 -0
  101. databay/cli/org.py +193 -0
  102. databay/cli/output.py +134 -0
  103. databay/cli/pipe_wait.py +357 -0
  104. databay/cli/profile.py +230 -0
  105. databay/cli/runner.py +432 -0
  106. databay/cli/skill.py +64 -0
  107. databay/cli/sql.py +84 -0
  108. databay/compat.py +161 -0
  109. databay/credentials.py +217 -0
  110. databay/error_catalog.py +226 -0
  111. databay/error_codes.py +3265 -0
  112. databay/errors.py +222 -0
  113. databay/feature_header.py +40 -0
  114. databay/invoke.py +225 -0
  115. databay/locks.py +41 -0
  116. databay/login_flow.py +245 -0
  117. databay/model_base.py +40 -0
  118. databay/models/__init__.py +0 -0
  119. databay/models/alerting_webhook.py +46 -0
  120. databay/models/alerting_webhook_tag.py +11 -0
  121. databay/models/alerting_webhook_type.py +11 -0
  122. databay/models/alerting_webhook_undelivered.py +23 -0
  123. databay/models/announcement.py +37 -0
  124. databay/models/api_key.py +81 -0
  125. databay/models/api_key_project.py +29 -0
  126. databay/models/backfill_reason_code.py +11 -0
  127. databay/models/backfill_run.py +41 -0
  128. databay/models/canvas.py +68 -0
  129. databay/models/canvas_graph.py +86 -0
  130. databay/models/canvas_table_check.py +181 -0
  131. databay/models/dashboards.py +79 -0
  132. databay/models/dashboards_card.py +37 -0
  133. databay/models/dashboards_dataset.py +27 -0
  134. databay/models/dashboards_folder.py +18 -0
  135. databay/models/dashboards_home.py +28 -0
  136. databay/models/db.py +34 -0
  137. databay/models/db_column.py +11 -0
  138. databay/models/docs_article.py +59 -0
  139. databay/models/dq_result.py +27 -0
  140. databay/models/dq_rule.py +43 -0
  141. databay/models/feature.py +15 -0
  142. databay/models/google_ads_source.py +11 -0
  143. databay/models/google_analytics_source.py +11 -0
  144. databay/models/instagram_source.py +11 -0
  145. databay/models/linkedin_source.py +11 -0
  146. databay/models/me.py +71 -0
  147. databay/models/meta_ads_source.py +11 -0
  148. databay/models/metric_models.py +274 -0
  149. databay/models/metrics.py +158 -0
  150. databay/models/models.py +73 -0
  151. databay/models/nlq.py +92 -0
  152. databay/models/notebook_credential.py +51 -0
  153. databay/models/org.py +44 -0
  154. databay/models/org_member.py +123 -0
  155. databay/models/org_offboarding.py +36 -0
  156. databay/models/pipe.py +340 -0
  157. databay/models/pipe_config_option.py +25 -0
  158. databay/models/pipe_destination.py +128 -0
  159. databay/models/pipe_leftover.py +51 -0
  160. databay/models/pipe_sink_type.py +11 -0
  161. databay/models/pipe_source_type.py +11 -0
  162. databay/models/pipe_status_bucket.py +13 -0
  163. databay/models/pipe_stuck_delete.py +25 -0
  164. databay/models/plan.py +37 -0
  165. databay/models/project.py +154 -0
  166. databay/models/project_budget.py +22 -0
  167. databay/models/project_member.py +67 -0
  168. databay/models/project_privilege.py +21 -0
  169. databay/models/project_share.py +76 -0
  170. databay/models/provision.py +12 -0
  171. databay/models/provisioning.py +20 -0
  172. databay/models/registry.py +18 -0
  173. databay/models/resource_home.py +35 -0
  174. databay/models/schema_change.py +96 -0
  175. databay/models/schema_history.py +32 -0
  176. databay/models/schema_version.py +23 -0
  177. databay/models/shared.py +875 -0
  178. databay/models/shopify_store.py +19 -0
  179. databay/models/sink_data_type.py +11 -0
  180. databay/models/source.py +263 -0
  181. databay/models/source_catalog.py +82 -0
  182. databay/models/source_check_run.py +63 -0
  183. databay/models/source_hidden_type.py +13 -0
  184. databay/models/source_name.py +18 -0
  185. databay/models/source_pipe.py +16 -0
  186. databay/models/source_publication.py +30 -0
  187. databay/models/source_readiness_override.py +13 -0
  188. databay/models/source_setup_choice.py +33 -0
  189. databay/models/source_stream.py +65 -0
  190. databay/models/source_table.py +27 -0
  191. databay/models/sql.py +31 -0
  192. databay/models/ssbi_job.py +97 -0
  193. databay/models/transform_type.py +40 -0
  194. databay/models/usage.py +112 -0
  195. databay/models/warehouse.py +38 -0
  196. databay/models/warehouse_access_assignment.py +70 -0
  197. databay/models/warehouse_access_role.py +148 -0
  198. databay/models/warehouse_access_settings.py +35 -0
  199. databay/models/warehouse_login.py +20 -0
  200. databay/models/warehouse_principal.py +49 -0
  201. databay/models/warehouse_service_account.py +35 -0
  202. databay/models/warehouse_service_account_credential.py +11 -0
  203. databay/oidc.py +205 -0
  204. databay/operation.py +191 -0
  205. databay/operations/__init__.py +0 -0
  206. databay/operations/alerting_webhook.py +317 -0
  207. databay/operations/alerting_webhook_tag.py +35 -0
  208. databay/operations/alerting_webhook_type.py +35 -0
  209. databay/operations/alerting_webhook_undelivered.py +74 -0
  210. databay/operations/announcement.py +135 -0
  211. databay/operations/api_key.py +198 -0
  212. databay/operations/api_key_project.py +130 -0
  213. databay/operations/backfill_reason_code.py +35 -0
  214. databay/operations/backfill_run.py +245 -0
  215. databay/operations/canvas.py +136 -0
  216. databay/operations/canvas_graph.py +102 -0
  217. databay/operations/canvas_table_check.py +101 -0
  218. databay/operations/dashboards.py +441 -0
  219. databay/operations/dashboards_card.py +406 -0
  220. databay/operations/dashboards_dataset.py +50 -0
  221. databay/operations/dashboards_folder.py +146 -0
  222. databay/operations/dashboards_home.py +176 -0
  223. databay/operations/dashboards_placement.py +152 -0
  224. databay/operations/db.py +337 -0
  225. databay/operations/db_column.py +57 -0
  226. databay/operations/docs_article.py +101 -0
  227. databay/operations/dq_result.py +43 -0
  228. databay/operations/dq_rule.py +155 -0
  229. databay/operations/feature.py +35 -0
  230. databay/operations/google_ads_source.py +40 -0
  231. databay/operations/google_analytics_source.py +40 -0
  232. databay/operations/instagram_account.py +47 -0
  233. databay/operations/instagram_source.py +40 -0
  234. databay/operations/linkedin_account.py +47 -0
  235. databay/operations/linkedin_source.py +40 -0
  236. databay/operations/me.py +57 -0
  237. databay/operations/meta_ads_source.py +40 -0
  238. databay/operations/metric_models.py +612 -0
  239. databay/operations/metrics.py +218 -0
  240. databay/operations/models.py +123 -0
  241. databay/operations/nlq.py +100 -0
  242. databay/operations/notebook_credential.py +95 -0
  243. databay/operations/org.py +79 -0
  244. databay/operations/org_member.py +192 -0
  245. databay/operations/org_offboarding.py +43 -0
  246. databay/operations/pipe.py +882 -0
  247. databay/operations/pipe_backfill_run.py +72 -0
  248. databay/operations/pipe_config_option.py +50 -0
  249. databay/operations/pipe_destination.py +178 -0
  250. databay/operations/pipe_leftover.py +110 -0
  251. databay/operations/pipe_sink_type.py +35 -0
  252. databay/operations/pipe_source_type.py +35 -0
  253. databay/operations/pipe_status_bucket.py +35 -0
  254. databay/operations/pipe_stuck_delete.py +52 -0
  255. databay/operations/plan.py +35 -0
  256. databay/operations/project.py +346 -0
  257. databay/operations/project_budget.py +135 -0
  258. databay/operations/project_member.py +226 -0
  259. databay/operations/project_privilege.py +143 -0
  260. databay/operations/project_share.py +160 -0
  261. databay/operations/provision.py +35 -0
  262. databay/operations/provisioning.py +35 -0
  263. databay/operations/registry.py +35 -0
  264. databay/operations/resource_home.py +80 -0
  265. databay/operations/schema_change.py +222 -0
  266. databay/operations/schema_history.py +136 -0
  267. databay/operations/schema_version.py +115 -0
  268. databay/operations/shopify_store.py +40 -0
  269. databay/operations/sink_data_type.py +43 -0
  270. databay/operations/source.py +1207 -0
  271. databay/operations/source_catalog.py +135 -0
  272. databay/operations/source_check_run.py +242 -0
  273. databay/operations/source_hidden_type.py +59 -0
  274. databay/operations/source_name.py +69 -0
  275. databay/operations/source_pipe.py +57 -0
  276. databay/operations/source_publication.py +139 -0
  277. databay/operations/source_readiness_override.py +96 -0
  278. databay/operations/source_setup_choice.py +161 -0
  279. databay/operations/source_stream.py +99 -0
  280. databay/operations/source_table.py +59 -0
  281. databay/operations/sql.py +54 -0
  282. databay/operations/ssbi_job.py +242 -0
  283. databay/operations/transform_type.py +35 -0
  284. databay/operations/usage.py +35 -0
  285. databay/operations/warehouse.py +343 -0
  286. databay/operations/warehouse_access_assignment.py +179 -0
  287. databay/operations/warehouse_access_role.py +473 -0
  288. databay/operations/warehouse_access_settings.py +172 -0
  289. databay/operations/warehouse_login.py +308 -0
  290. databay/operations/warehouse_principal.py +174 -0
  291. databay/operations/warehouse_service_account.py +206 -0
  292. databay/operations/warehouse_service_account_credential.py +285 -0
  293. databay/paths.py +32 -0
  294. databay/platform_check.py +20 -0
  295. databay/profiles.py +181 -0
  296. databay/redact.py +22 -0
  297. databay/reference.py +218 -0
  298. databay/resource.py +167 -0
  299. databay/resources/__init__.py +0 -0
  300. databay/resources/alerting_webhook.py +84 -0
  301. databay/resources/alerting_webhook_tag.py +21 -0
  302. databay/resources/alerting_webhook_type.py +21 -0
  303. databay/resources/alerting_webhook_undelivered.py +35 -0
  304. databay/resources/announcement.py +45 -0
  305. databay/resources/api_key.py +56 -0
  306. databay/resources/api_key_project.py +47 -0
  307. databay/resources/backfill_reason_code.py +21 -0
  308. databay/resources/backfill_run.py +78 -0
  309. databay/resources/canvas.py +43 -0
  310. databay/resources/canvas_graph.py +38 -0
  311. databay/resources/canvas_table_check.py +38 -0
  312. databay/resources/dashboards.py +105 -0
  313. databay/resources/dashboards_card.py +97 -0
  314. databay/resources/dashboards_dataset.py +27 -0
  315. databay/resources/dashboards_folder.py +47 -0
  316. databay/resources/dashboards_home.py +59 -0
  317. databay/resources/dashboards_placement.py +47 -0
  318. databay/resources/db.py +87 -0
  319. databay/resources/db_column.py +28 -0
  320. databay/resources/docs_article.py +37 -0
  321. databay/resources/dq_result.py +25 -0
  322. databay/resources/dq_rule.py +48 -0
  323. databay/resources/feature.py +21 -0
  324. databay/resources/google_ads_source.py +25 -0
  325. databay/resources/google_analytics_source.py +25 -0
  326. databay/resources/instagram_account.py +27 -0
  327. databay/resources/instagram_source.py +25 -0
  328. databay/resources/linkedin_account.py +27 -0
  329. databay/resources/linkedin_source.py +25 -0
  330. databay/resources/me.py +27 -0
  331. databay/resources/meta_ads_source.py +25 -0
  332. databay/resources/metric_models.py +154 -0
  333. databay/resources/metrics.py +57 -0
  334. databay/resources/models.py +42 -0
  335. databay/resources/nlq.py +34 -0
  336. databay/resources/notebook_credential.py +41 -0
  337. databay/resources/org.py +29 -0
  338. databay/resources/org_member.py +53 -0
  339. databay/resources/org_offboarding.py +25 -0
  340. databay/resources/pipe.py +208 -0
  341. databay/resources/pipe_backfill_run.py +28 -0
  342. databay/resources/pipe_config_option.py +26 -0
  343. databay/resources/pipe_destination.py +49 -0
  344. databay/resources/pipe_leftover.py +42 -0
  345. databay/resources/pipe_sink_type.py +21 -0
  346. databay/resources/pipe_source_type.py +21 -0
  347. databay/resources/pipe_status_bucket.py +21 -0
  348. databay/resources/pipe_stuck_delete.py +27 -0
  349. databay/resources/plan.py +21 -0
  350. databay/resources/project.py +92 -0
  351. databay/resources/project_budget.py +38 -0
  352. databay/resources/project_member.py +68 -0
  353. databay/resources/project_privilege.py +48 -0
  354. databay/resources/project_share.py +47 -0
  355. databay/resources/provision.py +21 -0
  356. databay/resources/provisioning.py +21 -0
  357. databay/resources/registry.py +21 -0
  358. databay/resources/resource_home.py +29 -0
  359. databay/resources/schema_change.py +62 -0
  360. databay/resources/schema_history.py +52 -0
  361. databay/resources/schema_version.py +43 -0
  362. databay/resources/shopify_store.py +25 -0
  363. databay/resources/sink_data_type.py +25 -0
  364. databay/resources/source.py +132 -0
  365. databay/resources/source_catalog.py +34 -0
  366. databay/resources/source_check_run.py +67 -0
  367. databay/resources/source_hidden_type.py +25 -0
  368. databay/resources/source_name.py +27 -0
  369. databay/resources/source_pipe.py +28 -0
  370. databay/resources/source_publication.py +47 -0
  371. databay/resources/source_readiness_override.py +37 -0
  372. databay/resources/source_setup_choice.py +50 -0
  373. databay/resources/source_stream.py +38 -0
  374. databay/resources/source_table.py +27 -0
  375. databay/resources/sql.py +27 -0
  376. databay/resources/ssbi_job.py +69 -0
  377. databay/resources/transform_type.py +21 -0
  378. databay/resources/usage.py +21 -0
  379. databay/resources/warehouse.py +136 -0
  380. databay/resources/warehouse_access_assignment.py +51 -0
  381. databay/resources/warehouse_access_role.py +118 -0
  382. databay/resources/warehouse_access_settings.py +56 -0
  383. databay/resources/warehouse_login.py +81 -0
  384. databay/resources/warehouse_principal.py +51 -0
  385. databay/resources/warehouse_service_account.py +61 -0
  386. databay/resources/warehouse_service_account_credential.py +78 -0
  387. databay/sdk.py +77 -0
  388. databay/settings.py +90 -0
  389. databay/skill/SKILL.md +357 -0
  390. databay/skill/references/commands.md +7025 -0
  391. databay/skill/references/errors.md +727 -0
  392. databay/spec.py +362 -0
  393. databay/stored_token.py +134 -0
  394. databay/tokens.py +108 -0
  395. databay/transport.py +357 -0
  396. databay/update_check.py +151 -0
  397. databay/version.py +6 -0
  398. databay/waits.py +330 -0
  399. databay_cli-0.1.0.dist-info/METADATA +42 -0
  400. databay_cli-0.1.0.dist-info/RECORD +403 -0
  401. databay_cli-0.1.0.dist-info/WHEEL +4 -0
  402. databay_cli-0.1.0.dist-info/entry_points.txt +2 -0
  403. databay_cli-0.1.0.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,882 @@
1
+ """The ``pipe`` operations.
2
+
3
+ Generated by python/tools/gen_client.py from contract/core.json; do not edit.
4
+ """
5
+
6
+ from databay.operation import Body, Operation, Param, Response, Wait
7
+
8
+
9
+ PIPE_CREATE = Operation(
10
+ operation_id='pipe_create',
11
+ noun='pipe',
12
+ verb='create',
13
+ method='post',
14
+ path='/api/cdc/pipe',
15
+ summary='Create Pipe',
16
+ description="Create a pipe asynchronously for any registered source type.\n\nThe request validates the source (404 missing, 412 needs re-auth, 409 uninstalled),\nresolves the sink (``sink_db_uuid`` or the organization's default), runs the\ndestination guards, and stores the pipe. A database pipe returns ``status=pending`` at once;\nprovisioning continues in the background until the pipe is ACTIVE or FAILED with\n``last_error``. Poll ``GET /pipe/{uuid}/status`` for progress. A pipe on an API source that\nloads on demand has nothing to provision: it returns ACTIVE and its first load is queued.",
17
+ project='body:project_id',
18
+ destructive=False,
19
+ idempotent=True,
20
+ since='1.0',
21
+ params=(),
22
+ body=Body(
23
+ schema='PipeV2Create',
24
+ fields=(
25
+ Param(
26
+ name='acknowledge_org_visible',
27
+ location='body',
28
+ kind='boolean',
29
+ required=False,
30
+ description="Consent to land a restricted project's tables in an organization-wide warehouse, where every organization member can see them. Without it such a create is a 422 `org_visible_destination`.",
31
+ ),
32
+ Param(
33
+ name='backend',
34
+ location='body',
35
+ kind='string',
36
+ required=False,
37
+ description="The engine that backs this pipe. 'ingest' is the only one a request may name; omit it to take the same default.",
38
+ choices=(
39
+ 'dlt',
40
+ 'ingest',
41
+ ),
42
+ nullable=True,
43
+ ),
44
+ Param(
45
+ name='column_types',
46
+ location='body',
47
+ kind='json',
48
+ required=False,
49
+ description='Per-column destination type, overriding the recommended one. Omit for recommendations.',
50
+ nullable=True,
51
+ ),
52
+ Param(
53
+ name='columns',
54
+ location='body',
55
+ kind='list',
56
+ required=False,
57
+ description='Source columns to replicate. Omit to replicate every column. Columns left out never land in the destination: a SQL batch read selects only the chosen columns, CDC filters the rest out inside the connector, and SaaS sources drop them before they are queued. The key, merge key and account columns are always kept. Fixed at create.',
58
+ item_kind='string',
59
+ nullable=True,
60
+ ),
61
+ Param(
62
+ name='cron_expression',
63
+ location='body',
64
+ kind='string',
65
+ required=False,
66
+ description='Quartz cron expression (only used when schedule_type=cron). Default: every 5 minutes.',
67
+ ),
68
+ Param(
69
+ name='dest_table_name',
70
+ location='body',
71
+ kind='string',
72
+ required=True,
73
+ description='Destination table name in the sink',
74
+ ),
75
+ Param(
76
+ name='mask_fields',
77
+ location='body',
78
+ kind='json',
79
+ required=False,
80
+ description='Columns to encrypt or hash on the way into the destination. Each masked column is stored as String.',
81
+ ),
82
+ Param(
83
+ name='mask_secret',
84
+ location='body',
85
+ kind='string',
86
+ required=False,
87
+ description="Shared symmetric key for any 'reversible' (encrypt) columns. Required iff one is present, and must be exactly 16 printable ASCII characters with no spaces — it is used verbatim as a 16-byte AES-128 key, so any other length silently yields an UNENCRYPTED column.",
88
+ secret=True,
89
+ nullable=True,
90
+ ),
91
+ Param(
92
+ name='new_columns',
93
+ location='body',
94
+ kind='string',
95
+ required=False,
96
+ description="Whether new source columns are added automatically (`add`) or wait for a decision (`ask`). Omitted: the project's default.",
97
+ choices=(
98
+ 'add',
99
+ 'ask',
100
+ ),
101
+ nullable=True,
102
+ ),
103
+ Param(
104
+ name='nullable_overrides',
105
+ location='body',
106
+ kind='json',
107
+ required=False,
108
+ description="Per-column destination nullability, overriding the source's. A replication-key column is always written NOT NULL regardless of this.",
109
+ nullable=True,
110
+ ),
111
+ Param(
112
+ name='primary_key',
113
+ location='body',
114
+ kind='list',
115
+ required=False,
116
+ description="Columns to use as the replication key, IN KEY ORDER. Becomes the destination table's ORDER BY, which is what deduplication happens on. Overrides the source table's own primary key, and is what lets a table with no primary key be replicated at all. Omit to use the source's key. IMMUTABLE after create — the destination's sort order cannot be altered, so changing it means deleting the pipe AND dropping the destination table.",
117
+ item_kind='string',
118
+ nullable=True,
119
+ ),
120
+ Param(
121
+ name='project_id',
122
+ location='body',
123
+ kind='string',
124
+ required=True,
125
+ description='The workspace project the pipe belongs to; the caller needs edit there',
126
+ ),
127
+ Param(
128
+ name='reader_id',
129
+ location='body',
130
+ kind='string',
131
+ required=False,
132
+ description="The reader to join: the new pipe reads its table through that reader's engine and replication slot instead of its own. Omit it to give the pipe a reader of its own.",
133
+ nullable=True,
134
+ ),
135
+ Param(
136
+ name='schedule_type',
137
+ location='body',
138
+ kind='string',
139
+ required=False,
140
+ description='Schedule type (manual, cron, basic). Defaults to cron.',
141
+ ),
142
+ Param(
143
+ name='schema_name',
144
+ location='body',
145
+ kind='string',
146
+ required=False,
147
+ description="Source schema / stream namespace (e.g. '' for Shopify, 'public' for Postgres)",
148
+ ),
149
+ Param(
150
+ name='sink_db_uuid',
151
+ location='body',
152
+ kind='string',
153
+ required=False,
154
+ description="UUID of the destination warehouse (defaults to the organization's default warehouse)",
155
+ nullable=True,
156
+ ),
157
+ Param(
158
+ name='source_id',
159
+ location='body',
160
+ kind='string',
161
+ required=True,
162
+ description='UUID of the connected source',
163
+ ),
164
+ Param(
165
+ name='sync_mode',
166
+ location='body',
167
+ kind='string',
168
+ required=False,
169
+ description='Requested sync mode; the pipe stores the mode its engine resolved.',
170
+ choices=(
171
+ 'incremental_deduped_history',
172
+ 'incremental_append',
173
+ 'full_refresh_overwrite',
174
+ 'full_refresh_append',
175
+ ),
176
+ ),
177
+ Param(
178
+ name='table_name',
179
+ location='body',
180
+ kind='string',
181
+ required=True,
182
+ description='Source table / stream to replicate',
183
+ ),
184
+ ),
185
+ ),
186
+ response=Response(
187
+ kind='json',
188
+ model='pipe:PipeV2CreateResponse',
189
+ shape='object',
190
+ ),
191
+ examples=(
192
+ 'databay pipe create --source-id <source_id> --schema-name public --table-name orders --dest-table-name orders',
193
+ ),
194
+ wait=Wait(
195
+ status_operation='pipe_status',
196
+ bind=(
197
+ (
198
+ 'pipe_uuid',
199
+ '/uuid',
200
+ ),
201
+ ),
202
+ field='/pipe_status',
203
+ pending=(
204
+ 'pending',
205
+ 'creating',
206
+ ),
207
+ success=(
208
+ 'active',
209
+ ),
210
+ failure=(
211
+ 'failed',
212
+ 'inactive',
213
+ 'paused_quota',
214
+ 'deprecated',
215
+ 'deleting',
216
+ 'deleted',
217
+ ),
218
+ error_field='/last_error',
219
+ ),
220
+ )
221
+
222
+ PIPE_DELETE = Operation(
223
+ operation_id='pipe_delete',
224
+ noun='pipe',
225
+ verb='delete',
226
+ method='delete',
227
+ path='/api/cdc/pipe/{pipe_uuid}',
228
+ summary='Delete Pipe',
229
+ description="Delete a pipe asynchronously.\n\nMarks the pipe DELETING and returns 202; its connections, row and dependent\nresources are cleaned up in the background, and its warehouse table too with\n``drop_destination``. A deleted pipe whose cleanup never finished is sent to cleanup\nagain (202), with the first delete's choice. 404 if the pipe does not exist or is\nalready cleaned up, 409 if it is being deleted.",
230
+ project=None,
231
+ destructive=True,
232
+ idempotent=False,
233
+ since='1.0',
234
+ params=(
235
+ Param(
236
+ name='pipe_uuid',
237
+ location='path',
238
+ kind='string',
239
+ required=True,
240
+ description='pipe uuid',
241
+ ),
242
+ Param(
243
+ name='drop_destination',
244
+ location='query',
245
+ kind='boolean',
246
+ required=False,
247
+ description="Also drop the pipe's warehouse table (and a SaaS pipe's sync state). Off by default: the table stays with the data already landed. A table another pipe writes to, or one databay did not create for this pipe, is kept and reported.",
248
+ ),
249
+ ),
250
+ body=None,
251
+ response=Response(
252
+ kind='json',
253
+ model='pipe:PipeDeleteAccepted',
254
+ shape='object',
255
+ ),
256
+ examples=(
257
+ 'databay pipe delete <pipe_uuid> --yes',
258
+ 'databay pipe delete <pipe_uuid> --yes --drop-destination',
259
+ ),
260
+ )
261
+
262
+ PIPE_GET = Operation(
263
+ operation_id='pipe_get',
264
+ noun='pipe',
265
+ verb='get',
266
+ method='get',
267
+ path='/api/cdc/pipe/{pipe_uuid}',
268
+ summary='Get Pipe',
269
+ description='',
270
+ project=None,
271
+ destructive=False,
272
+ idempotent=False,
273
+ since='1.0',
274
+ params=(
275
+ Param(
276
+ name='pipe_uuid',
277
+ location='path',
278
+ kind='string',
279
+ required=True,
280
+ description='pipe uuid',
281
+ ),
282
+ ),
283
+ body=None,
284
+ response=Response(
285
+ kind='json',
286
+ model='pipe:PipeV2DetailResponse',
287
+ shape='object',
288
+ ),
289
+ examples=(
290
+ 'databay pipe get <pipe_uuid>',
291
+ ),
292
+ )
293
+
294
+ PIPE_LIST = Operation(
295
+ operation_id='pipe_list',
296
+ noun='pipe',
297
+ verb='list',
298
+ method='get',
299
+ path='/api/cdc/pipe',
300
+ summary='List Pipes',
301
+ description="Return the organization's pipes: a bare list by default, a page when you ask for one.\n\nWith no paging or filter params the response is a bare ``list`` of every pipe; with any\nof them it is a ``PipeV2Page`` envelope.",
302
+ project='query:project_id',
303
+ destructive=False,
304
+ idempotent=False,
305
+ since='1.0',
306
+ params=(
307
+ Param(
308
+ name='project_id',
309
+ location='query',
310
+ kind='string',
311
+ required=False,
312
+ description='Only accessible pipelines in this project.',
313
+ nullable=True,
314
+ ),
315
+ Param(
316
+ name='q',
317
+ location='query',
318
+ kind='string',
319
+ required=False,
320
+ description='Case-insensitive substring over schema, table and destination table names.',
321
+ nullable=True,
322
+ ),
323
+ Param(
324
+ name='status',
325
+ location='query',
326
+ kind='list',
327
+ required=False,
328
+ description='Coarse status buckets; repeat the param to select several. See /pipe/status-buckets.',
329
+ choices=(
330
+ 'running',
331
+ 'paused',
332
+ 'error',
333
+ 'provisioning',
334
+ 'unknown',
335
+ ),
336
+ item_kind='string',
337
+ nullable=True,
338
+ ),
339
+ Param(
340
+ name='source_id',
341
+ location='query',
342
+ kind='string',
343
+ required=False,
344
+ description='Only pipes reading from this ConnectedSource.',
345
+ nullable=True,
346
+ ),
347
+ Param(
348
+ name='sink_db_uuid',
349
+ location='query',
350
+ kind='string',
351
+ required=False,
352
+ description='Only pipes writing into this sink.',
353
+ nullable=True,
354
+ ),
355
+ Param(
356
+ name='not_landing',
357
+ location='query',
358
+ kind='boolean',
359
+ required=False,
360
+ description='Only pipes that provisioned fine and are landing NOTHING — lifecycle ACTIVE with replication in the failing state. Orthogonal to `status`, not another bucket: these pipes ARE `running`, which is exactly why a lifecycle badge reports them as healthy. Combine with `status=running` to narrow, or use alone.',
361
+ nullable=True,
362
+ ),
363
+ Param(
364
+ name='broken',
365
+ location='query',
366
+ kind='boolean',
367
+ required=False,
368
+ description='Only pipes that are NOT WORKING, by either route: lifecycle FAILED, or provisioned-fine-and-landing-nothing. The union `not_landing` and `status=error` would have to be OR-ed to produce, which no other filter on this endpoint does. This is what a list UI should offer as one control — the difference between the two halves is a REMEDIATION difference (Retry vs Restart) and belongs on the row, not in a fleet header.',
369
+ nullable=True,
370
+ ),
371
+ Param(
372
+ name='uuid',
373
+ location='query',
374
+ kind='list',
375
+ required=False,
376
+ description="Only these pipes; repeat the param to name several (at most 200, the same ceiling as `page_size`, so one full chunk fits one request; more is a 422). Org-scoped like every other filter: another tenant's uuid matches nothing.",
377
+ item_kind='string',
378
+ nullable=True,
379
+ ),
380
+ Param(
381
+ name='attach_state',
382
+ location='query',
383
+ kind='list',
384
+ required=False,
385
+ description='Only pipes on a reader whose subscription is in one of these states; repeat the param to name several. A pipe that runs its own engine has none and never matches.',
386
+ choices=(
387
+ 'attaching',
388
+ 'snapshotting',
389
+ 'live',
390
+ 'detached',
391
+ 'needs_resync',
392
+ ),
393
+ item_kind='string',
394
+ nullable=True,
395
+ ),
396
+ Param(
397
+ name='sort',
398
+ location='query',
399
+ kind='string',
400
+ required=False,
401
+ description="Column to order by. 'lag' orders by last_change_at, which is a proxy.",
402
+ choices=(
403
+ 'created_at',
404
+ 'status',
405
+ 'table',
406
+ 'dest_table_name',
407
+ 'lag',
408
+ 'severity',
409
+ ),
410
+ ),
411
+ Param(
412
+ name='order',
413
+ location='query',
414
+ kind='string',
415
+ required=False,
416
+ description='Sort direction.',
417
+ choices=(
418
+ 'asc',
419
+ 'desc',
420
+ ),
421
+ ),
422
+ Param(
423
+ name='page',
424
+ location='query',
425
+ kind='integer',
426
+ required=False,
427
+ description='1-based page index.',
428
+ ),
429
+ Param(
430
+ name='page_size',
431
+ location='query',
432
+ kind='integer',
433
+ required=False,
434
+ description='Rows per page. OMIT to receive every pipe as a bare list.',
435
+ nullable=True,
436
+ ),
437
+ ),
438
+ body=None,
439
+ response=Response(
440
+ kind='json',
441
+ model='pipe:PipeListResponse',
442
+ ),
443
+ examples=(
444
+ 'databay pipe list',
445
+ 'databay pipe list --status error',
446
+ ),
447
+ )
448
+
449
+ PIPE_MOVE = Operation(
450
+ operation_id='pipe_move',
451
+ noun='pipe',
452
+ verb='move',
453
+ method='post',
454
+ path='/api/cdc/pipe/{pipe_uuid}/move',
455
+ summary='Move Pipe',
456
+ description='Move a pipe to ``target_project_id``; admin on both projects. Its drafts leave the source canvas.',
457
+ project=None,
458
+ destructive=True,
459
+ idempotent=False,
460
+ since='1.0',
461
+ params=(
462
+ Param(
463
+ name='pipe_uuid',
464
+ location='path',
465
+ kind='string',
466
+ required=True,
467
+ description='pipe uuid',
468
+ ),
469
+ Param(
470
+ name='X-Realtime-Conn-Id',
471
+ location='header',
472
+ kind='string',
473
+ required=False,
474
+ description='X-Realtime-Conn-Id',
475
+ nullable=True,
476
+ ),
477
+ ),
478
+ body=Body(
479
+ schema='MovePipeline',
480
+ fields=(
481
+ Param(
482
+ name='target_project_id',
483
+ location='body',
484
+ kind='string',
485
+ required=True,
486
+ description='Target Project Id',
487
+ ),
488
+ ),
489
+ ),
490
+ response=Response(
491
+ kind='json',
492
+ model='pipe:PipelineMoved',
493
+ shape='object',
494
+ ),
495
+ examples=(
496
+ 'databay pipe move <pipe_uuid> --target-project-id <project_id> --yes',
497
+ ),
498
+ )
499
+
500
+ PIPE_PAUSE = Operation(
501
+ operation_id='pipe_pause',
502
+ noun='pipe',
503
+ verb='pause',
504
+ method='put',
505
+ path='/api/cdc/pipe/{pipe_uuid}/pause',
506
+ summary='Pause Pipe',
507
+ description='',
508
+ project=None,
509
+ destructive=True,
510
+ idempotent=False,
511
+ since='1.0',
512
+ params=(
513
+ Param(
514
+ name='pipe_uuid',
515
+ location='path',
516
+ kind='string',
517
+ required=True,
518
+ description='pipe uuid',
519
+ ),
520
+ ),
521
+ body=None,
522
+ response=Response(
523
+ kind='json',
524
+ model='pipe:PipePauseResponse',
525
+ shape='object',
526
+ ),
527
+ examples=(
528
+ 'databay pipe pause <pipe_uuid> --yes',
529
+ ),
530
+ )
531
+
532
+ PIPE_REBUILD = Operation(
533
+ operation_id='pipe_rebuild',
534
+ noun='pipe',
535
+ verb='rebuild',
536
+ method='post',
537
+ path='/api/cdc/pipe/{pipe_uuid}/rebuild',
538
+ summary='Rebuild Pipe',
539
+ description="Rebuild an ingest pipe's table from ``source``; one rebuild runs per pipe at a time.\n\n202 with the rebuild id. Repeating a request with the same ``Idempotency-Key`` returns the\nsame rebuild. A ``retype`` rebuild ends a held ``retype`` rebuild and drops its backup table.\n409 ``rebuild_in_progress`` while another is open, 409 ``quota_reached`` for a\n``snapshot`` of a pipe a quota pause covers; 422 for a source the pipe cannot serve (a batch\npipe has no snapshot).",
540
+ project=None,
541
+ destructive=True,
542
+ idempotent=True,
543
+ since='1.0',
544
+ params=(
545
+ Param(
546
+ name='pipe_uuid',
547
+ location='path',
548
+ kind='string',
549
+ required=True,
550
+ description='pipe uuid',
551
+ ),
552
+ ),
553
+ body=Body(
554
+ schema='PipeRebuildRequest',
555
+ fields=(
556
+ Param(
557
+ name='reason',
558
+ location='body',
559
+ kind='string',
560
+ required=False,
561
+ description='Recorded with the rebuild.',
562
+ nullable=True,
563
+ ),
564
+ Param(
565
+ name='source',
566
+ location='body',
567
+ kind='string',
568
+ required=True,
569
+ description="Where the rebuilt table's rows come from: a copy of the current table, a full re-read of the source, (streaming pipes) a new snapshot that replaces the table's rows and deletes the keys the source no longer has, or a copy that gives the columns a pipe halted on their new types (a CDC pipe halted with cdc_schema_retype_unsupported).",
570
+ choices=(
571
+ 'warehouse-copy',
572
+ 're-extract',
573
+ 'snapshot',
574
+ 'retype',
575
+ ),
576
+ ),
577
+ ),
578
+ ),
579
+ response=Response(
580
+ kind='json',
581
+ model='pipe:PipeRebuildAccepted',
582
+ shape='object',
583
+ ),
584
+ examples=(
585
+ "databay pipe rebuild <pipe_uuid> --source re-extract --reason 'schema drift' --yes",
586
+ ),
587
+ )
588
+
589
+ PIPE_RESTART = Operation(
590
+ operation_id='pipe_restart',
591
+ noun='pipe',
592
+ verb='restart',
593
+ method='put',
594
+ path='/api/cdc/pipe/{pipe_uuid}/restart',
595
+ summary='Restart Pipe',
596
+ description="Bring a pipe's replication back up after it died, without recreating the pipe.\n\nA replication task that fails during startup is never retried by the engine, and\npause/resume does not restart it. Use this after fixing the source; it keeps the\npipe's position, unlike deleting and recreating it. Restarts are manual so a\nmisconfigured source is not retried forever.\n\nThe recorded health and cause are not cleared; the next health check, within a minute,\nre-derives them. 202: tasks come back asynchronously. Poll ``GET /pipe/{uuid}/status``\nand read ``health``.",
597
+ project=None,
598
+ destructive=True,
599
+ idempotent=False,
600
+ since='1.0',
601
+ params=(
602
+ Param(
603
+ name='pipe_uuid',
604
+ location='path',
605
+ kind='string',
606
+ required=True,
607
+ description='pipe uuid',
608
+ ),
609
+ ),
610
+ body=None,
611
+ response=Response(
612
+ kind='json',
613
+ model='pipe:PipeRestartAccepted',
614
+ shape='object',
615
+ ),
616
+ examples=(
617
+ 'databay pipe restart <pipe_uuid> --yes',
618
+ ),
619
+ )
620
+
621
+ PIPE_RESUME = Operation(
622
+ operation_id='pipe_resume',
623
+ noun='pipe',
624
+ verb='resume',
625
+ method='put',
626
+ path='/api/cdc/pipe/{pipe_uuid}/resume',
627
+ summary='Resume Pipe',
628
+ description="Resume a paused pipe.\n\n409 ``resync_required`` when changes the pipe had not landed are gone; the body's ``next``\nnames the resync call.",
629
+ project=None,
630
+ destructive=False,
631
+ idempotent=False,
632
+ since='1.0',
633
+ params=(
634
+ Param(
635
+ name='pipe_uuid',
636
+ location='path',
637
+ kind='string',
638
+ required=True,
639
+ description='pipe uuid',
640
+ ),
641
+ ),
642
+ body=None,
643
+ response=Response(
644
+ kind='json',
645
+ model='pipe:PipeResumeResponse',
646
+ shape='object',
647
+ ),
648
+ examples=(
649
+ 'databay pipe resume <pipe_uuid>',
650
+ ),
651
+ )
652
+
653
+ PIPE_RETRY = Operation(
654
+ operation_id='pipe_retry',
655
+ noun='pipe',
656
+ verb='retry',
657
+ method='put',
658
+ path='/api/cdc/pipe/{pipe_uuid}/retry',
659
+ summary='Retry Pipe',
660
+ description='Re-run provisioning for a FAILED pipe, keeping its identity and its row.\n\nUnlike ``/restart``, which restarts replication on a pipe that provisioned and later\nbroke, this re-runs provisioning from the start. The pipe goes back to pending and\nis provisioned again in the background; a delete issued mid-retry still wins.\n``last_error`` stays until the retry actually starts.\n\n202: accepted, not done. Poll ``GET /pipe/{uuid}/status``.',
661
+ project=None,
662
+ destructive=True,
663
+ idempotent=False,
664
+ since='1.0',
665
+ params=(
666
+ Param(
667
+ name='pipe_uuid',
668
+ location='path',
669
+ kind='string',
670
+ required=True,
671
+ description='pipe uuid',
672
+ ),
673
+ ),
674
+ body=None,
675
+ response=Response(
676
+ kind='json',
677
+ model='pipe:PipeRetryAccepted',
678
+ shape='object',
679
+ ),
680
+ examples=(
681
+ 'databay pipe retry <pipe_uuid> --yes',
682
+ ),
683
+ wait=Wait(
684
+ status_operation='pipe_status',
685
+ bind=(
686
+ (
687
+ 'pipe_uuid',
688
+ 'path:pipe_uuid',
689
+ ),
690
+ ),
691
+ field='/pipe_status',
692
+ pending=(
693
+ 'pending',
694
+ 'creating',
695
+ ),
696
+ success=(
697
+ 'active',
698
+ ),
699
+ failure=(
700
+ 'failed',
701
+ 'inactive',
702
+ 'paused_quota',
703
+ 'deprecated',
704
+ 'deleting',
705
+ 'deleted',
706
+ ),
707
+ error_field='/last_error',
708
+ ),
709
+ )
710
+
711
+ PIPE_ROLLUP = Operation(
712
+ operation_id='pipe_rollup',
713
+ noun='pipe',
714
+ verb='rollup',
715
+ method='get',
716
+ path='/api/cdc/pipe/rollup',
717
+ summary='Get Pipe Rollup',
718
+ description='Pipe counts, freshness and rows in warehouse per source or destination.\n\nOne group per key. Pipes in projects the caller cannot see are counted in\n``hidden_pipe_count`` and nowhere else. ``stored_rows`` is null when nothing was measured.',
719
+ project='query:project_id',
720
+ destructive=False,
721
+ idempotent=False,
722
+ since='1.0',
723
+ params=(
724
+ Param(
725
+ name='by',
726
+ location='query',
727
+ kind='string',
728
+ required=True,
729
+ description='Group by source (`source_id`) or destination (`sink_db_uuid`).',
730
+ choices=(
731
+ 'source',
732
+ 'sink',
733
+ ),
734
+ ),
735
+ Param(
736
+ name='keys',
737
+ location='query',
738
+ kind='list',
739
+ required=True,
740
+ description='The source or sink ids the page lists; repeat the param (1 to 200). Only these come back, so the response never names a resource the page did not already show.',
741
+ item_kind='string',
742
+ ),
743
+ Param(
744
+ name='project_id',
745
+ location='query',
746
+ kind='string',
747
+ required=False,
748
+ description='Only pipes in this project.',
749
+ nullable=True,
750
+ ),
751
+ ),
752
+ body=None,
753
+ response=Response(
754
+ kind='json',
755
+ model='pipe:PipeRollup',
756
+ shape='object',
757
+ ),
758
+ examples=(
759
+ 'databay pipe rollup --by source --keys <source_id>',
760
+ ),
761
+ )
762
+
763
+ PIPE_STATUS = Operation(
764
+ operation_id='pipe_status',
765
+ noun='pipe',
766
+ verb='status',
767
+ method='get',
768
+ path='/api/cdc/pipe/{pipe_uuid}/status',
769
+ summary='Get Pipe Status',
770
+ description="Return the shape the wizard polls: ``pipe_status``, ``last_error`` and the pipe's health.\n\n``pipe_status`` (pending/creating/active/...) and ``last_error`` are returned in every\nstate.",
771
+ project=None,
772
+ destructive=False,
773
+ idempotent=False,
774
+ since='1.0',
775
+ params=(
776
+ Param(
777
+ name='pipe_uuid',
778
+ location='path',
779
+ kind='string',
780
+ required=True,
781
+ description='pipe uuid',
782
+ ),
783
+ ),
784
+ body=None,
785
+ response=Response(
786
+ kind='json',
787
+ model='pipe:PipeV2StatusResponse',
788
+ shape='object',
789
+ ),
790
+ examples=(
791
+ 'databay pipe status <pipe_uuid>',
792
+ ),
793
+ resumes=Wait(
794
+ status_operation='pipe_status',
795
+ bind=(
796
+ (
797
+ 'pipe_uuid',
798
+ 'path:pipe_uuid',
799
+ ),
800
+ ),
801
+ field='/pipe_status',
802
+ pending=(
803
+ 'pending',
804
+ 'creating',
805
+ ),
806
+ success=(
807
+ 'active',
808
+ ),
809
+ failure=(
810
+ 'failed',
811
+ 'inactive',
812
+ 'paused_quota',
813
+ 'deprecated',
814
+ 'deleting',
815
+ 'deleted',
816
+ ),
817
+ error_field='/last_error',
818
+ ),
819
+ )
820
+
821
+ PIPE_UPDATE = Operation(
822
+ operation_id='pipe_update',
823
+ noun='pipe',
824
+ verb='update',
825
+ method='patch',
826
+ path='/api/cdc/pipe/{pipe_uuid}',
827
+ summary='Update Pipe',
828
+ description='Change whether new source columns are added automatically or wait for a decision.\n\n422 ``new_columns_unsupported`` for ``ask`` on a pipe that syncs on a schedule, in a Shopify store, or\nwhere source schema changes are not tracked.',
829
+ project=None,
830
+ destructive=False,
831
+ idempotent=False,
832
+ since='1.0',
833
+ params=(
834
+ Param(
835
+ name='pipe_uuid',
836
+ location='path',
837
+ kind='string',
838
+ required=True,
839
+ description='pipe uuid',
840
+ ),
841
+ ),
842
+ body=Body(
843
+ schema='PipeUpdate',
844
+ fields=(
845
+ Param(
846
+ name='new_columns',
847
+ location='body',
848
+ kind='string',
849
+ required=True,
850
+ description='Whether new source columns are added automatically (`add`) or wait for a decision (`ask`). Switching to `add` adds every column waiting for a decision; a skipped column stays out.',
851
+ choices=(
852
+ 'add',
853
+ 'ask',
854
+ ),
855
+ ),
856
+ ),
857
+ ),
858
+ response=Response(
859
+ kind='json',
860
+ model='pipe:PipeNewColumnsResponse',
861
+ shape='object',
862
+ ),
863
+ examples=(
864
+ 'databay pipe update <pipe_uuid> --new-columns ask',
865
+ ),
866
+ )
867
+
868
+ OPERATIONS = (
869
+ PIPE_CREATE,
870
+ PIPE_DELETE,
871
+ PIPE_GET,
872
+ PIPE_LIST,
873
+ PIPE_MOVE,
874
+ PIPE_PAUSE,
875
+ PIPE_REBUILD,
876
+ PIPE_RESTART,
877
+ PIPE_RESUME,
878
+ PIPE_RETRY,
879
+ PIPE_ROLLUP,
880
+ PIPE_STATUS,
881
+ PIPE_UPDATE,
882
+ )