tinybird-cli 3.3.1.dev5__tar.gz → 3.3.1.dev6__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-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/PKG-INFO +13 -8
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/__cli__.py +2 -2
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/datafile.py +131 -84
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/PKG-INFO +13 -8
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/setup.cfg +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/ch_utils/constants.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/ch_utils/engine.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/check_pypi.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/client.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/config.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/connector_settings.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/connectors.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/context.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/data_connectors/credentials.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/datatypes.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/feedback_manager.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/git_settings.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql_template.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql_template_fmt.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql_toolset.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/syncasync.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/auth.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/branch.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/cicd.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/cli.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/common.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/config.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/connection.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/datasource.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/exceptions.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/job.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/pipe.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/regions.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/telemetry.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/test.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/token.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/workspace.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/workspace_members.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tornado_template.py +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/SOURCES.txt +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/dependency_links.txt +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/entry_points.txt +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/requires.txt +0 -0
- {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/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: 3.3.1.
|
|
3
|
+
Version: 3.3.1.dev6
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://docs.tinybird.co/cli.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -19,13 +19,18 @@ Changelog
|
|
|
19
19
|
|
|
20
20
|
---------
|
|
21
21
|
|
|
22
|
+
3.3.1.dev6
|
|
23
|
+
************
|
|
24
|
+
|
|
25
|
+
- `Fixed` `tb deploy` to deploy the endpoints in the correct order when there are endpoints depending on other endpoints.
|
|
26
|
+
|
|
22
27
|
3.3.1.dev5
|
|
23
|
-
|
|
28
|
+
************
|
|
24
29
|
|
|
25
30
|
- `Fixed` `tb push` pipe with multiple tokens
|
|
26
31
|
|
|
27
32
|
3.3.1.dev4
|
|
28
|
-
|
|
33
|
+
************
|
|
29
34
|
|
|
30
35
|
- `Changed` script `exec_test.sh` from `tb init --git` to run retries to avoid flakiness in tests
|
|
31
36
|
|
|
@@ -35,7 +40,7 @@ Changelog
|
|
|
35
40
|
- `Fixed` `IMPORT` and `ENGINE` changes were not detected `tb deploy`
|
|
36
41
|
|
|
37
42
|
3.3.1.dev2
|
|
38
|
-
|
|
43
|
+
************
|
|
39
44
|
|
|
40
45
|
- `Changed` Update `tb release rm --oldest-rollback` to use new API
|
|
41
46
|
|
|
@@ -54,7 +59,7 @@ Changelog
|
|
|
54
59
|
- `Changed` Stop creating endpoints folder on tb init
|
|
55
60
|
- `Changed` Small refactoring of the connector credentials
|
|
56
61
|
- `Fixed` Progress bar in `tb init --git`.
|
|
57
|
-
- `Fixed` Don't do diff when there
|
|
62
|
+
- `Fixed` Don't do diff when there are no modified resources on `tb deploy`.
|
|
58
63
|
- `Fixed` Upgrade GitPython dependency to 3.1.32. That version fixes the security vulnerability `CVE-2022-24439 <https://github.com/advisories/GHSA-hcpj-qp55-gfph>`
|
|
59
64
|
- `Fixed` Homepage URL in PyPI
|
|
60
65
|
|
|
@@ -62,12 +67,12 @@ Changelog
|
|
|
62
67
|
************
|
|
63
68
|
|
|
64
69
|
- `Changed` `tb init --git` uses v3.1.0 of the CI templates (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
|
|
65
|
-
- `Changed` Allow alter
|
|
70
|
+
- `Changed` Allow alter data source with JSON paths to add DEFAULTS if the data source already has any (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
|
|
66
71
|
|
|
67
72
|
3.1.0
|
|
68
73
|
************
|
|
69
74
|
|
|
70
|
-
- `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force`
|
|
75
|
+
- `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force` to overwrite
|
|
71
76
|
- `Added` Ignore format changes on `tb deploy` by default
|
|
72
77
|
- `Changed` `tb init --git` and `tb release generate` include `set -euxo pipefail` in the generated bash scripts
|
|
73
78
|
- `Changed` `tb init --git` uses github.com/tinybirdco/ci => v3.0.0
|
|
@@ -75,7 +80,7 @@ Changelog
|
|
|
75
80
|
- `Changed` `tb release promote` automatically deletes de oldest rollback Release if `export TB_FORCE_REMOVE_OLDEST_ROLLBACK=1`
|
|
76
81
|
- `Changed` option `--node` in `tb pipe populate` to required as it is already mandatory to specify the node to populate. Now, it will provide an error message if the `--node` option is not provided.
|
|
77
82
|
- `Changed` Better error report on `tb fmt --diff`. Use it in CI to standardize Datafile formatting
|
|
78
|
-
- `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from
|
|
83
|
+
- `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from PyPI
|
|
79
84
|
- `Changed` `tb deploy` shows an example when failing because of a missing `--semver` argument
|
|
80
85
|
- `Fixed` When parsing the response of a CSV `tb sql` command, the CLI was interpreting the result as an error in some cases.
|
|
81
86
|
|
|
@@ -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__ = '3.3.1.
|
|
8
|
-
__revision__ = '
|
|
7
|
+
__version__ = '3.3.1.dev6'
|
|
8
|
+
__revision__ = '133b9e9'
|
|
@@ -3952,92 +3952,30 @@ async def folder_push(
|
|
|
3952
3952
|
|
|
3953
3953
|
async def push_files(dependency_graph: GraphDependencies, dry_run: bool = False):
|
|
3954
3954
|
endpoints_dep_map = dict()
|
|
3955
|
-
pipes_dep_map = dict()
|
|
3956
|
-
mat_dep_map = dict()
|
|
3957
3955
|
processed = set()
|
|
3958
3956
|
|
|
3959
3957
|
dependencies_graph = dependency_graph.dep_map
|
|
3960
3958
|
resources_to_run = dependency_graph.to_run
|
|
3961
3959
|
|
|
3962
|
-
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3968
|
-
dependency_graph.all_resources,
|
|
3969
|
-
dependency_graph.to_run,
|
|
3970
|
-
list(dependency_graph.dep_map.keys()),
|
|
3971
|
-
)
|
|
3972
|
-
else:
|
|
3973
|
-
# TODO: Split this into fork_downstream and normal push
|
|
3974
|
-
dependencies_graph_fork_downstream = dependencies_graph
|
|
3975
|
-
resources_to_run_fork_downstream = resources_to_run
|
|
3976
|
-
|
|
3977
|
-
# For the new resources using forkdownstream or tb push, we will push them following
|
|
3978
|
-
# First, datasources. Then, endpoints depending of these datasources. Finally, the pipes
|
|
3979
|
-
groups = [group for group in toposort(dependencies_graph)]
|
|
3980
|
-
for group in groups:
|
|
3981
|
-
for name in group:
|
|
3982
|
-
if (
|
|
3983
|
-
not is_new(name, changed, dependencies_graph, dependencies_graph_fork_downstream)
|
|
3984
|
-
or not fork_downstream
|
|
3985
|
-
):
|
|
3986
|
-
continue
|
|
3987
|
-
await push(
|
|
3988
|
-
name,
|
|
3989
|
-
resources_to_run,
|
|
3990
|
-
resource_versions,
|
|
3991
|
-
latest_datasource_versions,
|
|
3992
|
-
dry_run,
|
|
3993
|
-
fork_downstream,
|
|
3994
|
-
fork,
|
|
3995
|
-
)
|
|
3996
|
-
processed.add(name)
|
|
3997
|
-
|
|
3998
|
-
groups = [group for group in toposort(dependencies_graph_fork_downstream)]
|
|
3999
|
-
for group in groups:
|
|
4000
|
-
for name in group:
|
|
4001
|
-
if name in processed:
|
|
4002
|
-
continue
|
|
4003
|
-
# https://gitlab.com/tinybird/analytics/-/merge_requests/6737
|
|
4004
|
-
if is_endpoint_with_no_dependencies(
|
|
4005
|
-
resources_to_run_fork_downstream.get(name, {}),
|
|
4006
|
-
dependencies_graph_fork_downstream,
|
|
4007
|
-
resources_to_run_fork_downstream,
|
|
4008
|
-
):
|
|
4009
|
-
endpoints_dep_map[name] = dependencies_graph_fork_downstream[name]
|
|
4010
|
-
continue
|
|
4011
|
-
if (
|
|
4012
|
-
fork_downstream
|
|
4013
|
-
and not is_datasource(resources_to_run_fork_downstream.get(name))
|
|
4014
|
-
and name in dependencies_graph_fork_downstream
|
|
4015
|
-
):
|
|
4016
|
-
if is_materialized(resources_to_run_fork_downstream.get(name)):
|
|
4017
|
-
mat_dep_map[name] = dependencies_graph_fork_downstream[name]
|
|
3960
|
+
if not fork_downstream:
|
|
3961
|
+
# First, we will deploy the all the resources following the dependency graph except for the endpoints
|
|
3962
|
+
groups = [group for group in toposort(dependencies_graph)]
|
|
3963
|
+
for group in groups:
|
|
3964
|
+
for name in group:
|
|
3965
|
+
if name in processed:
|
|
4018
3966
|
continue
|
|
4019
|
-
|
|
4020
|
-
|
|
3967
|
+
|
|
3968
|
+
if is_endpoint_with_no_dependencies(
|
|
3969
|
+
resources_to_run.get(name, {}),
|
|
3970
|
+
dependencies_graph,
|
|
3971
|
+
resources_to_run,
|
|
3972
|
+
):
|
|
3973
|
+
endpoints_dep_map[name] = dependencies_graph[name]
|
|
4021
3974
|
continue
|
|
4022
|
-
await push(
|
|
4023
|
-
name,
|
|
4024
|
-
resources_to_run_fork_downstream,
|
|
4025
|
-
resource_versions,
|
|
4026
|
-
latest_datasource_versions,
|
|
4027
|
-
dry_run,
|
|
4028
|
-
fork_downstream,
|
|
4029
|
-
fork,
|
|
4030
|
-
)
|
|
4031
|
-
processed.add(name)
|
|
4032
3975
|
|
|
4033
|
-
# push endpoints with no dependencies or dependencies with other endpoints
|
|
4034
|
-
groups = [group for group in toposort(endpoints_dep_map)]
|
|
4035
|
-
for group in groups:
|
|
4036
|
-
for name in group:
|
|
4037
|
-
if name not in processed and not is_materialized(resources_to_run_fork_downstream[name]):
|
|
4038
3976
|
await push(
|
|
4039
3977
|
name,
|
|
4040
|
-
|
|
3978
|
+
resources_to_run,
|
|
4041
3979
|
resource_versions,
|
|
4042
3980
|
latest_datasource_versions,
|
|
4043
3981
|
dry_run,
|
|
@@ -4046,26 +3984,56 @@ async def folder_push(
|
|
|
4046
3984
|
)
|
|
4047
3985
|
processed.add(name)
|
|
4048
3986
|
|
|
4049
|
-
|
|
4050
|
-
|
|
4051
|
-
groups = [group for group in toposort(pipes_dep_map)]
|
|
3987
|
+
# Then, we will deploy the endpoints that are on the dependency graph
|
|
3988
|
+
groups = [group for group in toposort(endpoints_dep_map)]
|
|
4052
3989
|
for group in groups:
|
|
4053
3990
|
for name in group:
|
|
4054
|
-
if name not in processed
|
|
3991
|
+
if name not in processed:
|
|
4055
3992
|
await push(
|
|
4056
3993
|
name,
|
|
4057
|
-
|
|
3994
|
+
resources_to_run,
|
|
4058
3995
|
resource_versions,
|
|
4059
3996
|
latest_datasource_versions,
|
|
4060
3997
|
dry_run,
|
|
4061
3998
|
fork_downstream,
|
|
3999
|
+
fork,
|
|
4062
4000
|
)
|
|
4063
4001
|
processed.add(name)
|
|
4002
|
+
else:
|
|
4003
|
+
# This will generate the graph from right to left and will fill the gaps of the dependencies
|
|
4004
|
+
# If we have a graph like this:
|
|
4005
|
+
# A -> B -> C
|
|
4006
|
+
# If we only modify A, the normal dependencies graph will only contain a node like _{A => B}
|
|
4007
|
+
# But we need a graph that contains A, B and C and the dependencies between them to deploy them in the right order
|
|
4008
|
+
dependencies_graph_fork_downstream, resources_to_run_fork_downstream = generate_forkdownstream_graph(
|
|
4009
|
+
dependency_graph.all_dep_map,
|
|
4010
|
+
dependency_graph.all_resources,
|
|
4011
|
+
resources_to_run,
|
|
4012
|
+
list(dependency_graph.dep_map.keys()),
|
|
4013
|
+
)
|
|
4064
4014
|
|
|
4065
|
-
|
|
4015
|
+
# First, we will deploy the datasources that have been changed
|
|
4016
|
+
groups = [group for group in toposort(dependencies_graph_fork_downstream)]
|
|
4066
4017
|
for group in groups:
|
|
4067
4018
|
for name in group:
|
|
4068
|
-
if name
|
|
4019
|
+
if name in processed or not is_datasource(resources_to_run_fork_downstream[name]):
|
|
4020
|
+
continue
|
|
4021
|
+
|
|
4022
|
+
# If the resource is new, we will use the normal resource information to deploy it
|
|
4023
|
+
# This is mostly used for datasources with connections.
|
|
4024
|
+
# At the moment, `resources_to_run_fork_downstream` is generated by `all_resources` and this is generated using the parameter `skip_connectors=True`
|
|
4025
|
+
# TODO: Should the `resources_to_run_fork_downstream` be generated using the `skip_connectors` parameter?
|
|
4026
|
+
if is_new(name, changed, dependencies_graph_fork_downstream, dependencies_graph_fork_downstream):
|
|
4027
|
+
await push(
|
|
4028
|
+
name,
|
|
4029
|
+
resources_to_run,
|
|
4030
|
+
resource_versions,
|
|
4031
|
+
latest_datasource_versions,
|
|
4032
|
+
dry_run,
|
|
4033
|
+
fork_downstream,
|
|
4034
|
+
fork,
|
|
4035
|
+
)
|
|
4036
|
+
else:
|
|
4069
4037
|
await push(
|
|
4070
4038
|
name,
|
|
4071
4039
|
resources_to_run_fork_downstream,
|
|
@@ -4073,8 +4041,86 @@ async def folder_push(
|
|
|
4073
4041
|
latest_datasource_versions,
|
|
4074
4042
|
dry_run,
|
|
4075
4043
|
fork_downstream,
|
|
4044
|
+
fork,
|
|
4076
4045
|
)
|
|
4077
|
-
|
|
4046
|
+
processed.add(name)
|
|
4047
|
+
|
|
4048
|
+
# Now, we will create a map of all the endpoints and there dependencies
|
|
4049
|
+
# We are using the forkdownstream graph to get the dependencies of the endpoints as the normal dependencies graph only contains the resources that are going to be deployed
|
|
4050
|
+
# But does not include the missing gaps
|
|
4051
|
+
# If we have ENDPOINT_A ----> MV_PIPE_B -----> DATASOURCE_B ------> ENDPOINT_C
|
|
4052
|
+
# Where endpoint A is being used in the MV_PIPE_B, if we only modify the endpoint A
|
|
4053
|
+
# The dependencies graph will only contain the endpoint A and the MV_PIPE_B, but not the DATASOURCE_B and the ENDPOINT_C
|
|
4054
|
+
groups = [group for group in toposort(dependencies_graph_fork_downstream)]
|
|
4055
|
+
for group in groups:
|
|
4056
|
+
for name in group:
|
|
4057
|
+
if name in processed or not is_endpoint(resources_to_run_fork_downstream[name]):
|
|
4058
|
+
continue
|
|
4059
|
+
|
|
4060
|
+
endpoints_dep_map[name] = dependencies_graph_fork_downstream[name]
|
|
4061
|
+
|
|
4062
|
+
# Now that we have the dependencies of the endpoints, we need to check that the resources has not been deployed yet and only care about the endpoints that depend on endpoints
|
|
4063
|
+
groups = [group for group in toposort(endpoints_dep_map)]
|
|
4064
|
+
|
|
4065
|
+
# As we have used the forkdownstream graph to get the dependencies of the endpoints, we have all the dependencies of the endpoints
|
|
4066
|
+
# But we need to deploy the endpoints and the dependencies of the endpoints from left to right
|
|
4067
|
+
# So we need to reverse the groups
|
|
4068
|
+
groups.reverse()
|
|
4069
|
+
for group in groups:
|
|
4070
|
+
for name in group:
|
|
4071
|
+
if name in processed or not is_endpoint(resources_to_run_fork_downstream[name]):
|
|
4072
|
+
continue
|
|
4073
|
+
|
|
4074
|
+
await push(
|
|
4075
|
+
name,
|
|
4076
|
+
resources_to_run_fork_downstream,
|
|
4077
|
+
resource_versions,
|
|
4078
|
+
latest_datasource_versions,
|
|
4079
|
+
dry_run,
|
|
4080
|
+
fork_downstream,
|
|
4081
|
+
fork,
|
|
4082
|
+
)
|
|
4083
|
+
processed.add(name)
|
|
4084
|
+
|
|
4085
|
+
# Now we should have the endpoints and datasources deployed, we can deploy the rest of the pipes (copy & sinks)
|
|
4086
|
+
# We need to rely on the forkdownstream graph as it contains all the modified pipes as well as the dependencies of the pipes
|
|
4087
|
+
# In this case, we don't need to generate a new graph as we did for the endpoints as the pipes are not going to be used as dependencies and the datasources are already deployed
|
|
4088
|
+
groups = [group for group in toposort(dependencies_graph_fork_downstream)]
|
|
4089
|
+
for group in groups:
|
|
4090
|
+
for name in group:
|
|
4091
|
+
if name in processed or is_materialized(resources_to_run_fork_downstream.get(name)):
|
|
4092
|
+
continue
|
|
4093
|
+
|
|
4094
|
+
await push(
|
|
4095
|
+
name,
|
|
4096
|
+
resources_to_run_fork_downstream,
|
|
4097
|
+
resource_versions,
|
|
4098
|
+
latest_datasource_versions,
|
|
4099
|
+
dry_run,
|
|
4100
|
+
fork_downstream,
|
|
4101
|
+
fork,
|
|
4102
|
+
)
|
|
4103
|
+
processed.add(name)
|
|
4104
|
+
|
|
4105
|
+
# Finally, we need to deploy the materialized views from right to left.
|
|
4106
|
+
# We need to rely on the forkdownstream graph as it contains all the modified materialized views as well as the dependencies of the materialized views
|
|
4107
|
+
# In this case, we don't need to generate a new graph as we did for the endpoints as the pipes are not going to be used as dependencies and the datasources are already deployed
|
|
4108
|
+
groups = [group for group in toposort(dependencies_graph_fork_downstream)]
|
|
4109
|
+
for group in groups:
|
|
4110
|
+
for name in group:
|
|
4111
|
+
if name in processed or not is_materialized(resources_to_run_fork_downstream.get(name)):
|
|
4112
|
+
continue
|
|
4113
|
+
|
|
4114
|
+
await push(
|
|
4115
|
+
name,
|
|
4116
|
+
resources_to_run_fork_downstream,
|
|
4117
|
+
resource_versions,
|
|
4118
|
+
latest_datasource_versions,
|
|
4119
|
+
dry_run,
|
|
4120
|
+
fork_downstream,
|
|
4121
|
+
fork,
|
|
4122
|
+
)
|
|
4123
|
+
processed.add(name)
|
|
4078
4124
|
|
|
4079
4125
|
if deployment.is_git_release:
|
|
4080
4126
|
deployment.deploying_dry_run()
|
|
@@ -4856,6 +4902,7 @@ def is_endpoint(resource: Optional[Dict[str, Any]]) -> bool:
|
|
|
4856
4902
|
def is_materialized(resource: Optional[Dict[str, Any]]) -> bool:
|
|
4857
4903
|
if not resource:
|
|
4858
4904
|
return False
|
|
4905
|
+
|
|
4859
4906
|
is_materialized = any(
|
|
4860
4907
|
[node.get("params", {}).get("type", None) == "materialized" for node in resource.get("nodes", []) or []]
|
|
4861
4908
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tinybird-cli
|
|
3
|
-
Version: 3.3.1.
|
|
3
|
+
Version: 3.3.1.dev6
|
|
4
4
|
Summary: Tinybird Command Line Tool
|
|
5
5
|
Home-page: https://docs.tinybird.co/cli.html
|
|
6
6
|
Author: Tinybird
|
|
@@ -19,13 +19,18 @@ Changelog
|
|
|
19
19
|
|
|
20
20
|
---------
|
|
21
21
|
|
|
22
|
+
3.3.1.dev6
|
|
23
|
+
************
|
|
24
|
+
|
|
25
|
+
- `Fixed` `tb deploy` to deploy the endpoints in the correct order when there are endpoints depending on other endpoints.
|
|
26
|
+
|
|
22
27
|
3.3.1.dev5
|
|
23
|
-
|
|
28
|
+
************
|
|
24
29
|
|
|
25
30
|
- `Fixed` `tb push` pipe with multiple tokens
|
|
26
31
|
|
|
27
32
|
3.3.1.dev4
|
|
28
|
-
|
|
33
|
+
************
|
|
29
34
|
|
|
30
35
|
- `Changed` script `exec_test.sh` from `tb init --git` to run retries to avoid flakiness in tests
|
|
31
36
|
|
|
@@ -35,7 +40,7 @@ Changelog
|
|
|
35
40
|
- `Fixed` `IMPORT` and `ENGINE` changes were not detected `tb deploy`
|
|
36
41
|
|
|
37
42
|
3.3.1.dev2
|
|
38
|
-
|
|
43
|
+
************
|
|
39
44
|
|
|
40
45
|
- `Changed` Update `tb release rm --oldest-rollback` to use new API
|
|
41
46
|
|
|
@@ -54,7 +59,7 @@ Changelog
|
|
|
54
59
|
- `Changed` Stop creating endpoints folder on tb init
|
|
55
60
|
- `Changed` Small refactoring of the connector credentials
|
|
56
61
|
- `Fixed` Progress bar in `tb init --git`.
|
|
57
|
-
- `Fixed` Don't do diff when there
|
|
62
|
+
- `Fixed` Don't do diff when there are no modified resources on `tb deploy`.
|
|
58
63
|
- `Fixed` Upgrade GitPython dependency to 3.1.32. That version fixes the security vulnerability `CVE-2022-24439 <https://github.com/advisories/GHSA-hcpj-qp55-gfph>`
|
|
59
64
|
- `Fixed` Homepage URL in PyPI
|
|
60
65
|
|
|
@@ -62,12 +67,12 @@ Changelog
|
|
|
62
67
|
************
|
|
63
68
|
|
|
64
69
|
- `Changed` `tb init --git` uses v3.1.0 of the CI templates (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
|
|
65
|
-
- `Changed` Allow alter
|
|
70
|
+
- `Changed` Allow alter data source with JSON paths to add DEFAULTS if the data source already has any (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
|
|
66
71
|
|
|
67
72
|
3.1.0
|
|
68
73
|
************
|
|
69
74
|
|
|
70
|
-
- `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force`
|
|
75
|
+
- `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force` to overwrite
|
|
71
76
|
- `Added` Ignore format changes on `tb deploy` by default
|
|
72
77
|
- `Changed` `tb init --git` and `tb release generate` include `set -euxo pipefail` in the generated bash scripts
|
|
73
78
|
- `Changed` `tb init --git` uses github.com/tinybirdco/ci => v3.0.0
|
|
@@ -75,7 +80,7 @@ Changelog
|
|
|
75
80
|
- `Changed` `tb release promote` automatically deletes de oldest rollback Release if `export TB_FORCE_REMOVE_OLDEST_ROLLBACK=1`
|
|
76
81
|
- `Changed` option `--node` in `tb pipe populate` to required as it is already mandatory to specify the node to populate. Now, it will provide an error message if the `--node` option is not provided.
|
|
77
82
|
- `Changed` Better error report on `tb fmt --diff`. Use it in CI to standardize Datafile formatting
|
|
78
|
-
- `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from
|
|
83
|
+
- `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from PyPI
|
|
79
84
|
- `Changed` `tb deploy` shows an example when failing because of a missing `--semver` argument
|
|
80
85
|
- `Fixed` When parsing the response of a CSV `tb sql` command, the CLI was interpreting the result as an error in some cases.
|
|
81
86
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit.py
RENAMED
|
File without changes
|
{tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/workspace_members.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|