tinybird 0.0.1.dev89__tar.gz → 0.0.1.dev91__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of tinybird might be problematic. Click here for more details.

Files changed (106) hide show
  1. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/PKG-INFO +1 -1
  2. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/client.py +19 -0
  3. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/__cli__.py +2 -2
  4. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/cli.py +2 -0
  5. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/cli.py +1 -1
  6. tinybird-0.0.1.dev91/tinybird/tb/modules/connection.py +125 -0
  7. tinybird-0.0.1.dev91/tinybird/tb/modules/secret.py +85 -0
  8. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird.egg-info/PKG-INFO +1 -1
  9. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird.egg-info/SOURCES.txt +2 -0
  10. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/setup.cfg +0 -0
  11. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/__cli__.py +0 -0
  12. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/ch_utils/constants.py +0 -0
  13. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/ch_utils/engine.py +0 -0
  14. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/check_pypi.py +0 -0
  15. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/config.py +0 -0
  16. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/connectors.py +0 -0
  17. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/context.py +0 -0
  18. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/datafile.py +0 -0
  19. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/datatypes.py +0 -0
  20. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/feedback_manager.py +0 -0
  21. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/git_settings.py +0 -0
  22. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/prompts.py +0 -0
  23. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/sql.py +0 -0
  24. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/sql_template.py +0 -0
  25. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/sql_template_fmt.py +0 -0
  26. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/sql_toolset.py +0 -0
  27. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/syncasync.py +0 -0
  28. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/auth.py +0 -0
  29. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/build.py +0 -0
  30. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/cicd.py +0 -0
  31. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/common.py +0 -0
  32. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/config.py +0 -0
  33. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/copy.py +0 -0
  34. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/create.py +0 -0
  35. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/build.py +0 -0
  36. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/build_common.py +0 -0
  37. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/build_datasource.py +0 -0
  38. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/build_pipe.py +0 -0
  39. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/common.py +0 -0
  40. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/diff.py +0 -0
  41. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/exceptions.py +0 -0
  42. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/fixture.py +0 -0
  43. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/format_common.py +0 -0
  44. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/format_datasource.py +0 -0
  45. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/format_pipe.py +0 -0
  46. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/parse_datasource.py +0 -0
  47. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/parse_pipe.py +0 -0
  48. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/pipe_checker.py +0 -0
  49. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/playground.py +0 -0
  50. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datafile/pull.py +0 -0
  51. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/datasource.py +0 -0
  52. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/deployment.py +0 -0
  53. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/endpoint.py +0 -0
  54. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/exceptions.py +0 -0
  55. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/feedback_manager.py +0 -0
  56. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/fmt.py +0 -0
  57. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/job.py +0 -0
  58. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/llm.py +0 -0
  59. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/llm_utils.py +0 -0
  60. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/local.py +0 -0
  61. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/local_common.py +0 -0
  62. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/login.py +0 -0
  63. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/logout.py +0 -0
  64. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/materialization.py +0 -0
  65. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/mock.py +0 -0
  66. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/pipe.py +0 -0
  67. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/playground.py +0 -0
  68. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/project.py +0 -0
  69. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/regions.py +0 -0
  70. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/shell.py +0 -0
  71. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/table.py +0 -0
  72. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/tag.py +0 -0
  73. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/telemetry.py +0 -0
  74. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/test.py +0 -0
  75. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/tinyunit/tinyunit.py +0 -0
  76. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/tinyunit/tinyunit_lib.py +0 -0
  77. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/token.py +0 -0
  78. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/watch.py +0 -0
  79. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/workspace.py +0 -0
  80. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb/modules/workspace_members.py +0 -0
  81. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli.py +0 -0
  82. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/auth.py +0 -0
  83. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/branch.py +0 -0
  84. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/cicd.py +0 -0
  85. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/cli.py +0 -0
  86. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/common.py +0 -0
  87. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/config.py +0 -0
  88. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/connection.py +0 -0
  89. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/datasource.py +0 -0
  90. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/exceptions.py +0 -0
  91. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/fmt.py +0 -0
  92. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/job.py +0 -0
  93. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/pipe.py +0 -0
  94. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/regions.py +0 -0
  95. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/tag.py +0 -0
  96. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/telemetry.py +0 -0
  97. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/test.py +0 -0
  98. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  99. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  100. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/workspace.py +0 -0
  101. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  102. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird/tornado_template.py +0 -0
  103. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird.egg-info/dependency_links.txt +0 -0
  104. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird.egg-info/entry_points.txt +0 -0
  105. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird.egg-info/requires.txt +0 -0
  106. {tinybird-0.0.1.dev89 → tinybird-0.0.1.dev91}/tinybird.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev89
3
+ Version: 0.0.1.dev91
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -288,6 +288,25 @@ class TinyB:
288
288
  ds = [x for x in ds if x["name"].startswith(branch)]
289
289
  return ds
290
290
 
291
+ async def secrets(self) -> List[Dict[str, Any]]:
292
+ response = await self._req("/v0/variables")
293
+ return response["variables"]
294
+
295
+ async def get_secret(self, name: str) -> Optional[Dict[str, Any]]:
296
+ return await self._req(f"/v0/variables/{name}")
297
+
298
+ async def create_secret(self, name: str, value: str):
299
+ response = await self._req("/v0/variables", method="POST", data={"name": name, "value": value})
300
+ return response
301
+
302
+ async def update_secret(self, name: str, value: str):
303
+ response = await self._req(f"/v0/variables/{name}", method="PUT", data={"value": value})
304
+ return response
305
+
306
+ async def delete_secret(self, name: str):
307
+ response = await self._req(f"/v0/variables/{name}", method="DELETE")
308
+ return response
309
+
291
310
  async def get_connections(self, service: Optional[str] = None):
292
311
  params = {}
293
312
 
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/cli/introduction.html'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '0.0.1.dev89'
8
- __revision__ = '6153af6'
7
+ __version__ = '0.0.1.dev91'
8
+ __revision__ = 'b965ddf'
@@ -8,6 +8,7 @@ import tinybird.tb.modules.auth
8
8
  import tinybird.tb.modules.build
9
9
  import tinybird.tb.modules.cli
10
10
  import tinybird.tb.modules.common
11
+ import tinybird.tb.modules.connection
11
12
  import tinybird.tb.modules.copy
12
13
  import tinybird.tb.modules.create
13
14
  import tinybird.tb.modules.datasource
@@ -22,6 +23,7 @@ import tinybird.tb.modules.materialization
22
23
  import tinybird.tb.modules.mock
23
24
  import tinybird.tb.modules.pipe
24
25
  import tinybird.tb.modules.playground
26
+ import tinybird.tb.modules.secret
25
27
  import tinybird.tb.modules.tag
26
28
  import tinybird.tb.modules.test
27
29
  import tinybird.tb.modules.token
@@ -412,7 +412,7 @@ async def create_ctx_client(ctx: Context, config: Dict[str, Any], cloud: bool, b
412
412
  return _get_tb_client(config.get("token", None), config["host"], staging=staging)
413
413
  build = command in commands_always_build or build
414
414
  if not build and command not in commands_always_local and command not in commands_always_build:
415
- click.echo(FeedbackManager.gray(message="Running against Tinybird Local\n"))
415
+ click.echo(FeedbackManager.gray(message="Running against Tinybird Local"))
416
416
  return await get_tinybird_local_client(config, build=build, staging=staging)
417
417
 
418
418
 
@@ -0,0 +1,125 @@
1
+ # This is a command file for our CLI. Please keep it clean.
2
+ #
3
+ # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
+ # - But please, **do not** interleave utility functions and command definitions.
5
+
6
+ from typing import Any, Dict, List, Optional
7
+
8
+ import click
9
+ from click import Context
10
+
11
+ from tinybird.client import TinyB
12
+ from tinybird.tb.modules.cli import cli
13
+ from tinybird.tb.modules.common import (
14
+ DataConnectorType,
15
+ _get_setting_value,
16
+ coro,
17
+ echo_safe_humanfriendly_tables_format_smart_table,
18
+ )
19
+ from tinybird.tb.modules.feedback_manager import FeedbackManager
20
+
21
+ DATA_CONNECTOR_SETTINGS: Dict[DataConnectorType, List[str]] = {
22
+ DataConnectorType.KAFKA: [
23
+ "kafka_bootstrap_servers",
24
+ "kafka_sasl_plain_username",
25
+ "kafka_sasl_plain_password",
26
+ "cli_version",
27
+ "endpoint",
28
+ "kafka_security_protocol",
29
+ "kafka_sasl_mechanism",
30
+ "kafka_schema_registry_url",
31
+ "kafka_ssl_ca_pem",
32
+ ],
33
+ DataConnectorType.GCLOUD_SCHEDULER: ["gcscheduler_region"],
34
+ DataConnectorType.SNOWFLAKE: [
35
+ "account",
36
+ "username",
37
+ "password",
38
+ "role",
39
+ "warehouse",
40
+ "warehouse_size",
41
+ "stage",
42
+ "integration",
43
+ ],
44
+ DataConnectorType.BIGQUERY: ["account"],
45
+ DataConnectorType.GCLOUD_STORAGE: [
46
+ "gcs_private_key_id",
47
+ "gcs_client_x509_cert_url",
48
+ "gcs_project_id",
49
+ "gcs_client_id",
50
+ "gcs_client_email",
51
+ "gcs_private_key",
52
+ ],
53
+ DataConnectorType.GCLOUD_STORAGE_HMAC: [
54
+ "gcs_hmac_access_id",
55
+ "gcs_hmac_secret",
56
+ ],
57
+ DataConnectorType.GCLOUD_STORAGE_SA: ["account_email"],
58
+ DataConnectorType.AMAZON_S3: [
59
+ "s3_access_key_id",
60
+ "s3_secret_access_key",
61
+ "s3_region",
62
+ ],
63
+ DataConnectorType.AMAZON_S3_IAMROLE: [
64
+ "s3_iamrole_arn",
65
+ "s3_iamrole_region",
66
+ "s3_iamrole_external_id",
67
+ ],
68
+ DataConnectorType.AMAZON_DYNAMODB: [
69
+ "dynamodb_iamrole_arn",
70
+ "dynamodb_iamrole_region",
71
+ "dynamodb_iamrole_external_id",
72
+ ],
73
+ }
74
+
75
+ SENSITIVE_CONNECTOR_SETTINGS = {
76
+ DataConnectorType.KAFKA: ["kafka_sasl_plain_password"],
77
+ DataConnectorType.GCLOUD_SCHEDULER: [
78
+ "gcscheduler_target_url",
79
+ "gcscheduler_job_name",
80
+ "gcscheduler_region",
81
+ ],
82
+ DataConnectorType.GCLOUD_STORAGE_HMAC: ["gcs_hmac_secret"],
83
+ DataConnectorType.AMAZON_S3: ["s3_secret_access_key"],
84
+ DataConnectorType.AMAZON_S3_IAMROLE: ["s3_iamrole_arn"],
85
+ DataConnectorType.AMAZON_DYNAMODB: ["dynamodb_iamrole_arn"],
86
+ }
87
+
88
+
89
+ @cli.group()
90
+ @click.pass_context
91
+ def connection(ctx: Context) -> None:
92
+ """Connection commands."""
93
+
94
+
95
+ @connection.command(name="ls")
96
+ @click.option("--service", help="Filter by service")
97
+ @click.pass_context
98
+ @coro
99
+ async def connection_ls(ctx: Context, service: Optional[DataConnectorType] = None) -> None:
100
+ """List connections."""
101
+ obj: Dict[str, Any] = ctx.ensure_object(dict)
102
+ client: TinyB = obj["client"]
103
+
104
+ connections = await client.connections(connector=service, skip_bigquery=True)
105
+ columns = []
106
+ table = []
107
+
108
+ click.echo(FeedbackManager.info_connections())
109
+
110
+ if not service:
111
+ sensitive_settings = []
112
+ columns = ["service", "name", "id", "connected_datasources"]
113
+ else:
114
+ sensitive_settings = SENSITIVE_CONNECTOR_SETTINGS.get(service, [])
115
+ columns = ["service", "name", "id", "connected_datasources"]
116
+ if connector_settings := DATA_CONNECTOR_SETTINGS.get(service):
117
+ columns += connector_settings
118
+
119
+ for connection in connections:
120
+ row = [_get_setting_value(connection, setting, sensitive_settings) for setting in columns]
121
+ table.append(row)
122
+
123
+ column_names = [c.replace("kafka_", "") for c in columns]
124
+ echo_safe_humanfriendly_tables_format_smart_table(table, column_names=column_names)
125
+ click.echo("\n")
@@ -0,0 +1,85 @@
1
+ import re
2
+ from typing import Optional
3
+
4
+ import click
5
+
6
+ from tinybird.client import TinyB
7
+ from tinybird.tb.modules.cli import cli
8
+ from tinybird.tb.modules.common import coro, echo_safe_humanfriendly_tables_format_smart_table
9
+ from tinybird.tb.modules.feedback_manager import FeedbackManager
10
+
11
+
12
+ @cli.group()
13
+ @click.pass_context
14
+ def secret(ctx):
15
+ """Secret commands."""
16
+
17
+
18
+ @secret.command(name="ls")
19
+ @click.option("--match", default=None, help="Retrieve any secrets matching the pattern. For example, --match _test")
20
+ @click.pass_context
21
+ @coro
22
+ async def secret_ls(ctx: click.Context, match: Optional[str]):
23
+ """List secrets"""
24
+
25
+ client: TinyB = ctx.ensure_object(dict)["client"]
26
+ secrets = await client.secrets()
27
+ columns = ["name", "created_at", "updated_at"]
28
+ table_human_readable = []
29
+ table_machine_readable = []
30
+ pattern = re.compile(match) if match else None
31
+
32
+ for secret in secrets:
33
+ name = secret["name"]
34
+
35
+ if pattern and not pattern.search(name):
36
+ continue
37
+
38
+ created_at = secret["created_at"]
39
+ updated_at = secret["updated_at"]
40
+
41
+ table_human_readable.append((name, created_at, updated_at))
42
+ table_machine_readable.append({"name": name, "created at": created_at, "updated at": updated_at})
43
+
44
+ click.echo(FeedbackManager.info(message="** Secrets:"))
45
+ echo_safe_humanfriendly_tables_format_smart_table(table_human_readable, column_names=columns)
46
+ click.echo("\n")
47
+
48
+
49
+ @secret.command(name="set")
50
+ @click.argument("name")
51
+ @click.argument("value")
52
+ @click.pass_context
53
+ @coro
54
+ async def secret_set(ctx: click.Context, name: str, value: str):
55
+ """Create or update secrets"""
56
+ try:
57
+ click.echo(FeedbackManager.highlight(message=f"\n» Setting secret '{name}'..."))
58
+ client: TinyB = ctx.ensure_object(dict)["client"]
59
+ existing_secret = None
60
+ try:
61
+ existing_secret = await client.get_secret(name)
62
+ except Exception:
63
+ pass
64
+ if existing_secret:
65
+ await client.update_secret(name, value)
66
+ else:
67
+ await client.create_secret(name, value)
68
+ click.echo(FeedbackManager.success(message=f"\n✓ Secret '{name}' set"))
69
+ except Exception as e:
70
+ click.echo(FeedbackManager.error(message=f"✗ Error: {e}"))
71
+
72
+
73
+ @secret.command(name="rm")
74
+ @click.argument("name")
75
+ @click.pass_context
76
+ @coro
77
+ async def secret_rm(ctx: click.Context, name: str):
78
+ """Delete a secret"""
79
+ try:
80
+ click.echo(FeedbackManager.highlight(message=f"\n» Deleting secret '{name}'..."))
81
+ client: TinyB = ctx.ensure_object(dict)["client"]
82
+ await client.delete_secret(name)
83
+ click.echo(FeedbackManager.success(message=f"\n✓ Secret '{name}' deleted"))
84
+ except Exception as e:
85
+ click.echo(FeedbackManager.error(message=f"✗ Error: {e}"))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev89
3
+ Version: 0.0.1.dev91
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/cli/introduction.html
6
6
  Author: Tinybird
@@ -32,6 +32,7 @@ tinybird/tb/modules/cicd.py
32
32
  tinybird/tb/modules/cli.py
33
33
  tinybird/tb/modules/common.py
34
34
  tinybird/tb/modules/config.py
35
+ tinybird/tb/modules/connection.py
35
36
  tinybird/tb/modules/copy.py
36
37
  tinybird/tb/modules/create.py
37
38
  tinybird/tb/modules/datasource.py
@@ -53,6 +54,7 @@ tinybird/tb/modules/pipe.py
53
54
  tinybird/tb/modules/playground.py
54
55
  tinybird/tb/modules/project.py
55
56
  tinybird/tb/modules/regions.py
57
+ tinybird/tb/modules/secret.py
56
58
  tinybird/tb/modules/shell.py
57
59
  tinybird/tb/modules/table.py
58
60
  tinybird/tb/modules/tag.py
File without changes