tinybird 0.0.1.dev285__py3-none-any.whl → 0.0.1.dev287__py3-none-any.whl

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.

Potentially problematic release.


This version of tinybird might be problematic. Click here for more details.

tinybird/sql_template.py CHANGED
@@ -1411,7 +1411,7 @@ def generate(self, **kwargs) -> Tuple[str, TemplateExecutionResults]:
1411
1411
  if TB_SECRET_IN_TEST_MODE in kwargs:
1412
1412
  template_execution_results[TB_SECRET_IN_TEST_MODE] = None
1413
1413
 
1414
- def set_tb_secret(x):
1414
+ def set_tb_secret(x, default=None):
1415
1415
  try:
1416
1416
  key = secret_template_key(x)
1417
1417
  if key in template_execution_results.template_params:
@@ -1419,8 +1419,10 @@ def generate(self, **kwargs) -> Tuple[str, TemplateExecutionResults]:
1419
1419
  return Symbol("{" + sqlescape(x) + ": String}")
1420
1420
  else:
1421
1421
  is_test_mode = TB_SECRET_IN_TEST_MODE in template_execution_results
1422
- if is_test_mode:
1422
+ if is_test_mode and default is None:
1423
1423
  return Symbol("{" + sqlescape(x) + ": String}")
1424
+ elif default is not None:
1425
+ return default
1424
1426
  else:
1425
1427
  raise SQLTemplateException(
1426
1428
  f"Cannot access secret '{x}'. Check the secret exists in the Workspace and the token has the required scope."
@@ -2266,6 +2268,18 @@ def render_sql_template(
2266
2268
  Traceback (most recent call last):
2267
2269
  ...
2268
2270
  tinybird.sql_template.SQLTemplateException: Template Syntax Error: Cannot access secret 'test'. Check the secret exists in the Workspace and the token has the required scope.
2271
+ >>> render_sql_template("select * from table where str = {{tb_secret('test', 'default_value')}}", secrets = [])
2272
+ ("select * from table where str = 'default_value'", {}, [])
2273
+ >>> render_sql_template("select * from table where str = {{tb_secret('test', 'default_value')}}", secrets = [ 'tb_secret_test' ])
2274
+ ('select * from table where str = {test: String}', {}, [])
2275
+ >>> render_sql_template("select * from table where str = {{tb_secret('test', '')}}")
2276
+ ("select * from table where str = ''", {}, [])
2277
+ >>> render_sql_template("select * from table where str = {{tb_secret('test', 'default_value')}}", test_mode=True)
2278
+ ("select * from table where str = 'default_value'", {}, [])
2279
+ >>> render_sql_template("select * from table where str = {{tb_secret('test', '')}}", test_mode=True)
2280
+ ("select * from table where str = ''", {}, [])
2281
+ >>> render_sql_template("select * from table where str = {{tb_secret('test', 'default_value')}}", secrets = [ 'tb_secret_test' ], test_mode=True)
2282
+ ('select * from table where str = {test: String}', {}, [])
2269
2283
  >>> render_sql_template("select * from table where str = {{String(test)}} and category = {{String(category, 'shirts')}} and color = {{ Int32(color)}}", test_mode=False)
2270
2284
  Traceback (most recent call last):
2271
2285
  ...
tinybird/tb/__cli__.py CHANGED
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://www.tinybird.co/docs/forward/commands'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '0.0.1.dev285'
8
- __revision__ = '0a30a28'
7
+ __version__ = '0.0.1.dev287'
8
+ __revision__ = 'f35d4e1'
@@ -35,6 +35,7 @@ from tinybird.tb.modules.agent.prompts import (
35
35
  load_custom_project_rules,
36
36
  resources_prompt,
37
37
  secrets_prompt,
38
+ service_datasources_prompt,
38
39
  )
39
40
  from tinybird.tb.modules.agent.testing_agent import TestingAgent
40
41
  from tinybird.tb.modules.agent.tools.analyze import analyze_file, analyze_url
@@ -285,6 +286,10 @@ class TinybirdAgent:
285
286
  def get_project_files(ctx: RunContext[TinybirdAgentContext]) -> str:
286
287
  return resources_prompt(self.project)
287
288
 
289
+ @self.agent.instructions
290
+ def get_service_datasources(ctx: RunContext[TinybirdAgentContext]) -> str:
291
+ return service_datasources_prompt()
292
+
288
293
  @self.agent.instructions
289
294
  def get_secrets(ctx: RunContext[TinybirdAgentContext]) -> str:
290
295
  return secrets_prompt(self.project)
@@ -293,14 +298,12 @@ class TinybirdAgent:
293
298
  self.messages.append(message)
294
299
 
295
300
  def _build_agent_deps(self, config: dict[str, Any], run_id: Optional[str] = None) -> TinybirdAgentContext:
296
- client = TinyB(token=self.token, host=self.host)
297
301
  project = self.project
298
302
  folder = self.project.folder
299
303
  local_client = get_tinybird_local_client(config, test=False, silent=False)
300
304
  test_client = get_tinybird_local_client(config, test=True, silent=True)
301
305
  return TinybirdAgentContext(
302
306
  # context does not support the whole client, so we need to pass only the functions we need
303
- explore_data=client.explore_data,
304
307
  build_project=partial(build_project, project=project, config=config),
305
308
  deploy_project=partial(deploy_project, project=project, config=config),
306
309
  deploy_check_project=partial(deploy_check_project, project=project, config=config),
@@ -10,6 +10,7 @@ from tinybird.tb.modules.agent.models import create_model
10
10
  from tinybird.tb.modules.agent.prompts import (
11
11
  explore_data_instructions,
12
12
  resources_prompt,
13
+ service_datasources_prompt,
13
14
  tone_and_style_instructions,
14
15
  )
15
16
  from tinybird.tb.modules.agent.tools.diff_resource import diff_resource
@@ -75,6 +76,10 @@ Once you finish the task, return a valid response for the task to complete.
75
76
  def get_project_files(ctx: RunContext[TinybirdAgentContext]) -> str:
76
77
  return resources_prompt(self.project)
77
78
 
79
+ @self.agent.instructions
80
+ def get_service_datasources(ctx: RunContext[TinybirdAgentContext]) -> str:
81
+ return service_datasources_prompt()
82
+
78
83
  def run(self, task: str, deps: TinybirdAgentContext, usage: Usage):
79
84
  result = self.agent.run_sync(
80
85
  task,
@@ -12,6 +12,7 @@ from tinybird.prompts import (
12
12
  pipe_instructions,
13
13
  sink_pipe_instructions,
14
14
  )
15
+ from tinybird.service_datasources import get_organization_service_datasources, get_tinybird_service_datasources
15
16
  from tinybird.tb.modules.project import Project
16
17
 
17
18
  available_commands = [
@@ -118,11 +119,6 @@ sql_instructions = """
118
119
  - When you use defined function with a paremeter inside, do NOT add quotes around the parameter:
119
120
  <invalid_defined_function_with_parameter>{% if defined('my_param') %}</invalid_defined_function_with_parameter>
120
121
  <valid_defined_function_without_parameter>{% if defined(my_param) %}</valid_defined_function_without_parameter>
121
- - Use datasource names as table names when doing SELECT statements.
122
- - Do not use pipe names as table names.
123
- - The available datasource names to use in the SQL are the ones present in the existing_resources section or the ones you will create.
124
- - Use node names as table names only when nodes are present in the same file.
125
- - Do not reference the current node name in the SQL.
126
122
  - SQL queries only accept SELECT statements with conditions, aggregations, joins, etc.
127
123
  - ONLY SELECT statements are allowed in any sql query.
128
124
  - When using functions try always ClickHouse functions first, then SQL functions.
@@ -133,7 +129,7 @@ sql_instructions = """
133
129
  datafile_instructions = """
134
130
  <datafile_instructions>
135
131
  - Endpoint files will be created under the `/endpoints` folder.
136
- - Materialized pipe files will be created under the `/materialized` folder.
132
+ - Materialized pipe files will be created under the `/materializations` folder.
137
133
  - Sink pipe files will be created under the `/sinks` folder.
138
134
  - Copy pipe files will be created under the `/copies` folder.
139
135
  - Connection files will be created under the `/connections` folder.
@@ -184,7 +180,7 @@ def resources_prompt(project: Project) -> str:
184
180
  "content": file_path.read_text(),
185
181
  }
186
182
  resources.append(resource)
187
- resources_content = format_as_xml(resources, root_tag="resources", item_tag="resource")
183
+ resources_content += format_as_xml(resources, root_tag="resources", item_tag="resource")
188
184
  else:
189
185
  resources_content += "No resources found"
190
186
 
@@ -198,7 +194,7 @@ def resources_prompt(project: Project) -> str:
198
194
  "name": file_path.stem,
199
195
  }
200
196
  fixtures.append(fixture)
201
- fixture_content = format_as_xml(fixtures, root_tag="fixtures", item_tag="fixture")
197
+ fixture_content += format_as_xml(fixtures, root_tag="fixtures", item_tag="fixture")
202
198
 
203
199
  else:
204
200
  fixture_content += "No fixture files found"
@@ -206,6 +202,50 @@ def resources_prompt(project: Project) -> str:
206
202
  return resources_content + "\n" + fixture_content
207
203
 
208
204
 
205
+ def service_datasources_prompt() -> str:
206
+ def build_content(ds: dict[str, Any]) -> str:
207
+ content = "DESCRIPTION >\n"
208
+ content += f" {ds.get('description', 'No description')}\n"
209
+
210
+ content += "SCHEMA >\n"
211
+ for column in ds.get("columns", []):
212
+ content += f" `{column.get('name', '')}` {column.get('type', '')}\n"
213
+
214
+ if engine := ds.get("engine", {}).get("engine", ""):
215
+ content += f"ENGINE {engine}\n"
216
+ if sorting_key := ds.get("engine", {}).get("sorting_key", ""):
217
+ content += f"ENGINE_SORTING_KEY {sorting_key}\n"
218
+ if partition_key := ds.get("engine", {}).get("partition_key", ""):
219
+ content += f"ENGINE_PARTITION_KEY {partition_key}\n"
220
+
221
+ return content
222
+
223
+ skip_datasources = ["tinybird.bi_stats", "tinybird.bi_stats_rt", "tinybird.releases_log", "tinybird.hook_log"]
224
+ service_datasources = [
225
+ {"name": ds["name"], "content": build_content(ds)}
226
+ for ds in get_tinybird_service_datasources()
227
+ if ds["name"] not in skip_datasources
228
+ ]
229
+ content = "# Service datasources:\n"
230
+ content += format_as_xml(
231
+ service_datasources, root_tag="workspace_service_datasources", item_tag="service_datasource"
232
+ )
233
+ content += "\n#Organization service datasources:\n"
234
+ skip_datasources = ["organization.bi_stats", "organization.bi_stats_rt"]
235
+ org_service_datasources = [
236
+ {"name": ds["name"], "content": build_content(ds)}
237
+ for ds in get_organization_service_datasources()
238
+ if ds["name"] not in skip_datasources
239
+ ]
240
+ content += format_as_xml(
241
+ org_service_datasources,
242
+ root_tag="organization_service_datasources",
243
+ item_tag="service_datasource",
244
+ )
245
+
246
+ return content
247
+
248
+
209
249
  def secrets_prompt(project: Project) -> str:
210
250
  """Generate a prompt showing available secrets from .env.local file."""
211
251
  secrets = project.get_secrets()
@@ -224,7 +264,7 @@ def secrets_prompt(project: Project) -> str:
224
264
  secrets_list.append(secret)
225
265
 
226
266
  if secrets_list:
227
- secrets_content = format_as_xml(secrets_list, root_tag="secrets", item_tag="secret")
267
+ secrets_content += format_as_xml(secrets_list, root_tag="secrets", item_tag="secret")
228
268
 
229
269
  return secrets_content
230
270
 
@@ -245,7 +285,7 @@ def tests_files_prompt(project: Project) -> str:
245
285
  "content": file_path.read_text(),
246
286
  }
247
287
  resources.append(resource)
248
- resources_content = format_as_xml(resources, root_tag="resources", item_tag="resource")
288
+ resources_content += format_as_xml(resources, root_tag="resources", item_tag="resource")
249
289
  else:
250
290
  resources_content += "No resources found"
251
291
 
@@ -260,7 +300,7 @@ def tests_files_prompt(project: Project) -> str:
260
300
  "content": file_path.read_text(),
261
301
  }
262
302
  tests.append(test)
263
- test_content = format_as_xml(tests, root_tag="tests", item_tag="test")
303
+ test_content += format_as_xml(tests, root_tag="tests", item_tag="test")
264
304
  else:
265
305
  test_content += "No test files found"
266
306
 
@@ -957,6 +997,14 @@ They can be run on a schedule, or executed on demand.
957
997
  {sql_agent_instructions}
958
998
  {sql_instructions}
959
999
 
1000
+ ## Referencing tables in SQL queries:
1001
+ The following resources can be used as tables in SQL queries:
1002
+ - Datasources (.datasource files)
1003
+ - Materialized views (.datasource files target of .pipe files with `TYPE MATERIALIZED` defined)
1004
+ - Endpoints (.pipe files with `TYPE ENDPOINT` defined)
1005
+ - Default pipes (.pipe files with no `TYPE` defined)
1006
+ - Node names present in the same .pipe file
1007
+
960
1008
  {secrets_instructions}
961
1009
 
962
1010
  {external_tables_instructions}
@@ -40,7 +40,6 @@ class TinybirdAgentContext(BaseModel):
40
40
  workspace_name: str
41
41
  thinking_animation: Any
42
42
  get_project_files: Callable[[], List[str]]
43
- explore_data: Callable[[str], str]
44
43
  build_project: Callable[..., None]
45
44
  build_project_test: Callable[..., None]
46
45
  deploy_project: Callable[..., None]
@@ -157,7 +157,7 @@ def create_workspace(
157
157
  )
158
158
 
159
159
  config = CLIConfig.get_project_config()
160
- user_token = config.get_user_token()
160
+ user_token = get_user_token(config)
161
161
  fork = False
162
162
 
163
163
  if not user_token:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tinybird
3
- Version: 0.0.1.dev285
3
+ Version: 0.0.1.dev287
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://www.tinybird.co/docs/forward/commands
6
6
  Author: Tinybird
@@ -21,6 +21,7 @@ Requires-Dist: GitPython~=3.1.32
21
21
  Requires-Dist: humanfriendly~=8.2
22
22
  Requires-Dist: plotext==5.3.2
23
23
  Requires-Dist: prompt_toolkit==3.0.48
24
+ Requires-Dist: logfire-api==4.2.0
24
25
  Requires-Dist: pydantic~=2.11.7
25
26
  Requires-Dist: pydantic-ai-slim[anthropic]~=0.5.0
26
27
  Requires-Dist: pydantic-ai-slim[retries]~=0.5.0
@@ -4,20 +4,21 @@ tinybird/datatypes.py,sha256=r4WCvspmrXTJHiPjjyOTiZyZl31FO3Ynkwq4LQsYm6E,11059
4
4
  tinybird/feedback_manager.py,sha256=XY8d83pRlq-LH7xHMApkaEebfXEWLjDzrGe1prpcTHE,69778
5
5
  tinybird/git_settings.py,sha256=Sw_8rGmribEFJ4Z_6idrVytxpFYk7ez8ei0qHULzs3E,3934
6
6
  tinybird/prompts.py,sha256=HoDv9TxPiP8v2XoGTWYxP133dK9CEbXVv4XE5IT339c,45483
7
+ tinybird/service_datasources.py,sha256=o6Az3T6OvcChR_7GXRu7sJH173KzGg1Gv-dNd0bI_vY,46085
7
8
  tinybird/sql.py,sha256=UZJLop6zA9tTPEaS-Fq7M-QyzmC5uV_tIeXZzkjnhso,48299
8
- tinybird/sql_template.py,sha256=OTsBBtGnVL4oUrEEFK19Mi5GHm-BP7v-zViXfPvYqJs,100774
9
+ tinybird/sql_template.py,sha256=kaF5pi-f2JiWSYXEF8JsU1OIxvdu2homHnw4MYjq0n8,101953
9
10
  tinybird/sql_template_fmt.py,sha256=KUHdj5rYCYm_rKKdXYSJAE9vIyXUQLB0YSZnUXHeBlY,10196
10
11
  tinybird/sql_toolset.py,sha256=19WPr4S3SR--Iw-VPgmDnLmhOZyHhTxnj3-_Yq3OgEU,19767
11
12
  tinybird/syncasync.py,sha256=IPnOx6lMbf9SNddN1eBtssg8vCLHMt76SuZ6YNYm-Yk,27761
12
13
  tinybird/tornado_template.py,sha256=jjNVDMnkYFWXflmT8KU_Ssbo5vR8KQq3EJMk5vYgXRw,41959
13
14
  tinybird/ch_utils/constants.py,sha256=v5-nkXHUhysu4i9Z4WVv0-sBbh6xSYUH5q5xHSY2xTI,4194
14
15
  tinybird/ch_utils/engine.py,sha256=4X1B-iuhdW_mxKnX_m3iCsxgP9RPVgR75g7yH1vsJ6A,40851
15
- tinybird/datafile/common.py,sha256=uRSQnSS3yv1iuJRZHgenphe-g1TEjZr04ICcl7QYcZw,105521
16
+ tinybird/datafile/common.py,sha256=euJAKSu6GA67oIcRvrrBGsGI1nZtkSWM45ikjLUlJz0,106049
16
17
  tinybird/datafile/exceptions.py,sha256=8rw2umdZjtby85QbuRKFO5ETz_eRHwUY5l7eHsy1wnI,556
17
18
  tinybird/datafile/parse_connection.py,sha256=tRyn2Rpr1TeWet5BXmMoQgaotbGdYep1qiTak_OqC5E,1825
18
19
  tinybird/datafile/parse_datasource.py,sha256=ssW8QeFSgglVFi3sDZj_HgkJiTJ2069v2JgqnH3CkDE,1825
19
20
  tinybird/datafile/parse_pipe.py,sha256=xf4m0Tw44QWJzHzAm7Z7FwUoUUtr7noMYjU1NiWnX0k,3880
20
- tinybird/tb/__cli__.py,sha256=8Avu_3xqfp0OfVOmQW7sJg4dwrhj1I6b2-pLutdFn8w,247
21
+ tinybird/tb/__cli__.py,sha256=nZRxzzjaWGhmlgqsxUdTdtORhtemm6OdxvjRGKVVdbc,247
21
22
  tinybird/tb/check_pypi.py,sha256=Gp0HkHHDFMSDL6nxKlOY51z7z1Uv-2LRexNTZSHHGmM,552
22
23
  tinybird/tb/cli.py,sha256=FdDFEIayjmsZEVsVSSvRiVYn_FHOVg_zWQzchnzfWho,1008
23
24
  tinybird/tb/client.py,sha256=IQRaInDjOwr9Fzaz3_xXc3aUGqh94tM2lew7IZbB9eM,53733
@@ -66,21 +67,21 @@ tinybird/tb/modules/test.py,sha256=O2-mS4uMU6nPi7yWPpWzshAgOlYKiGS-tkM12pXQGMI,1
66
67
  tinybird/tb/modules/test_common.py,sha256=7EpwGVs3SQTVUOM4fX3iq2fITquYvLtsEz599mN6Eqc,14525
67
68
  tinybird/tb/modules/token.py,sha256=ZhW_o7XCr90wJRhMN6816vyo_TVfnzPXyIhrhzQ7oZ0,13807
68
69
  tinybird/tb/modules/watch.py,sha256=No0bK1M1_3CYuMaIgylxf7vYFJ72lTJe3brz6xQ-mJo,8819
69
- tinybird/tb/modules/workspace.py,sha256=USsG8YEXlwf7F2PjTMCuQ2lB8ya-erbv8VywNJYq6mc,11173
70
+ tinybird/tb/modules/workspace.py,sha256=tCP1zZMwBhLRGm22TGfpSd4cHvQLAS1o_azIXv_r6uw,11172
70
71
  tinybird/tb/modules/workspace_members.py,sha256=5JdkJgfuEwbq-t6vxkBhYwgsiTDxF790wsa6Xfif9nk,8608
71
72
  tinybird/tb/modules/agent/__init__.py,sha256=i3oe3vDIWWPaicdCM0zs7D7BJ1W0k7th93ooskHAV00,54
72
- tinybird/tb/modules/agent/agent.py,sha256=38X69i7zL93I30hFFMfl6cAwHDgzIO_PP2ImGJF-UDE,35247
73
+ tinybird/tb/modules/agent/agent.py,sha256=ZoqV5kTwUVoJ4B2pJZSaooAKztEV6CBUoyeSrxLmusI,35341
73
74
  tinybird/tb/modules/agent/animations.py,sha256=4WOC5_2BracttmMCrV0H91tXfWcUzQHBUaIJc5FA7tE,3490
74
75
  tinybird/tb/modules/agent/banner.py,sha256=l6cO5Fi7lbVKp-GsBP8jf3IkjOWxg2jpAt9NBCy0WR8,4085
75
76
  tinybird/tb/modules/agent/command_agent.py,sha256=0Z08rQsir59zQAr-kkOvsKIFpIBsBSTGJJ1VgqqF5WA,3654
76
77
  tinybird/tb/modules/agent/compactor.py,sha256=BK5AxZFhrp3xWnsRnYaleiYoIWtVNc-_m650Hsopt8g,13841
77
- tinybird/tb/modules/agent/explore_agent.py,sha256=W5pp99wixVSyb66qEVwBv8rZWpJ7JgzjJ_sN4d9u4Gg,3903
78
+ tinybird/tb/modules/agent/explore_agent.py,sha256=gyD5uV5TJwV24eeQiSwhkgfNPb4mtbeH7t2qSdoc18U,4100
78
79
  tinybird/tb/modules/agent/memory.py,sha256=vBewB_64L_wHoT4tLT6UX2uxcHwSY880QZ26F9rPqXs,3793
79
80
  tinybird/tb/modules/agent/mock_agent.py,sha256=zbAZfAqdSLUtMr2VqO0erWpzjT2F1tTcuYjvHb-gvbA,8023
80
81
  tinybird/tb/modules/agent/models.py,sha256=eokO8XlY-kVJOsbqiVporGUAOCyKAXCO5xgTEK9SM6Y,2208
81
- tinybird/tb/modules/agent/prompts.py,sha256=F49-d_nRd7ai4ikizFHx0_NPGEZ46AgRtUUnxqZhPew,42164
82
+ tinybird/tb/modules/agent/prompts.py,sha256=QG_lj0QHRo8oLlJroPEGoG9_fbPN7sRA7e8jlEmmUok,44033
82
83
  tinybird/tb/modules/agent/testing_agent.py,sha256=AtwtJViH7805i7djyBgDb7SSUtDyJnw0TWJu6lBFsrg,2953
83
- tinybird/tb/modules/agent/utils.py,sha256=4jsQCAH2zBx13w20DOBrrDnQq9n2rKG9sGhBkJYiPzs,31744
84
+ tinybird/tb/modules/agent/utils.py,sha256=3v8cZCx4D8rSvziWMCnqdK54yPXd7a2DfACUkxCC5vY,31705
84
85
  tinybird/tb/modules/agent/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
86
  tinybird/tb/modules/agent/tools/analyze.py,sha256=CR5LXg4fou-zYEksqnjpJ0icvxJVoKnTctoI1NRvqCM,3873
86
87
  tinybird/tb/modules/agent/tools/append.py,sha256=6uByExBpb9rVzB0tebWyLFbfkjEPSNxIGFbZrJTaGVI,8056
@@ -118,8 +119,8 @@ tinybird/tb_cli_modules/config.py,sha256=IsgdtFRnUrkY8-Zo32lmk6O7u3bHie1QCxLwgp4
118
119
  tinybird/tb_cli_modules/exceptions.py,sha256=pmucP4kTF4irIt7dXiG-FcnI-o3mvDusPmch1L8RCWk,3367
119
120
  tinybird/tb_cli_modules/regions.py,sha256=QjsL5H6Kg-qr0aYVLrvb1STeJ5Sx_sjvbOYO0LrEGMk,166
120
121
  tinybird/tb_cli_modules/telemetry.py,sha256=Hh2Io8ZPROSunbOLuMvuIFU4TqwWPmQTqal4WS09K1A,10449
121
- tinybird-0.0.1.dev285.dist-info/METADATA,sha256=TSthFD5eA-D8BSU0WggS9U102dd9NAOg4m8COH4jClc,1811
122
- tinybird-0.0.1.dev285.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
123
- tinybird-0.0.1.dev285.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
124
- tinybird-0.0.1.dev285.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
125
- tinybird-0.0.1.dev285.dist-info/RECORD,,
122
+ tinybird-0.0.1.dev287.dist-info/METADATA,sha256=7KJm2mX3vjlPwyqJ8Ov6y8cNd-LqFewBwvDxTIXgDgg,1845
123
+ tinybird-0.0.1.dev287.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
124
+ tinybird-0.0.1.dev287.dist-info/entry_points.txt,sha256=LwdHU6TfKx4Qs7BqqtaczEZbImgU7Abe9Lp920zb_fo,43
125
+ tinybird-0.0.1.dev287.dist-info/top_level.txt,sha256=VqqqEmkAy7UNaD8-V51FCoMMWXjLUlR0IstvK7tJYVY,54
126
+ tinybird-0.0.1.dev287.dist-info/RECORD,,