tinybird-cli 2.1.0.dev10__tar.gz → 2.1.0.dev12__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 (46) hide show
  1. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/PKG-INFO +11 -1
  2. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/__cli__.py +2 -2
  3. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/ch_utils/engine.py +1 -2
  4. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/check_pypi.py +3 -1
  5. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/client.py +6 -6
  6. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/config.py +2 -1
  7. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/connectors.py +6 -5
  8. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/context.py +0 -1
  9. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/datafile.py +102 -86
  10. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/feedback_manager.py +1 -1
  11. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql_template.py +10 -9
  12. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql_template_fmt.py +6 -8
  13. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql_toolset.py +9 -8
  14. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/syncasync.py +1 -1
  15. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli.py +7 -8
  16. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/auth.py +4 -6
  17. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/branch.py +11 -10
  18. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/cicd.py +4 -4
  19. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/cli.py +24 -29
  20. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/common.py +32 -37
  21. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/config.py +5 -6
  22. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/connection.py +7 -8
  23. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/datasource.py +6 -9
  24. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/exceptions.py +1 -0
  25. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/job.py +2 -4
  26. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/pipe.py +6 -5
  27. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/regions.py +1 -1
  28. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/test.py +4 -3
  29. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +3 -2
  30. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/workspace.py +7 -8
  31. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/workspace_members.py +5 -6
  32. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tornado_template.py +4 -3
  33. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/PKG-INFO +11 -1
  34. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/setup.cfg +0 -0
  35. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/ch_utils/constants.py +0 -0
  36. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/connector_settings.py +0 -0
  37. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/datatypes.py +1 -1
  38. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql.py +1 -1
  39. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/telemetry.py +5 -5
  40. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +1 -1
  41. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/token.py +5 -5
  42. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  43. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  44. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/entry_points.txt +0 -0
  45. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/requires.txt +0 -0
  46. {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/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.dev10
3
+ Version: 2.1.0.dev12
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,6 +19,16 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 2.1.0.dev12
23
+ ************
24
+
25
+ - `Changed` Regression tests select faster the requests used for the checks.
26
+
27
+ 2.1.0.dev11
28
+ ************
29
+
30
+ - `Improve` peformance when using the option `--only-change` in the `tb push` command. This was a regression introduced in the version 2.0.0
31
+
22
32
  2.1.0.dev10
23
33
  ************
24
34
 
@@ -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.dev10'
8
- __revision__ = '1fec830'
7
+ __version__ = '2.1.0.dev12'
8
+ __revision__ = '8032292'
@@ -1,11 +1,10 @@
1
+ import logging
1
2
  import re
2
3
  from collections import defaultdict
3
4
  from typing import Any, Callable, Dict, Iterable, List, Optional
4
- import logging
5
5
 
6
6
  from ..sql import col_name, engine_replicated_to_local, parse_table_structure
7
7
 
8
-
9
8
  DEFAULT_EMPTY_PARAMETERS = ["ttl", "partition_key", "sorting_key"]
10
9
  DEFAULT_JOIN_EMPTY_PARAMETERS = ["join_strictness", "join_type", "key_columns"]
11
10
 
@@ -1,7 +1,9 @@
1
1
  from typing import Optional
2
+
2
3
  import requests
3
- from tinybird.syncasync import sync_to_async
4
+
4
5
  from tinybird.feedback_manager import FeedbackManager
6
+ from tinybird.syncasync import sync_to_async
5
7
  from tinybird.tb_cli_modules.common import CLIException, getenv_bool
6
8
 
7
9
  PYPY_URL = "https://pypi.org/pypi/tinybird-cli/json"
@@ -1,19 +1,19 @@
1
1
  import asyncio
2
2
  import json
3
+ import logging
4
+ import ssl
3
5
  from pathlib import Path
4
- from typing import Any, Callable, Dict, List, Optional, Set, Mapping, Union
6
+ from typing import Any, Callable, Dict, List, Mapping, Optional, Set, Union
7
+ from urllib.parse import quote, urlencode
5
8
 
6
9
  import requests
7
10
  import requests.adapters
8
11
  from requests import Response
9
- import logging
10
- import ssl
11
- from urllib.parse import quote, urlencode
12
12
  from urllib3 import Retry
13
+
13
14
  from tinybird.syncasync import sync_to_async
14
- from tinybird.tb_cli_modules.telemetry import add_telemetry_event
15
15
  from tinybird.tb_cli_modules.regions import fill_with_public_regions
16
-
16
+ from tinybird.tb_cli_modules.telemetry import add_telemetry_event
17
17
 
18
18
  HOST = "https://api.tinybird.co"
19
19
  LIMIT_RETRIES = 10
@@ -1,7 +1,8 @@
1
+ import json
1
2
  from os import environ, getcwd
2
3
  from pathlib import Path
3
- import json
4
4
  from typing import Any, Dict, Optional
5
+
5
6
  import click
6
7
 
7
8
  from tinybird import __cli__
@@ -1,11 +1,12 @@
1
- import os
2
1
  import logging
3
- from typing import Any, Dict, List, Optional, Tuple
2
+ import os
4
3
  import time
4
+ from abc import ABC, abstractmethod
5
+ from datetime import datetime
6
+ from typing import Any, Dict, List, Optional, Tuple
5
7
  from urllib.parse import unquote
8
+
6
9
  import requests
7
- from datetime import datetime
8
- from abc import ABC, abstractmethod
9
10
 
10
11
  from .client import ConnectorNothingToLoad
11
12
 
@@ -26,8 +27,8 @@ except ImportError:
26
27
 
27
28
  try:
28
29
  import googleapiclient.discovery
29
- from google.api_core.exceptions import PreconditionFailed
30
30
  import snowflake.connector
31
+ from google.api_core.exceptions import PreconditionFailed
31
32
  except ImportError:
32
33
  UNINSTALLED_CONNECTORS += ["snowflake"]
33
34
 
@@ -1,6 +1,5 @@
1
1
  from contextvars import ContextVar
2
2
 
3
-
4
3
  workspace_id: ContextVar[str] = ContextVar("workspace_id")
5
4
  workspace: ContextVar[str] = ContextVar("workspace")
6
5
  table_id: ContextVar[str] = ContextVar("table_id")
@@ -1,10 +1,12 @@
1
1
  """
2
2
  Datafile is like a Dockerfile but to describe ETL processes
3
3
  """
4
+ from asyncio import Semaphore, gather
5
+
4
6
  from requests import Response
5
7
 
6
8
  try:
7
- from colorama import Fore, Back, Style, init
9
+ from colorama import Back, Fore, Style, init
8
10
 
9
11
  init()
10
12
  except ImportError: # fallback so that the imported classes always exist
@@ -15,61 +17,60 @@ except ImportError: # fallback so that the imported classes always exist
15
17
 
16
18
  Fore = Back = Style = ColorFallback()
17
19
 
18
- import os
20
+ import difflib
21
+ import glob
19
22
  import itertools
20
- from os import getcwd
21
- import logging
22
- import textwrap
23
23
  import json
24
- from operator import itemgetter
24
+ import logging
25
+ import math
26
+ import os
27
+ import os.path
28
+ import pprint
29
+ import re
25
30
  import shlex
31
+ import shutil
26
32
  import sys
27
- import re
28
- from typing import Any, Callable, Dict, Generator, Iterable, List, Optional, Tuple, Union, cast
29
- from enum import Enum
30
- from mypy_extensions import VarArg, KwArg
31
- import difflib
32
- import click
33
- import glob
34
- import pprint
35
- import requests
33
+ import textwrap
34
+ import traceback
36
35
  import unittest
37
- from string import Template
38
- from toposort import toposort
39
- from pathlib import Path
40
36
  import urllib.parse
41
- from urllib.parse import urlencode, urlparse, parse_qs
42
37
  from collections import namedtuple
43
- from io import StringIO
44
- import os.path
45
38
  from copy import deepcopy
46
- import traceback
47
39
  from dataclasses import dataclass
40
+ from enum import Enum
41
+ from io import StringIO
42
+ from operator import itemgetter
43
+ from os import getcwd
44
+ from pathlib import Path
45
+ from statistics import mean, median
46
+ from string import Template
47
+ from typing import Any, Callable, Dict, Generator, Iterable, List, Optional, Tuple, Union, cast
48
+ from urllib.parse import parse_qs, urlencode, urlparse
49
+
50
+ import click
51
+ import requests
48
52
  from croniter import croniter
49
- from contextlib import nullcontext
50
- import shutil
53
+ from humanfriendly import format_size
54
+ from humanfriendly.tables import format_pretty_table
55
+ from mypy_extensions import KwArg, VarArg
56
+ from toposort import toposort
51
57
 
52
- from .tornado_template import UnClosedIfError
53
- from .sql import parse_table_structure, schema_to_sql_columns
54
- from .client import TinyB, DoesNotExistException, AuthException, CanNotBeDeletedException
55
- from .sql_template import render_sql_template, get_used_tables_in_template
58
+ from tinybird.config import PROJECT_PATHS
56
59
  from tinybird.sql_template_fmt import format_sql_template
57
- from .feedback_manager import FeedbackManager
58
- from .ch_utils.engine import ENABLED_ENGINES
59
60
  from tinybird.syncasync import sync_to_async
60
- from tinybird.config import PROJECT_PATHS
61
- from statistics import mean, median
62
- import math
63
- from humanfriendly.tables import format_pretty_table
64
- from humanfriendly import format_size
65
-
66
61
  from tinybird.tb_cli_modules.common import _get_tb_client, get_current_main_workspace, getenv_bool, wait_job
67
62
  from tinybird.tb_cli_modules.config import CLIConfig
68
- from tinybird.tb_cli_modules.exceptions import CLIPipeException, CLIGitReleaseException
63
+ from tinybird.tb_cli_modules.exceptions import CLIGitReleaseException, CLIPipeException
69
64
 
70
- os.environ["GIT_PYTHON_REFRESH"] = "quiet"
71
- from git import Repo, HEAD, Diff, InvalidGitRepositoryError, GitCommandError # noqa: E402
65
+ from .ch_utils.engine import ENABLED_ENGINES
66
+ from .client import AuthException, CanNotBeDeletedException, DoesNotExistException, TinyB
67
+ from .feedback_manager import FeedbackManager
68
+ from .sql import parse_table_structure, schema_to_sql_columns
69
+ from .sql_template import get_used_tables_in_template, render_sql_template
70
+ from .tornado_template import UnClosedIfError
72
71
 
72
+ os.environ["GIT_PYTHON_REFRESH"] = "quiet"
73
+ from git import HEAD, Diff, GitCommandError, InvalidGitRepositoryError, Repo # noqa: E402
73
74
 
74
75
  INTERNAL_TABLES: Tuple[str, ...] = (
75
76
  "datasources_ops_log",
@@ -1876,7 +1877,7 @@ class PipeCheckerRunner:
1876
1877
  method as http_method
1877
1878
  FROM {pipe_stats_rt}
1878
1879
  WHERE
1879
- url like '%/{self.pipe_name}.%'
1880
+ pipe_name = '{self.pipe_name}'
1880
1881
  AND url IS NOT NULL
1881
1882
  AND extractURLParameter(assumeNotNull(url), 'from') <> 'ui'
1882
1883
  AND extractURLParameter(assumeNotNull(url), 'pipe_checker') <> 'true'
@@ -1885,6 +1886,7 @@ class PipeCheckerRunner:
1885
1886
  AND not mapContains(parameters, '__tb__semver')
1886
1887
  {" AND " + " AND ".join([f"mapContains(post_params, '{match}')" for match in matches]) if matches and len(matches) > 0 else ''}
1887
1888
  { extra_where_clause }
1889
+ Limit 5000000 -- Enough to bring data while not processing all requests from highly used pipes
1888
1890
  )
1889
1891
  group by request_param_names, http_method
1890
1892
  FORMAT JSON
@@ -1902,8 +1904,8 @@ class PipeCheckerRunner:
1902
1904
  method as http_method
1903
1905
  FROM {pipe_stats_rt}
1904
1906
  WHERE
1905
- url like '%/{self.pipe_name}.%'
1906
- AND url is not null
1907
+ pipe_name = '{self.pipe_name}'
1908
+ AND url IS NOT NULL
1907
1909
  AND extractURLParameter(assumeNotNull(url), 'from') <> 'ui'
1908
1910
  AND extractURLParameter(assumeNotNull(url), 'pipe_checker') <> 'true'
1909
1911
  AND extractURLParameter(assumeNotNull(url), 'debug') <> 'query'
@@ -4250,6 +4252,16 @@ def format_sql(sql: str, DATAFILE_INDENT: str, line_length: Optional[int] = None
4250
4252
  return "\n".join([f"{DATAFILE_INDENT}{part}" for part in sql.split("\n") if len(part.strip())])
4251
4253
 
4252
4254
 
4255
+ async def _gather_with_concurrency(n, *tasks):
4256
+ semaphore = Semaphore(n)
4257
+
4258
+ async def sem_task(task):
4259
+ async with semaphore:
4260
+ return await task
4261
+
4262
+ return await gather(*(sem_task(task) for task in tasks))
4263
+
4264
+
4253
4265
  async def folder_pull(
4254
4266
  client: TinyB,
4255
4267
  folder: str,
@@ -4293,54 +4305,60 @@ async def folder_pull(
4293
4305
  get_resource_function: str,
4294
4306
  progress_bar: bool = False,
4295
4307
  ):
4296
- values = versions.values()
4297
- with click.progressbar(values, label=f"Pulling {extension}s") if progress_bar else nullcontext(values) as values: # type: ignore
4298
- for k in values:
4299
- name = f"{k['name']}.{extension}"
4300
-
4301
- try:
4302
- if pattern and not pattern.search(name):
4303
- if verbose:
4304
- click.echo(FeedbackManager.info_skipping_resource(resource=name))
4305
- continue
4308
+ async def write_resource(k: Dict[str, Any]):
4309
+ name = f"{k['name']}.{extension}"
4310
+ try:
4311
+ if pattern and not pattern.search(name):
4312
+ if verbose:
4313
+ click.echo(FeedbackManager.info_skipping_resource(resource=name))
4314
+ return
4306
4315
 
4307
- resource = await getattr(client, get_resource_function)(k["original_name"])
4316
+ resource = await getattr(client, get_resource_function)(k["original_name"])
4308
4317
 
4309
- dest_folder = folder
4310
- if "." in k["name"] and extension != "token":
4311
- dest_folder = Path(folder) / "vendor" / k["name"].split(".", 1)[0]
4312
- name = f"{k['name'].split('.', 1)[1]}.{extension}"
4318
+ dest_folder = folder
4319
+ if "." in k["name"] and extension != "token":
4320
+ dest_folder = Path(folder) / "vendor" / k["name"].split(".", 1)[0]
4321
+ name = f"{k['name'].split('.', 1)[1]}.{extension}"
4313
4322
 
4314
- file_folder = get_file_folder(extension)
4315
- f = Path(dest_folder) / file_folder if file_folder is not None else Path(dest_folder)
4323
+ file_folder = get_file_folder(extension)
4324
+ f = Path(dest_folder) / file_folder if file_folder is not None else Path(dest_folder)
4316
4325
 
4317
- if not f.exists():
4318
- f.mkdir(parents=True)
4326
+ if not f.exists():
4327
+ f.mkdir(parents=True)
4319
4328
 
4320
- f = f / name
4321
- resource_names = [x.split(".")[-1] for x in resources]
4329
+ f = f / name
4330
+ resource_names = [x.split(".")[-1] for x in resources]
4322
4331
 
4332
+ if verbose:
4333
+ click.echo(FeedbackManager.info_writing_resource(resource=f))
4334
+ if not f.exists() or force:
4335
+ with open(f, "w") as fd:
4336
+ # versions are a client only thing so
4337
+ # datafiles from the server do not contains information about versions
4338
+ if k["version"] >= 0:
4339
+ resource = f"VERSION {k['version']}\n" + resource
4340
+ if resource:
4341
+ matches = re.findall(r"([^\s\.]*__v\d+)", resource)
4342
+ for match in set(matches):
4343
+ m = match.split("__v")[0]
4344
+ if m in resources or m in resource_names:
4345
+ resource = resource.replace(match, m)
4346
+ fd.write(resource)
4347
+ else:
4323
4348
  if verbose:
4324
- click.echo(FeedbackManager.info_writing_resource(resource=f))
4325
- if not f.exists() or force:
4326
- with open(f, "w") as fd:
4327
- # versions are a client only thing so
4328
- # datafiles from the server do not contains information about versions
4329
- if k["version"] >= 0:
4330
- resource = f"VERSION {k['version']}\n" + resource
4331
- if resource:
4332
- matches = re.findall(r"([^\s\.]*__v\d+)", resource)
4333
- for match in set(matches):
4334
- m = match.split("__v")[0]
4335
- if m in resources or m in resource_names:
4336
- resource = resource.replace(match, m)
4337
- fd.write(resource)
4338
- else:
4339
- if verbose:
4340
- click.echo(FeedbackManager.info_skip_already_exists())
4341
- except Exception as e:
4342
- raise click.ClickException(FeedbackManager.error_exception(error=e))
4343
- return
4349
+ click.echo(FeedbackManager.info_skip_already_exists())
4350
+ except Exception as e:
4351
+ raise click.ClickException(FeedbackManager.error_exception(error=e))
4352
+
4353
+ values = versions.values()
4354
+
4355
+ if progress_bar:
4356
+ with click.progressbar(values, label=f"Pulling {extension}s"):
4357
+ for k in values:
4358
+ await write_resource(k)
4359
+ else:
4360
+ tasks = [write_resource(k) for k in values]
4361
+ await _gather_with_concurrency(5, *tasks)
4344
4362
 
4345
4363
  try:
4346
4364
  datasources = await client.datasources()
@@ -4404,6 +4422,7 @@ async def diff_command(
4404
4422
  if filenames:
4405
4423
  if len(filenames) == 1:
4406
4424
  filenames = [filenames[0]] + get_project_filenames(filenames[0])
4425
+ await folder_pull(client, target_dir, False, None, True, verbose=False)
4407
4426
  else:
4408
4427
  filenames = get_project_filenames(".")
4409
4428
  if verbose:
@@ -4439,9 +4458,6 @@ async def diff_command(
4439
4458
  continue
4440
4459
 
4441
4460
  suffix = ".datasource" if ".datasource" in file else ".pipe"
4442
-
4443
- if with_explicit_filenames:
4444
- await folder_pull(client, target_dir, False, None, True, verbose=False)
4445
4461
  target = target_dir + os.path.sep + rfilename + suffix
4446
4462
 
4447
4463
  diff_lines = await diff_files(target, file, with_format=fmt, with_color=(not no_color), client=client)
@@ -1,5 +1,5 @@
1
1
  from collections import namedtuple
2
- from typing import Callable, Any
2
+ from typing import Any, Callable
3
3
 
4
4
  FeedbackMessage = namedtuple("FeedbackMessage", "message")
5
5
 
@@ -1,17 +1,18 @@
1
- import logging
1
+ import ast
2
2
  import builtins
3
+ import linecache
4
+ import logging
5
+ import re
6
+ from datetime import datetime
3
7
  from functools import lru_cache
4
- from tornado import escape
5
- from typing import Optional, Tuple, Union
6
8
  from io import StringIO
7
- import ast
8
- import re
9
- import linecache
9
+ from typing import Optional, Tuple, Union
10
+
11
+ from tornado import escape
10
12
  from tornado.util import ObjectDict, exec_in, unicode_type
11
- from .datatypes import testers
12
- from datetime import datetime
13
13
 
14
- from .tornado_template import Template, SecurityException, VALID_CUSTOM_FUNCTION_NAMES
14
+ from .datatypes import testers
15
+ from .tornado_template import VALID_CUSTOM_FUNCTION_NAMES, SecurityException, Template
15
16
 
16
17
 
17
18
  class SQLTemplateCustomError(Exception):
@@ -1,20 +1,18 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional
3
2
  from dataclasses import dataclass
4
3
  from types import MethodType
4
+ from typing import Any, Dict, List, Optional
5
5
 
6
- from sqlfmt import api
7
- from sqlfmt.mode import Mode
8
- from sqlfmt.dialect import ClickHouse
9
- from sqlfmt import actions
6
+ from sqlfmt import actions, api
10
7
  from sqlfmt.analyzer import Rule, group
11
- from sqlfmt.line import Line
12
8
  from sqlfmt.comment import Comment
9
+ from sqlfmt.dialect import ClickHouse
10
+ from sqlfmt.jinjafmt import JinjaFormatter, JinjaTag
11
+ from sqlfmt.line import Line
12
+ from sqlfmt.mode import Mode
13
13
  from sqlfmt.node import Node
14
14
  from sqlfmt.node_manager import NodeManager
15
15
  from sqlfmt.token import Token, TokenType
16
- from sqlfmt.jinjafmt import JinjaTag, JinjaFormatter
17
-
18
16
 
19
17
  # This class extends and monkey patches https://github.com/tconbeer/sqlfm
20
18
  INDENT = " " * 4
@@ -1,13 +1,14 @@
1
+ import copy
1
2
  import logging
2
- from datetime import datetime
3
- from chtoolset import query as chquery
4
3
  from collections import defaultdict
4
+ from datetime import datetime
5
5
  from functools import lru_cache
6
+ from typing import Any, List, Optional, Set, Tuple
7
+
8
+ from chtoolset import query as chquery
6
9
  from toposort import toposort
7
- from typing import List, Tuple, Set, Optional, Any
8
- from tinybird.ch_utils.constants import ENABLED_TABLE_FUNCTIONS
9
10
 
10
- import copy
11
+ from tinybird.ch_utils.constants import ENABLED_TABLE_FUNCTIONS
11
12
 
12
13
  VALID_REMOTE = "VALID_REMOTE"
13
14
 
@@ -238,9 +239,9 @@ def replace_tables(
238
239
  logging.info(
239
240
  "Resource not found in replace_tables: %s",
240
241
  {
241
- "sql": sql,
242
- "replacements": replacements,
243
- "deps_sorted": deps_sorted,
242
+ "r": r,
243
+ "default_database": default_database,
244
+ "_replaced_with": _replaced_with,
244
245
  "valid_tables": valid_tables,
245
246
  },
246
247
  )
@@ -37,7 +37,7 @@ import sys
37
37
  import threading
38
38
  import warnings
39
39
  import weakref
40
- from concurrent.futures import Future, ThreadPoolExecutor, Executor
40
+ from concurrent.futures import Executor, Future, ThreadPoolExecutor
41
41
  from typing import Any, Callable, Dict, Optional
42
42
 
43
43
  if sys.version_info >= (3, 7):
@@ -1,22 +1,21 @@
1
- import sys
2
1
  import asyncio
2
+ import sys
3
3
 
4
4
  if sys.platform == "win32":
5
5
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
6
6
 
7
- import tinybird.tb_cli_modules.common
8
- import tinybird.tb_cli_modules.cli
9
7
  import tinybird.tb_cli_modules.auth
10
- import tinybird.tb_cli_modules.workspace
11
- import tinybird.tb_cli_modules.workspace_members
12
8
  import tinybird.tb_cli_modules.branch
13
- import tinybird.tb_cli_modules.datasource
14
- import tinybird.tb_cli_modules.pipe
9
+ import tinybird.tb_cli_modules.cli
10
+ import tinybird.tb_cli_modules.common
15
11
  import tinybird.tb_cli_modules.connection
12
+ import tinybird.tb_cli_modules.datasource
16
13
  import tinybird.tb_cli_modules.job
14
+ import tinybird.tb_cli_modules.pipe
17
15
  import tinybird.tb_cli_modules.test
18
16
  import tinybird.tb_cli_modules.token
19
-
17
+ import tinybird.tb_cli_modules.workspace
18
+ import tinybird.tb_cli_modules.workspace_members
20
19
 
21
20
  cli = tinybird.tb_cli_modules.cli.cli
22
21
 
@@ -3,23 +3,21 @@
3
3
  # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
- import click
7
-
8
6
  from typing import Any, Dict, List, Optional
9
7
 
8
+ import click
10
9
  import humanfriendly.tables
11
10
 
12
11
  from tinybird.feedback_manager import FeedbackManager
13
-
14
12
  from tinybird.tb_cli_modules.cli import cli
15
13
  from tinybird.tb_cli_modules.common import (
16
- try_update_config_with_remote,
17
- try_authenticate,
18
14
  configure_connector,
19
15
  coro,
16
+ echo_safe_humanfriendly_tables_format_smart_table,
20
17
  get_host_from_region_temp,
21
18
  get_regions_temp,
22
- echo_safe_humanfriendly_tables_format_smart_table,
19
+ try_authenticate,
20
+ try_update_config_with_remote,
23
21
  )
24
22
  from tinybird.tb_cli_modules.config import CLIConfig, ConfigValueOrigin
25
23
  from tinybird.tb_cli_modules.exceptions import CLIAuthException
@@ -3,30 +3,31 @@
3
3
  # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
+ import os
6
7
  from os import getcwd
7
- from typing import List, Tuple, Optional
8
+ from typing import List, Optional, Tuple
9
+
8
10
  import click
9
11
  import yaml
10
- import os
11
12
 
13
+ from tinybird.datafile import create_release, wait_job
14
+ from tinybird.feedback_manager import FeedbackManager
12
15
  from tinybird.tb_cli_modules.cli import cli
13
16
  from tinybird.tb_cli_modules.common import (
17
+ MAIN_BRANCH,
14
18
  coro,
15
- get_current_main_workspace_temp,
16
19
  create_workspace_branch,
17
- switch_to_workspace_by_user_workspace_data,
18
- print_current_workspace,
19
- print_data_branch_summary,
20
20
  echo_safe_humanfriendly_tables_format_smart_table,
21
+ get_current_main_workspace_temp,
21
22
  get_current_workspace_branches,
22
- MAIN_BRANCH,
23
- print_current_branch,
24
23
  print_branch_regression_tests_summary,
24
+ print_current_branch,
25
+ print_current_workspace,
26
+ print_data_branch_summary,
27
+ switch_to_workspace_by_user_workspace_data,
25
28
  switch_workspace,
26
29
  try_update_config_with_remote,
27
30
  )
28
- from tinybird.feedback_manager import FeedbackManager
29
- from tinybird.datafile import wait_job, create_release
30
31
  from tinybird.tb_cli_modules.config import CLIConfig
31
32
  from tinybird.tb_cli_modules.exceptions import CLIBranchException, CLIException, CLIReleaseException
32
33
 
@@ -1,11 +1,11 @@
1
+ from dataclasses import dataclass
1
2
  from enum import Enum
2
- from pathlib import Path
3
- from typing import Optional, Any, Dict, Union, Type, List
4
3
  from os import getcwd
5
- from tornado.template import Template
6
- from dataclasses import dataclass
4
+ from pathlib import Path
5
+ from typing import Any, Dict, List, Optional, Type, Union
7
6
 
8
7
  import click
8
+ from tornado.template import Template
9
9
 
10
10
  from tinybird.client import TinyB
11
11
  from tinybird.feedback_manager import FeedbackManager
@@ -3,71 +3,66 @@
3
3
  # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
- import os
7
- from os import environ, getcwd
8
-
9
6
  import difflib
10
7
  import json
11
8
  import logging
9
+ import os
12
10
  import pprint
13
11
  import re
14
12
  import shutil
15
13
  import sys
16
- import click
17
- from packaging import version
18
- from click import Context
19
-
14
+ from os import environ, getcwd
20
15
  from pathlib import Path
21
- from typing import Any, Callable, Iterable, Optional, List, Dict, Tuple, Union
16
+ from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Union
22
17
 
18
+ import click
23
19
  import humanfriendly
20
+ from click import Context
21
+ from packaging import version
24
22
 
23
+ import tinybird.context as context
25
24
  from tinybird.client import AuthException, AuthNoTokenException, DoesNotExistException, TinyB
26
-
27
-
28
- from tinybird.feedback_manager import FeedbackManager
25
+ from tinybird.config import CURRENT_VERSION, SUPPORTED_CONNECTORS, VERSION, FeatureFlags, get_config
29
26
  from tinybird.datafile import (
30
27
  AlreadyExistsException,
28
+ CLIGitRelease,
29
+ CLIGitReleaseException,
31
30
  Datafile,
32
31
  ParseException,
33
- create_release,
34
32
  build_graph,
35
- folder_push,
33
+ color_diff,
34
+ create_release,
35
+ diff_command,
36
36
  folder_pull,
37
+ folder_push,
37
38
  format_datasource,
38
39
  format_pipe,
39
40
  get_project_filenames,
41
+ get_resource_versions,
42
+ has_internal_datafiles,
40
43
  parse_datasource,
41
44
  parse_pipe,
42
- wait_job,
43
- get_resource_versions,
44
- diff_command,
45
- CLIGitRelease,
46
- CLIGitReleaseException,
47
- peek,
48
- color_diff,
49
45
  parse_token,
50
- has_internal_datafiles,
46
+ peek,
47
+ wait_job,
51
48
  )
52
- import tinybird.context as context
53
- from tinybird.config import FeatureFlags, get_config, VERSION, CURRENT_VERSION, SUPPORTED_CONNECTORS
54
-
49
+ from tinybird.feedback_manager import FeedbackManager
50
+ from tinybird.tb_cli_modules.cicd import check_cicd_exists, init_cicd
55
51
  from tinybird.tb_cli_modules.common import (
56
- CLIException,
57
52
  CatchAuthExceptions,
53
+ CLIException,
58
54
  _get_tb_client,
59
55
  coro,
60
56
  create_tb_client,
57
+ echo_safe_humanfriendly_tables_format_smart_table,
61
58
  folder_init,
59
+ get_config_and_hosts,
62
60
  get_current_main_workspace,
63
61
  getenv_bool,
64
62
  load_connector_config,
65
- get_config_and_hosts,
66
- echo_safe_humanfriendly_tables_format_smart_table,
67
63
  )
68
64
  from tinybird.tb_cli_modules.config import CLIConfig
69
65
  from tinybird.tb_cli_modules.telemetry import add_telemetry_event
70
- from tinybird.tb_cli_modules.cicd import init_cicd, check_cicd_exists
71
66
 
72
67
  __old_click_echo = click.echo
73
68
  __old_click_secho = click.secho
@@ -210,7 +205,7 @@ async def cli(
210
205
  if ctx.invoked_subcommand == "auth":
211
206
  return
212
207
 
213
- from tinybird.connectors import create_connector
208
+ from tinybird.connectors import create_connector # noqa
214
209
 
215
210
  if gcp_project_id and gcs_bucket and google_application_credentials and not sf_account:
216
211
  bq_config = {
@@ -5,72 +5,66 @@
5
5
  # the function to the proper command file.
6
6
  # - Please, **do not** define commands here.
7
7
 
8
- from copy import deepcopy
8
+ import asyncio
9
9
  import json
10
- from os import environ, getcwd, getenv, chmod
11
- from enum import Enum
10
+ import re
11
+ import socket
12
12
  import sys
13
- from click._termui_impl import ProgressBar
14
- from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Iterable, Union
15
13
  import uuid
16
- import click
17
- import click.formatting
18
- import re
14
+ from contextlib import closing
15
+ from copy import deepcopy
16
+ from enum import Enum
17
+ from functools import wraps
18
+ from os import chmod, environ, getcwd, getenv
19
19
  from pathlib import Path
20
- from urllib.parse import urlparse, urljoin
20
+ from sys import version_info
21
+ from typing import Any, Callable, Dict, Iterable, List, Optional, Set, Tuple, Union
22
+ from urllib.parse import urljoin, urlparse
21
23
 
22
- from click import Context
24
+ import click
25
+ import click.formatting
23
26
  import humanfriendly
24
27
  import humanfriendly.tables
28
+ from click import Context
29
+ from click._termui_impl import ProgressBar
25
30
  from humanfriendly.tables import format_pretty_table
31
+
26
32
  from tinybird.client import (
27
- JobException,
28
- TinyB,
29
33
  AuthException,
30
34
  AuthNoTokenException,
35
+ ConnectorNothingToLoad,
31
36
  DoesNotExistException,
37
+ JobException,
32
38
  OperationCanNotBePerformed,
33
- ConnectorNothingToLoad,
39
+ TinyB,
34
40
  )
35
- from sys import version_info
36
- from typing import TYPE_CHECKING
37
-
38
- if TYPE_CHECKING:
39
- from tinybird.connectors import Connector
40
- from tinybird.feedback_manager import FeedbackManager
41
- from tinybird.tb_cli_modules.regions import Region
42
-
43
- import asyncio
44
- from functools import wraps
45
-
46
41
  from tinybird.config import (
42
+ DEFAULT_API_HOST,
47
43
  DEFAULT_LOCALHOST,
44
+ DEFAULT_UI_HOST,
45
+ PROJECT_PATHS,
46
+ SUPPORTED_CONNECTORS,
47
+ VERSION,
48
+ FeatureFlags,
48
49
  get_config,
49
50
  write_config,
50
- FeatureFlags,
51
- VERSION,
52
- SUPPORTED_CONNECTORS,
53
- PROJECT_PATHS,
54
- DEFAULT_API_HOST,
55
- DEFAULT_UI_HOST,
56
51
  )
57
-
58
- import socket
59
- from contextlib import closing
60
-
52
+ from tinybird.connectors import Connector
53
+ from tinybird.feedback_manager import FeedbackManager
61
54
  from tinybird.syncasync import async_to_sync
62
55
  from tinybird.tb_cli_modules.config import CLIConfig
63
56
  from tinybird.tb_cli_modules.exceptions import (
64
57
  CLIAuthException,
58
+ CLIConnectionException,
65
59
  CLIException,
66
60
  CLIWorkspaceException,
67
- CLIConnectionException,
68
61
  )
62
+ from tinybird.tb_cli_modules.regions import Region
69
63
  from tinybird.tb_cli_modules.telemetry import (
70
- init_telemetry,
71
64
  add_telemetry_event,
72
65
  add_telemetry_sysinfo_event,
73
66
  flush_telemetry,
67
+ init_telemetry,
74
68
  is_ci_environment,
75
69
  )
76
70
 
@@ -87,7 +81,8 @@ def obfuscate_token(value: Optional[str]) -> Optional[str]:
87
81
 
88
82
  def create_connector(connector: str, options: Dict[str, Any]):
89
83
  # Imported here to improve startup time when the connectors aren't used
90
- from tinybird.connectors import create_connector as _create_connector, UNINSTALLED_CONNECTORS
84
+ from tinybird.connectors import UNINSTALLED_CONNECTORS
85
+ from tinybird.connectors import create_connector as _create_connector
91
86
 
92
87
  if connector in UNINSTALLED_CONNECTORS:
93
88
  raise CLIException(FeedbackManager.error_connector_not_installed(connector=connector))
@@ -1,16 +1,15 @@
1
1
  import json
2
2
  import os
3
- import tinybird.client as tbc
4
-
5
- from dataclasses import dataclass
6
3
  from copy import deepcopy
4
+ from dataclasses import dataclass
7
5
  from enum import Enum
8
- from packaging import version
9
- from urllib.parse import urlparse
10
6
  from typing import Any, Dict, List, Optional, Tuple, Union
7
+ from urllib.parse import urlparse
11
8
 
12
- from tinybird.config import DEFAULT_API_HOST, DEFAULT_LOCALHOST, CURRENT_VERSION
9
+ from packaging import version
13
10
 
11
+ import tinybird.client as tbc
12
+ from tinybird.config import CURRENT_VERSION, DEFAULT_API_HOST, DEFAULT_LOCALHOST
14
13
 
15
14
  APP_CONFIG_NAME = "tinybird"
16
15
 
@@ -4,29 +4,28 @@
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
6
  import os
7
- import click
8
-
9
7
  from os import getcwd
10
8
  from pathlib import Path
11
- from click import Context
12
9
  from typing import Any, Dict, Optional
13
10
 
14
- from tinybird.feedback_manager import FeedbackManager
15
- from tinybird.client import DoesNotExistException, TinyB
11
+ import click
12
+ from click import Context
16
13
 
14
+ from tinybird.client import DoesNotExistException, TinyB
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 (
18
+ ConnectionReplacements,
19
19
  _get_setting_value,
20
20
  coro,
21
+ echo_safe_humanfriendly_tables_format_smart_table,
22
+ validate_connection_name,
21
23
  validate_kafka_auto_offset_reset,
22
24
  validate_kafka_bootstrap_servers,
23
25
  validate_kafka_key,
24
26
  validate_kafka_schema_registry_url,
25
27
  validate_kafka_secret,
26
- echo_safe_humanfriendly_tables_format_smart_table,
27
28
  validate_string_connector_param,
28
- validate_connection_name,
29
- ConnectionReplacements,
30
29
  )
31
30
  from tinybird.tb_cli_modules.exceptions import CLIConnectionException
32
31
  from tinybird.tb_cli_modules.telemetry import is_ci_environment
@@ -10,33 +10,30 @@ import re
10
10
  from typing import Any, Dict, List, Optional
11
11
 
12
12
  import click
13
- from click import Context
14
13
  import humanfriendly
14
+ from click import Context
15
15
 
16
16
  from tinybird.client import CanNotBeDeletedException, DoesNotExistException, TinyB
17
- from typing import TYPE_CHECKING
18
-
19
- if TYPE_CHECKING:
20
- from tinybird.connectors import Connector
21
- from tinybird.feedback_manager import FeedbackManager
17
+ from tinybird.connectors import Connector
22
18
  from tinybird.datafile import get_name_version, wait_job
19
+ from tinybird.feedback_manager import FeedbackManager
23
20
  from tinybird.tb_cli_modules.cli import cli
24
21
  from tinybird.tb_cli_modules.common import (
25
22
  _analyze,
26
23
  _generate_datafile,
24
+ ask_for_user_token,
27
25
  autocomplete_topics,
28
26
  coro,
27
+ echo_safe_humanfriendly_tables_format_smart_table,
28
+ get_config_and_hosts,
29
29
  get_format_from_filename_or_url,
30
30
  load_connector_config,
31
31
  push_data,
32
32
  sync_data,
33
- get_config_and_hosts,
34
33
  validate_datasource_name,
35
34
  validate_kafka_auto_offset_reset,
36
35
  validate_kafka_group,
37
36
  validate_kafka_topic,
38
- echo_safe_humanfriendly_tables_format_smart_table,
39
- ask_for_user_token,
40
37
  )
41
38
  from tinybird.tb_cli_modules.exceptions import CLIDatasourceException
42
39
 
@@ -1,4 +1,5 @@
1
1
  from typing import Any, Dict, Optional
2
+
2
3
  import click
3
4
 
4
5
  from tinybird.tb_cli_modules.telemetry import add_telemetry_event
@@ -4,15 +4,13 @@
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
6
  import click
7
-
8
7
  from click import Context
9
8
 
10
- from tinybird.feedback_manager import FeedbackManager
11
9
  from tinybird.client import DoesNotExistException, TinyB
12
-
10
+ from tinybird.feedback_manager import FeedbackManager
13
11
  from tinybird.tb_cli_modules.cli import cli
14
- from tinybird.tb_cli_modules.exceptions import CLIException
15
12
  from tinybird.tb_cli_modules.common import coro, echo_safe_humanfriendly_tables_format_smart_table
13
+ from tinybird.tb_cli_modules.exceptions import CLIException
16
14
 
17
15
 
18
16
  @cli.group()
@@ -5,20 +5,21 @@
5
5
 
6
6
  import json
7
7
  import os
8
- from pathlib import Path
9
8
  import re
9
+ from pathlib import Path
10
10
  from typing import Dict, List, Optional, Tuple
11
+
11
12
  import click
13
+ import humanfriendly
12
14
  from click import Context
13
- import tinybird.context as context
14
15
 
15
- import humanfriendly
16
+ import tinybird.context as context
16
17
  from tinybird.client import DoesNotExistException, TinyB
17
18
  from tinybird.config import DEFAULT_API_HOST, FeatureFlags
18
- from tinybird.datafile import folder_push, wait_job, get_name_version, process_file
19
+ from tinybird.datafile import folder_push, get_name_version, process_file, wait_job
20
+ from tinybird.feedback_manager import FeedbackManager
19
21
  from tinybird.tb_cli_modules.cli import cli
20
22
  from tinybird.tb_cli_modules.common import coro, create_tb_client, echo_safe_humanfriendly_tables_format_smart_table
21
- from tinybird.feedback_manager import FeedbackManager
22
23
  from tinybird.tb_cli_modules.exceptions import CLIPipeException
23
24
 
24
25
 
@@ -1,4 +1,4 @@
1
- from typing import List, TypedDict, Optional
1
+ from typing import List, Optional, TypedDict
2
2
 
3
3
 
4
4
  class Region(TypedDict):
@@ -4,13 +4,14 @@
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
6
  import glob
7
- import click
8
- from tinybird.feedback_manager import FeedbackManager
9
7
  from typing import Iterable, List, Tuple
10
8
 
9
+ import click
10
+
11
+ from tinybird.feedback_manager import FeedbackManager
11
12
  from tinybird.tb_cli_modules.cli import cli
12
- from tinybird.tb_cli_modules.exceptions import CLIException
13
13
  from tinybird.tb_cli_modules.common import coro, create_tb_client, gather_with_concurrency
14
+ from tinybird.tb_cli_modules.exceptions import CLIException
14
15
  from tinybird.tb_cli_modules.tinyunit.tinyunit import (
15
16
  TestSummaryResults,
16
17
  generate_file,
@@ -1,11 +1,12 @@
1
1
  from dataclasses import dataclass
2
2
  from pathlib import Path
3
3
  from typing import Any, Dict, Iterable, List, Optional
4
+
4
5
  import click
5
- from humanfriendly.tables import format_smart_table
6
- from tinybird.client import TinyB
7
6
  import yaml
7
+ from humanfriendly.tables import format_smart_table
8
8
 
9
+ from tinybird.client import TinyB
9
10
  from tinybird.feedback_manager import FeedbackManager
10
11
  from tinybird.tb_cli_modules.common import CLIException
11
12
 
@@ -3,14 +3,13 @@
3
3
  # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
- import click
6
+ from typing import Optional
7
7
 
8
+ import click
8
9
  from click import Context
9
- from typing import Optional
10
10
 
11
- from tinybird.feedback_manager import FeedbackManager
12
11
  from tinybird.client import CanNotBeDeletedException, DoesNotExistException, TinyB
13
-
12
+ from tinybird.feedback_manager import FeedbackManager
14
13
  from tinybird.tb_cli_modules.cli import cli
15
14
  from tinybird.tb_cli_modules.common import (
16
15
  _get_config,
@@ -19,16 +18,16 @@ from tinybird.tb_cli_modules.common import (
19
18
  coro,
20
19
  create_workspace_interactive,
21
20
  create_workspace_non_interactive,
21
+ echo_safe_humanfriendly_tables_format_smart_table,
22
22
  get_config_and_hosts,
23
+ get_current_main_workspace,
23
24
  is_valid_starterkit,
24
- switch_workspace,
25
25
  print_current_workspace,
26
- echo_safe_humanfriendly_tables_format_smart_table,
27
- get_current_main_workspace,
26
+ switch_workspace,
28
27
  try_update_config_with_remote,
29
28
  )
30
- from tinybird.tb_cli_modules.exceptions import CLIWorkspaceException
31
29
  from tinybird.tb_cli_modules.config import CLIConfig
30
+ from tinybird.tb_cli_modules.exceptions import CLIWorkspaceException
32
31
 
33
32
 
34
33
  @cli.group()
@@ -3,25 +3,24 @@
3
3
  # - If it makes sense and only when strictly necessary, you can create utility functions in this file.
4
4
  # - But please, **do not** interleave utility functions and command definitions.
5
5
 
6
- import click
7
-
8
6
  from copy import deepcopy
9
- from click import Context
10
7
  from dataclasses import dataclass
11
8
  from typing import Any, Dict, Optional, Tuple
12
9
 
10
+ import click
11
+ from click import Context
12
+
13
13
  from tinybird.client import TinyB
14
14
  from tinybird.feedback_manager import FeedbackManager
15
- from tinybird.tb_cli_modules.workspace import workspace
16
15
  from tinybird.tb_cli_modules.common import (
17
16
  ask_for_user_token,
18
17
  coro,
18
+ echo_safe_humanfriendly_tables_format_smart_table,
19
19
  get_config_and_hosts,
20
20
  get_current_workspace,
21
- echo_safe_humanfriendly_tables_format_smart_table,
22
21
  )
23
-
24
22
  from tinybird.tb_cli_modules.exceptions import CLIWorkspaceMembersException
23
+ from tinybird.tb_cli_modules.workspace import workspace
25
24
 
26
25
 
27
26
  @dataclass
@@ -197,18 +197,19 @@ if you need to include a literal ``{{``, ``{%``, or ``{#`` in the output.
197
197
 
198
198
  from __future__ import absolute_import, division, print_function
199
199
 
200
+ import ast
200
201
  import datetime
201
202
  import linecache
202
203
  import os.path
203
204
  import posixpath
204
205
  import re
205
206
  import threading
206
- import ast
207
+ from typing import Union
207
208
 
208
209
  from tornado import escape
209
210
  from tornado.log import app_log
210
- from tornado.util import ObjectDict, exec_in, unicode_type, PY3
211
- from typing import Union
211
+ from tornado.util import PY3, ObjectDict, exec_in, unicode_type
212
+
212
213
  from .context import disable_template_security_validation
213
214
 
214
215
  if PY3:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 2.1.0.dev10
3
+ Version: 2.1.0.dev12
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,6 +19,16 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 2.1.0.dev12
23
+ ************
24
+
25
+ - `Changed` Regression tests select faster the requests used for the checks.
26
+
27
+ 2.1.0.dev11
28
+ ************
29
+
30
+ - `Improve` peformance when using the option `--only-change` in the `tb push` command. This was a regression introduced in the version 2.0.0
31
+
22
32
  2.1.0.dev10
23
33
  ************
24
34
 
@@ -1,5 +1,5 @@
1
- import re
2
1
  import ast
2
+ import re
3
3
 
4
4
  datetime64_patterns = [
5
5
  r"\d\d\d\d.\d\d.\d\d(T|\s)\d\d:\d\d:\d\d.\d\d\d",
@@ -1,6 +1,6 @@
1
- from collections import namedtuple
2
1
  import re
3
2
  import string
3
+ from collections import namedtuple
4
4
  from typing import Any, Dict, Iterable, List, Optional
5
5
 
6
6
 
@@ -4,16 +4,16 @@ import os
4
4
  import platform
5
5
  import re
6
6
  import sys
7
- from urllib.parse import urlencode
8
- import uuid
9
- import requests
10
- from tinybird.config import CURRENT_VERSION
11
7
  import threading
12
-
8
+ import uuid
13
9
  from copy import deepcopy
14
10
  from datetime import datetime
15
11
  from typing import Any, Callable, Dict, List, Optional, Tuple
12
+ from urllib.parse import urlencode
16
13
 
14
+ import requests
15
+
16
+ from tinybird.config import CURRENT_VERSION
17
17
 
18
18
  TELEMETRY_TIMEOUT: int = 1
19
19
  TELEMETRY_DATASOURCE: str = "tb_cli_telemetry"
@@ -1,6 +1,6 @@
1
1
  import json
2
- from json import JSONEncoder
3
2
  from collections import namedtuple
3
+ from json import JSONEncoder
4
4
  from typing import Optional
5
5
 
6
6
 
@@ -1,17 +1,17 @@
1
+ from typing import Any, Dict, Optional
2
+
1
3
  import click
2
4
  import pyperclip
3
-
4
5
  from click import Context
5
- from typing import Any, Dict, Optional
6
6
 
7
- from tinybird.feedback_manager import FeedbackManager
8
7
  from tinybird.client import TinyB
8
+ from tinybird.feedback_manager import FeedbackManager
9
+ from tinybird.tb_cli_modules.cli import cli
9
10
  from tinybird.tb_cli_modules.common import (
11
+ DoesNotExistException,
10
12
  coro,
11
13
  echo_safe_humanfriendly_tables_format_smart_table,
12
- DoesNotExistException,
13
14
  )
14
- from tinybird.tb_cli_modules.cli import cli
15
15
  from tinybird.tb_cli_modules.exceptions import CLITokenException
16
16
 
17
17