tinybird-cli 2.1.1.dev1__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.1.dev1 → tinybird-cli-2.1.1.dev2}/PKG-INFO +6 -1
  2. {tinybird-cli-2.1.1.dev1 → 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.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/datafile.py +19 -5
  5. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/connection.py +7 -5
  6. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/PKG-INFO +6 -1
  7. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/requires.txt +0 -1
  8. tinybird-cli-2.1.1.dev1/tinybird/connector_settings.py +0 -134
  9. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/setup.cfg +0 -0
  10. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/ch_utils/constants.py +0 -0
  11. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/ch_utils/engine.py +0 -0
  12. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/check_pypi.py +0 -0
  13. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/client.py +0 -0
  14. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/config.py +0 -0
  15. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/connectors.py +0 -0
  16. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/context.py +0 -0
  17. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/datatypes.py +0 -0
  18. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/feedback_manager.py +0 -0
  19. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/sql.py +0 -0
  20. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/sql_template.py +0 -0
  21. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/sql_template_fmt.py +0 -0
  22. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/sql_toolset.py +0 -0
  23. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/syncasync.py +0 -0
  24. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli.py +0 -0
  25. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/auth.py +0 -0
  26. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/branch.py +0 -0
  27. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/cicd.py +0 -0
  28. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/cli.py +0 -0
  29. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/common.py +0 -0
  30. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/config.py +0 -0
  31. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/datasource.py +0 -0
  32. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/exceptions.py +0 -0
  33. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/job.py +0 -0
  34. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/pipe.py +0 -0
  35. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/regions.py +0 -0
  36. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/telemetry.py +0 -0
  37. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/test.py +0 -0
  38. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  39. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  40. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/token.py +0 -0
  41. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/workspace.py +0 -0
  42. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  43. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird/tornado_template.py +0 -0
  44. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  45. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  46. {tinybird-cli-2.1.1.dev1 → tinybird-cli-2.1.1.dev2}/tinybird_cli.egg-info/entry_points.txt +0 -0
  47. {tinybird-cli-2.1.1.dev1 → 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.1.dev1
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,11 @@ 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
+
22
27
  2.1.0
23
28
  ************
24
29
 
@@ -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.1.dev1'
8
- __revision__ = '2f7cd36'
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.1.dev1
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,11 @@ 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
+
22
27
  2.1.0
23
28
  ************
24
29
 
@@ -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"]