tinybird-cli 2.1.0.dev15__tar.gz → 2.1.1.dev2__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.
Files changed (47) hide show
  1. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/PKG-INFO +26 -1
  2. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/__cli__.py +2 -2
  3. tinybird-cli-2.1.1.dev2/tinybird/connector_settings.py +88 -0
  4. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/datafile.py +19 -5
  5. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/connection.py +7 -5
  6. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/PKG-INFO +26 -1
  7. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/requires.txt +0 -1
  8. tinybird-cli-2.1.0.dev15/tinybird/connector_settings.py +0 -134
  9. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/setup.cfg +0 -0
  10. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/ch_utils/constants.py +0 -0
  11. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/ch_utils/engine.py +0 -0
  12. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/check_pypi.py +0 -0
  13. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/client.py +0 -0
  14. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/config.py +0 -0
  15. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/connectors.py +0 -0
  16. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/context.py +0 -0
  17. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/datatypes.py +0 -0
  18. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/feedback_manager.py +0 -0
  19. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/sql.py +0 -0
  20. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/sql_template.py +0 -0
  21. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/sql_template_fmt.py +0 -0
  22. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/sql_toolset.py +0 -0
  23. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/syncasync.py +0 -0
  24. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli.py +0 -0
  25. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/auth.py +0 -0
  26. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/branch.py +0 -0
  27. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/cicd.py +0 -0
  28. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/cli.py +0 -0
  29. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/common.py +0 -0
  30. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/config.py +0 -0
  31. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/datasource.py +0 -0
  32. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/exceptions.py +0 -0
  33. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/job.py +0 -0
  34. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/pipe.py +0 -0
  35. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/regions.py +0 -0
  36. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/telemetry.py +0 -0
  37. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/test.py +0 -0
  38. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  39. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  40. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/token.py +0 -0
  41. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/workspace.py +0 -0
  42. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  43. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird/tornado_template.py +0 -0
  44. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  45. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  46. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/entry_points.txt +0 -0
  47. {tinybird-cli-2.1.0.dev15 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 2.1.0.dev15
3
+ Version: 2.1.1.dev2
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,6 +19,31 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 2.1.1.dev2
23
+ ************
24
+
25
+ - `Fixed` command `tb pipe regression-tests` to handle the edge case when all the requests to the endpoint that we want to check fails as the value returned is no what we expect.
26
+
27
+ 2.1.0
28
+ ************
29
+
30
+ - `Changed` `exec_test.sh` now runs with `parallel -j 4` to speed up CI cycles
31
+ - `Changed` `tb release rollback` now requires double confirmation
32
+ - `Fixed` Ignore .diff_tmp/ on `tb deploy`
33
+ - `Changed` Regression tests select faster the requests used for the checks.
34
+ - `Improve` peformance when using the option `--only-change` in the `tb push` command. This was a regression introduced in the version 2.0.0
35
+ - `Added` Add option `c` or `--concurrency` to `tb run test` to run tests in parallel
36
+ - `Removed` hidden option `--only-changes` from `tb deploy` as it's no longer required.
37
+ - `Changed` Speed-up CLI startup by lazy-importing some dependencies.
38
+ - `Added` `tb auth` shows and uses the new AWS regions
39
+ - `Added` Add `--auto-promote` to `tb deploy` to automatically promote the Release created. It automatically applies to Environments created by CI.
40
+ - `Added` Support `TAGS "backfil_column=<column_name>"` in .datasource definition to do backfill operations when running a populate job
41
+ - `Changed` Regression tests now also use Pipe requests done with the POST HTTP method.
42
+ - `Changed` `tb env` commands to use the new `CLIConfig` class to manage the authentication and the configuration of the CLI. This change allows us to have a better control of the configuration and the authentication of the CLI. This should be transparent for the users.
43
+ - `Changed` Internal changes in `tb deploy`
44
+ - `Added` `tb deploy` removes resources from datafiles deleted
45
+
46
+
22
47
  2.1.0.dev15
23
48
  ************
24
49
 
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://docs.tinybird.co/cli.html'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '2.1.0.dev15'
8
- __revision__ = 'd517c9c'
7
+ __version__ = '2.1.1.dev2'
8
+ __revision__ = '0a4a8e6'
@@ -0,0 +1,88 @@
1
+ from enum import Enum
2
+ from typing import List
3
+
4
+
5
+ class DataConnectorType(str, Enum):
6
+ KAFKA = "kafka"
7
+ GCLOUD_SCHEDULER = "gcscheduler"
8
+ SNOWFLAKE = "snowflake"
9
+ BIGQUERY = "bigquery"
10
+ GCLOUD_STORAGE = "gcs"
11
+ GCLOUD_STORAGE_HMAC = "gcs_hmac"
12
+ AMAZON_S3 = "s3"
13
+
14
+ def __str__(self) -> str:
15
+ return self.value
16
+
17
+
18
+ class DataConnectorSettings:
19
+ kafka = [
20
+ "cli_version",
21
+ "tb_endpoint",
22
+ "kafka_bootstrap_servers",
23
+ "kafka_sasl_plain_username",
24
+ "kafka_sasl_plain_password",
25
+ "kafka_security_protocol",
26
+ "kafka_sasl_mechanism",
27
+ "kafka_schema_registry_url",
28
+ ]
29
+ gcscheduler = ["gcscheduler_region"]
30
+ bigquery = ["account"]
31
+ snowflake = ["account", "username", "password", "warehouse", "warehouse_size", "role", "stage", "integration"]
32
+ gcs_hmac = ["gcs_hmac_access_id", "gcs_hmac_secret"]
33
+ s3 = [
34
+ "s3_access_key_id",
35
+ "s3_secret_access_key",
36
+ "s3_region",
37
+ ]
38
+ gcs = [
39
+ "gcs_private_key_id",
40
+ "gcs_client_x509_cert_url",
41
+ "gcs_project_id",
42
+ "gcs_client_id",
43
+ "gcs_client_email",
44
+ "gcs_private_key",
45
+ ]
46
+
47
+
48
+ class DataLinkerSettings:
49
+ kafka = [
50
+ "tb_datasource",
51
+ "tb_token",
52
+ "kafka_topic",
53
+ "kafka_group_id",
54
+ "kafka_auto_offset_reset",
55
+ "kafka_store_raw_value",
56
+ "kafka_store_headers",
57
+ ]
58
+
59
+
60
+ class DataSinkSettings:
61
+ gcscheduler = ["cron", "timezone", "status", "gcscheduler_target_url", "gcscheduler_job_name", "gcscheduler_region"]
62
+ gcs_hmac = [
63
+ "bucket_path",
64
+ "file_template",
65
+ "partition_node",
66
+ "format",
67
+ "compression",
68
+ ]
69
+ s3 = [
70
+ "bucket_path",
71
+ "file_template",
72
+ "partition_node",
73
+ "format",
74
+ "compression",
75
+ ]
76
+
77
+
78
+ class DataSensitiveSettings:
79
+ kafka = ["kafka_sasl_plain_password"]
80
+ gcscheduler = [
81
+ "gcscheduler_target_url",
82
+ "gcscheduler_job_name",
83
+ "gcscheduler_region",
84
+ ]
85
+ bigquery: List[str] = []
86
+ snowflake: List[str] = []
87
+ gcs_hmac: List[str] = ["gcs_hmac_secret"]
88
+ s3: List[str] = ["s3_secret_access_key"]
@@ -1781,11 +1781,18 @@ class PipeChecker(unittest.TestCase):
1781
1781
  for x in current_data_e.keys():
1782
1782
  if isinstance(current_data_e[x], float):
1783
1783
  d = abs(current_data_e[x] - check_fixtures_data_e[x])
1784
- self.assertLessEqual(
1785
- d / current_data_e[x],
1786
- 0.01,
1787
- f"key {x}. old value: {current_data_e[x]}, new value {check_fixtures_data_e[x]}\n{self.diff(current_data_e, check_fixtures_data_e)}",
1788
- )
1784
+ try:
1785
+ self.assertLessEqual(
1786
+ d / current_data_e[x],
1787
+ 0.01,
1788
+ f"key {x}. old value: {current_data_e[x]}, new value: {check_fixtures_data_e[x]}\n{self.diff(current_data_e, check_fixtures_data_e)}",
1789
+ )
1790
+ except ZeroDivisionError:
1791
+ self.assertEqual(
1792
+ d,
1793
+ 0,
1794
+ f"key {x}. old value: {current_data_e[x]}, new value: {check_fixtures_data_e[x]}\n{self.diff(current_data_e, check_fixtures_data_e)}",
1795
+ )
1789
1796
  elif (
1790
1797
  not isinstance(current_data_e[x], (str, bytes))
1791
1798
  and isinstance(current_data_e[x], Iterable)
@@ -2027,6 +2034,13 @@ class PipeCheckerRunner:
2027
2034
 
2028
2035
  current_read_bytes.append(test.current_read_bytes)
2029
2036
  checker_read_bytes.append(test.checker_read_bytes)
2037
+ else:
2038
+ # if we do not have any successful execution, let's just return a table with dummy metrics https://gitlab.com/tinybird/analytics/-/issues/10875
2039
+ current_response_times = [0]
2040
+ checker_response_times = [0]
2041
+
2042
+ current_read_bytes = [0]
2043
+ checker_read_bytes = [0]
2030
2044
 
2031
2045
  metrics_summary = {
2032
2046
  "run": result.testsRun,
@@ -12,7 +12,6 @@ import click
12
12
  from click import Context
13
13
 
14
14
  from tinybird.client import DoesNotExistException, TinyB
15
- from tinybird.connector_settings import DATA_CONNECTOR_SETTINGS, DataConnectorType, DataSensitiveSettings
16
15
  from tinybird.feedback_manager import FeedbackManager
17
16
  from tinybird.tb_cli_modules.cli import cli
18
17
  from tinybird.tb_cli_modules.common import (
@@ -340,8 +339,11 @@ async def connection_rm(ctx: Context, connection_id: str, force: bool) -> None:
340
339
  @click.option("--connector", help="Filter by connector")
341
340
  @click.pass_context
342
341
  @coro
343
- async def connection_ls(ctx: Context, connector: Optional[DataConnectorType] = None) -> None:
342
+ async def connection_ls(ctx: Context, connector: str) -> None:
344
343
  """List connections."""
344
+
345
+ from tinybird.connector_settings import DataConnectorSettings, DataSensitiveSettings
346
+
345
347
  obj: Dict[str, Any] = ctx.ensure_object(dict)
346
348
  client: TinyB = obj["client"]
347
349
 
@@ -356,9 +358,9 @@ async def connection_ls(ctx: Context, connector: Optional[DataConnectorType] = N
356
358
  columns = ["service", "name", "id", "connected_datasources"]
357
359
  else:
358
360
  sensitive_settings = getattr(DataSensitiveSettings, connector)
359
- columns = ["service", "name", "id", "connected_datasources"]
360
- if connector_settings := DATA_CONNECTOR_SETTINGS.get(connector):
361
- columns += [setting.replace("tb_", "") for setting in connector_settings.model_fields.keys()]
361
+ columns = ["service", "name", "id", "connected_datasources"] + [
362
+ setting.replace("tb_", "") for setting in getattr(DataConnectorSettings, connector)
363
+ ]
362
364
 
363
365
  for connection in connections:
364
366
  row = [_get_setting_value(connection, setting, sensitive_settings) for setting in columns]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 2.1.0.dev15
3
+ Version: 2.1.1.dev2
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,6 +19,31 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 2.1.1.dev2
23
+ ************
24
+
25
+ - `Fixed` command `tb pipe regression-tests` to handle the edge case when all the requests to the endpoint that we want to check fails as the value returned is no what we expect.
26
+
27
+ 2.1.0
28
+ ************
29
+
30
+ - `Changed` `exec_test.sh` now runs with `parallel -j 4` to speed up CI cycles
31
+ - `Changed` `tb release rollback` now requires double confirmation
32
+ - `Fixed` Ignore .diff_tmp/ on `tb deploy`
33
+ - `Changed` Regression tests select faster the requests used for the checks.
34
+ - `Improve` peformance when using the option `--only-change` in the `tb push` command. This was a regression introduced in the version 2.0.0
35
+ - `Added` Add option `c` or `--concurrency` to `tb run test` to run tests in parallel
36
+ - `Removed` hidden option `--only-changes` from `tb deploy` as it's no longer required.
37
+ - `Changed` Speed-up CLI startup by lazy-importing some dependencies.
38
+ - `Added` `tb auth` shows and uses the new AWS regions
39
+ - `Added` Add `--auto-promote` to `tb deploy` to automatically promote the Release created. It automatically applies to Environments created by CI.
40
+ - `Added` Support `TAGS "backfil_column=<column_name>"` in .datasource definition to do backfill operations when running a populate job
41
+ - `Changed` Regression tests now also use Pipe requests done with the POST HTTP method.
42
+ - `Changed` `tb env` commands to use the new `CLIConfig` class to manage the authentication and the configuration of the CLI. This change allows us to have a better control of the configuration and the authentication of the CLI. This should be transparent for the users.
43
+ - `Changed` Internal changes in `tb deploy`
44
+ - `Added` `tb deploy` removes resources from datafiles deleted
45
+
46
+
22
47
  2.1.0.dev15
23
48
  ************
24
49
 
@@ -5,7 +5,6 @@ cryptography>=3.4.8
5
5
  croniter==1.3.8
6
6
  GitPython==3.1.29
7
7
  humanfriendly==8.2
8
- pydantic==2.5.2
9
8
  pyperclip==1.8.2
10
9
  pyyaml<6.1,>=6.0
11
10
  requests<3,>=2.28.1
@@ -1,134 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from enum import Enum
4
- from typing import List, Optional
5
-
6
- from pydantic import BaseModel
7
-
8
-
9
- class DataConnectorType(str, Enum):
10
- KAFKA = "kafka"
11
- GCLOUD_SCHEDULER = "gcscheduler"
12
- SNOWFLAKE = "snowflake"
13
- BIGQUERY = "bigquery"
14
- GCLOUD_STORAGE = "gcs"
15
- GCLOUD_STORAGE_HMAC = "gcs_hmac"
16
- AMAZON_S3 = "s3"
17
-
18
- def __str__(self) -> str:
19
- return self.value
20
-
21
-
22
- class DataConnectorSetting(BaseModel):
23
- ...
24
-
25
-
26
- class KafkaConnectorSetting(DataConnectorSetting):
27
- kafka_bootstrap_servers: str
28
- kafka_sasl_plain_username: str
29
- kafka_sasl_plain_password: str
30
- cli_version: Optional[str] = None
31
- tb_endpoint: Optional[str] = None
32
- kafka_security_protocol: Optional[str] = None
33
- kafka_sasl_mechanism: Optional[str] = None
34
- kafka_schema_registry_url: Optional[str] = None
35
-
36
-
37
- class S3ConnectorSetting(DataConnectorSetting):
38
- s3_access_key_id: str
39
- s3_secret_access_key: str
40
- s3_region: str
41
-
42
-
43
- class SnowflakeConnectorSetting(DataConnectorSetting):
44
- account: str
45
- username: str
46
- password: str
47
- role: str
48
- warehouse: str
49
- warehouse_size: Optional[str] = None
50
- stage: Optional[str] = None
51
- integration: Optional[str] = None
52
-
53
-
54
- class GCSchedulerConnectorSetting(DataConnectorSetting):
55
- gcscheduler_region: Optional[str] = None
56
-
57
-
58
- class BigQueryConnectorSetting(DataConnectorSetting):
59
- account: Optional[str] = None
60
-
61
-
62
- class GCSHmacConnectorSetting(DataConnectorSetting):
63
- gcs_hmac_access_id: str
64
- gcs_hmac_secret: str
65
-
66
-
67
- class GCSConnectorSetting(DataConnectorSetting):
68
- gcs_private_key_id: str
69
- gcs_client_x509_cert_url: str
70
- gcs_project_id: str
71
- gcs_client_id: str
72
- gcs_client_email: str
73
- gcs_private_key: str
74
-
75
-
76
- DATA_CONNECTOR_SETTINGS: dict[DataConnectorType, type[DataConnectorSetting]] = {
77
- DataConnectorType.KAFKA: KafkaConnectorSetting,
78
- DataConnectorType.GCLOUD_SCHEDULER: GCSchedulerConnectorSetting,
79
- DataConnectorType.SNOWFLAKE: SnowflakeConnectorSetting,
80
- DataConnectorType.BIGQUERY: BigQueryConnectorSetting,
81
- DataConnectorType.GCLOUD_STORAGE: GCSConnectorSetting,
82
- DataConnectorType.GCLOUD_STORAGE_HMAC: GCSHmacConnectorSetting,
83
- DataConnectorType.AMAZON_S3: S3ConnectorSetting,
84
- }
85
-
86
-
87
- class DataLinkerSettings:
88
- kafka = [
89
- "tb_datasource",
90
- "tb_token",
91
- "kafka_topic",
92
- "kafka_group_id",
93
- "kafka_auto_offset_reset",
94
- "kafka_store_raw_value",
95
- "kafka_store_headers",
96
- ]
97
-
98
-
99
- class DataSinkSettings:
100
- gcscheduler = [
101
- "cron",
102
- "timezone",
103
- "status",
104
- "gcscheduler_target_url",
105
- "gcscheduler_job_name",
106
- "gcscheduler_region",
107
- ]
108
- gcs_hmac = [
109
- "bucket_path",
110
- "file_template",
111
- "partition_node",
112
- "format",
113
- "compression",
114
- ]
115
- s3 = [
116
- "bucket_path",
117
- "file_template",
118
- "partition_node",
119
- "format",
120
- "compression",
121
- ]
122
-
123
-
124
- class DataSensitiveSettings:
125
- kafka = ["kafka_sasl_plain_password"]
126
- gcscheduler = [
127
- "gcscheduler_target_url",
128
- "gcscheduler_job_name",
129
- "gcscheduler_region",
130
- ]
131
- bigquery: List[str] = []
132
- snowflake: List[str] = []
133
- gcs_hmac: List[str] = ["gcs_hmac_secret"]
134
- s3: List[str] = ["s3_secret_access_key"]