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.
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/PKG-INFO +11 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/__cli__.py +2 -2
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/ch_utils/engine.py +1 -2
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/check_pypi.py +3 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/client.py +6 -6
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/config.py +2 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/connectors.py +6 -5
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/context.py +0 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/datafile.py +102 -86
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/feedback_manager.py +1 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql_template.py +10 -9
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql_template_fmt.py +6 -8
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql_toolset.py +9 -8
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/syncasync.py +1 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli.py +7 -8
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/auth.py +4 -6
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/branch.py +11 -10
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/cicd.py +4 -4
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/cli.py +24 -29
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/common.py +32 -37
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/config.py +5 -6
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/connection.py +7 -8
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/datasource.py +6 -9
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/exceptions.py +1 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/job.py +2 -4
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/pipe.py +6 -5
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/regions.py +1 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/test.py +4 -3
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +3 -2
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/workspace.py +7 -8
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/workspace_members.py +5 -6
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tornado_template.py +4 -3
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/PKG-INFO +11 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/setup.cfg +0 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/connector_settings.py +0 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/datatypes.py +1 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/sql.py +1 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/telemetry.py +5 -5
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +1 -1
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/token.py +5 -5
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/SOURCES.txt +0 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/dependency_links.txt +0 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/entry_points.txt +0 -0
- {tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/requires.txt +0 -0
- {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.
|
|
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.
|
|
8
|
-
__revision__ = '
|
|
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
|
-
|
|
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,
|
|
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,11 +1,12 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import logging
|
|
3
|
-
|
|
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,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
|
|
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
|
|
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
|
-
|
|
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
|
|
28
|
-
|
|
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
|
|
50
|
-
import
|
|
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 .
|
|
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
|
|
63
|
+
from tinybird.tb_cli_modules.exceptions import CLIGitReleaseException, CLIPipeException
|
|
69
64
|
|
|
70
|
-
|
|
71
|
-
from
|
|
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
|
-
|
|
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
|
-
|
|
1906
|
-
AND url
|
|
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
|
-
|
|
4297
|
-
|
|
4298
|
-
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
|
|
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
|
-
|
|
4316
|
+
resource = await getattr(client, get_resource_function)(k["original_name"])
|
|
4308
4317
|
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4312
|
-
|
|
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
|
-
|
|
4315
|
-
|
|
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
|
-
|
|
4318
|
-
|
|
4326
|
+
if not f.exists():
|
|
4327
|
+
f.mkdir(parents=True)
|
|
4319
4328
|
|
|
4320
|
-
|
|
4321
|
-
|
|
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.
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
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,17 +1,18 @@
|
|
|
1
|
-
import
|
|
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
|
|
8
|
-
|
|
9
|
-
import
|
|
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 .
|
|
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
|
|
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
|
-
"
|
|
242
|
-
"
|
|
243
|
-
"
|
|
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
|
|
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.
|
|
14
|
-
import tinybird.tb_cli_modules.
|
|
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
|
-
|
|
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,
|
|
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
|
|
6
|
-
from
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
46
|
+
peek,
|
|
47
|
+
wait_job,
|
|
51
48
|
)
|
|
52
|
-
|
|
53
|
-
from tinybird.
|
|
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
|
-
|
|
8
|
+
import asyncio
|
|
9
9
|
import json
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
17
|
-
import
|
|
18
|
-
import
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
15
|
-
from
|
|
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
|
|
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
|
|
|
@@ -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
|
|
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,
|
|
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
|
|
|
@@ -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,
|
{tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
@@ -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
|
|
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
|
-
|
|
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()
|
{tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
@@ -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
|
|
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
|
|
211
|
-
|
|
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.
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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,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
|
|
|
File without changes
|
{tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{tinybird-cli-2.1.0.dev10 → tinybird-cli-2.1.0.dev12}/tinybird_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|