sqlmesh 0.205.1.dev12__py3-none-any.whl → 0.205.1.dev14__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.
sqlmesh/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.205.1.dev12'
21
- __version_tuple__ = version_tuple = (0, 205, 1, 'dev12')
20
+ __version__ = version = '0.205.1.dev14'
21
+ __version_tuple__ = version_tuple = (0, 205, 1, 'dev14')
sqlmesh/cli/main.py CHANGED
@@ -107,6 +107,14 @@ def cli(
107
107
  if "--help" in sys.argv:
108
108
  return
109
109
 
110
+ configure_logging(
111
+ debug,
112
+ log_to_stdout,
113
+ log_file_dir=log_file_dir,
114
+ ignore_warnings=ignore_warnings,
115
+ )
116
+ configure_console(ignore_warnings=ignore_warnings)
117
+
110
118
  load = True
111
119
 
112
120
  if len(paths) == 1:
@@ -117,14 +125,6 @@ def cli(
117
125
  if ctx.invoked_subcommand in SKIP_LOAD_COMMANDS:
118
126
  load = False
119
127
 
120
- configure_logging(
121
- debug,
122
- log_to_stdout,
123
- log_file_dir=log_file_dir,
124
- ignore_warnings=ignore_warnings,
125
- )
126
- configure_console(ignore_warnings=ignore_warnings)
127
-
128
128
  configs = load_configs(config, Context.CONFIG_TYPE, paths, dotenv_path=dotenv)
129
129
  log_limit = list(configs.values())[0].log_limit
130
130
 
@@ -884,6 +884,13 @@ def info(obj: Context, skip_connection: bool, verbose: int) -> None:
884
884
  @cli_analytics
885
885
  def ui(ctx: click.Context, host: str, port: int, mode: str) -> None:
886
886
  """Start a browser-based SQLMesh UI."""
887
+ from sqlmesh.core.console import get_console
888
+
889
+ get_console().log_warning(
890
+ "The UI is deprecated and will be removed in a future version. Please use the SQLMesh VSCode extension instead. "
891
+ "Learn more at https://sqlmesh.readthedocs.io/en/stable/guides/vscode/"
892
+ )
893
+
887
894
  try:
888
895
  import uvicorn
889
896
  except ModuleNotFoundError as e:
@@ -57,28 +57,17 @@ def create_external_models_file(
57
57
  external_model_fqns -= existing_model_fqns
58
58
 
59
59
  with ThreadPoolExecutor(max_workers=max_workers) as pool:
60
-
61
- def _get_columns(table: str) -> t.Optional[t.Dict[str, t.Any]]:
62
- try:
63
- return adapter.columns(table, include_pseudo_columns=True)
64
- except Exception as e:
65
- msg = f"Unable to get schema for '{table}': '{e}'."
66
- if strict:
67
- raise SQLMeshError(msg) from e
68
- get_console().log_warning(msg)
69
- return None
70
-
71
60
  gateway_part = {"gateway": gateway} if gateway else {}
72
61
 
73
62
  schemas = [
74
63
  {
75
64
  "name": exp.to_table(table).sql(dialect=dialect),
76
- "columns": {c: dtype.sql(dialect=dialect) for c, dtype in columns.items()},
65
+ "columns": columns,
77
66
  **gateway_part,
78
67
  }
79
68
  for table, columns in sorted(
80
69
  pool.map(
81
- lambda table: (table, _get_columns(table)),
70
+ lambda table: (table, get_columns(adapter, dialect, table, strict)),
82
71
  external_model_fqns,
83
72
  )
84
73
  )
@@ -94,3 +83,20 @@ def create_external_models_file(
94
83
 
95
84
  with open(path, "w", encoding="utf-8") as file:
96
85
  yaml.dump(entries_to_keep + schemas, file)
86
+
87
+
88
+ def get_columns(
89
+ adapter: EngineAdapter, dialect: DialectType, table: str, strict: bool
90
+ ) -> t.Optional[t.Dict[str, t.Any]]:
91
+ """
92
+ Return the column and their types in a dictionary
93
+ """
94
+ try:
95
+ columns = adapter.columns(table, include_pseudo_columns=True)
96
+ return {c: dtype.sql(dialect=dialect) for c, dtype in columns.items()}
97
+ except Exception as e:
98
+ msg = f"Unable to get schema for '{table}': '{e}'."
99
+ if strict:
100
+ raise SQLMeshError(msg) from e
101
+ get_console().log_warning(msg)
102
+ return None
@@ -0,0 +1 @@
1
+ EXTERNAL_MODEL_UPDATE_COLUMNS = "sqlmesh.external_model_update_columns"
sqlmesh/lsp/context.py CHANGED
@@ -1,16 +1,21 @@
1
1
  from dataclasses import dataclass
2
2
  from pathlib import Path
3
+ from pygls.server import LanguageServer
3
4
  from sqlmesh.core.context import Context
4
5
  import typing as t
5
-
6
6
  from sqlmesh.core.linter.rule import Range
7
- from sqlmesh.core.model.definition import SqlModel
7
+ from sqlmesh.core.model.definition import SqlModel, ExternalModel
8
8
  from sqlmesh.core.linter.definition import AnnotatedRuleViolation
9
+ from sqlmesh.core.schema_loader import get_columns
10
+ from sqlmesh.lsp.commands import EXTERNAL_MODEL_UPDATE_COLUMNS
9
11
  from sqlmesh.lsp.custom import ModelForRendering, TestEntry, RunTestResponse
10
12
  from sqlmesh.lsp.custom import AllModelsResponse, RenderModelEntry
11
13
  from sqlmesh.lsp.tests_ranges import get_test_ranges
14
+ from sqlmesh.lsp.helpers import to_lsp_range
12
15
  from sqlmesh.lsp.uri import URI
13
16
  from lsprotocol import types
17
+ from sqlmesh.utils import yaml
18
+ from sqlmesh.utils.lineage import get_yaml_model_name_ranges
14
19
 
15
20
 
16
21
  @dataclass
@@ -298,6 +303,36 @@ class LSPContext:
298
303
 
299
304
  return code_actions if code_actions else None
300
305
 
306
+ def get_code_lenses(self, uri: URI) -> t.Optional[t.List[types.CodeLens]]:
307
+ models_in_file = self.map.get(uri.to_path())
308
+ if isinstance(models_in_file, ModelTarget):
309
+ models = [self.context.get_model(model) for model in models_in_file.names]
310
+ if any(isinstance(model, ExternalModel) for model in models):
311
+ code_lenses = self._get_external_model_code_lenses(uri)
312
+ if code_lenses:
313
+ return code_lenses
314
+
315
+ return None
316
+
317
+ def _get_external_model_code_lenses(self, uri: URI) -> t.List[types.CodeLens]:
318
+ """Get code lenses for external models YAML files."""
319
+ ranges = get_yaml_model_name_ranges(uri.to_path())
320
+ if ranges is None:
321
+ return []
322
+ return [
323
+ types.CodeLens(
324
+ range=to_lsp_range(range),
325
+ command=types.Command(
326
+ title="Update Columns",
327
+ command=EXTERNAL_MODEL_UPDATE_COLUMNS,
328
+ arguments=[
329
+ name,
330
+ ],
331
+ ),
332
+ )
333
+ for name, range in ranges.items()
334
+ ]
335
+
301
336
  def list_of_models_for_rendering(self) -> t.List[ModelForRendering]:
302
337
  """Get a list of models for rendering.
303
338
 
@@ -399,3 +434,74 @@ class LSPContext:
399
434
  code=diagnostic.rule.name,
400
435
  code_description=types.CodeDescription(href=rule_uri),
401
436
  )
437
+
438
+ def update_external_model_columns(self, ls: LanguageServer, uri: URI, model_name: str) -> bool:
439
+ """
440
+ Update the columns for an external model in the YAML file. Returns True if changed, False if didn't because
441
+ of the columns already being up to date.
442
+
443
+ In this case, the model name is the name of the external model as is defined in the YAML file, not any other version of it.
444
+
445
+ Errors still throw exceptions to be handled by the caller.
446
+ """
447
+ models = yaml.load(uri.to_path())
448
+ if not isinstance(models, list):
449
+ raise ValueError(
450
+ f"Expected a list of models in {uri.to_path()}, but got {type(models).__name__}"
451
+ )
452
+
453
+ existing_model = next((model for model in models if model.get("name") == model_name), None)
454
+ if existing_model is None:
455
+ raise ValueError(f"Could not find model {model_name} in {uri.to_path()}")
456
+
457
+ existing_model_columns = existing_model.get("columns")
458
+
459
+ # Get the adapter and fetch columns
460
+ adapter = self.context.engine_adapter
461
+ # Get columns for the model
462
+ new_columns = get_columns(
463
+ adapter=adapter,
464
+ dialect=self.context.config.model_defaults.dialect,
465
+ table=model_name,
466
+ strict=True,
467
+ )
468
+ # Compare existing columns and matching types and if they are the same, do not update
469
+ if existing_model_columns is not None:
470
+ if existing_model_columns == new_columns:
471
+ return False
472
+
473
+ # Model index to update
474
+ model_index = next(
475
+ (i for i, model in enumerate(models) if model.get("name") == model_name), None
476
+ )
477
+ if model_index is None:
478
+ raise ValueError(f"Could not find model {model_name} in {uri.to_path()}")
479
+
480
+ # Get end of the file to set the edit range
481
+ with open(uri.to_path(), "r", encoding="utf-8") as file:
482
+ read_file = file.read()
483
+
484
+ end_line = read_file.count("\n")
485
+ end_character = len(read_file.splitlines()[-1]) if end_line > 0 else 0
486
+
487
+ models[model_index]["columns"] = new_columns
488
+ edit = types.TextDocumentEdit(
489
+ text_document=types.OptionalVersionedTextDocumentIdentifier(
490
+ uri=uri.value,
491
+ version=None,
492
+ ),
493
+ edits=[
494
+ types.TextEdit(
495
+ range=types.Range(
496
+ start=types.Position(line=0, character=0),
497
+ end=types.Position(
498
+ line=end_line,
499
+ character=end_character,
500
+ ),
501
+ ),
502
+ new_text=yaml.dump(models),
503
+ )
504
+ ],
505
+ )
506
+ ls.apply_edit(types.WorkspaceEdit(document_changes=[edit]))
507
+ return True
sqlmesh/lsp/main.py CHANGED
@@ -24,6 +24,7 @@ from sqlmesh.lsp.api import (
24
24
  ApiResponseGetModels,
25
25
  )
26
26
 
27
+ from sqlmesh.lsp.commands import EXTERNAL_MODEL_UPDATE_COLUMNS
27
28
  from sqlmesh.lsp.completions import get_sql_completions
28
29
  from sqlmesh.lsp.context import (
29
30
  LSPContext,
@@ -368,6 +369,44 @@ class SQLMeshLanguageServer:
368
369
 
369
370
  self.server.feature(name)(create_function_call(method))
370
371
 
372
+ @self.server.command(EXTERNAL_MODEL_UPDATE_COLUMNS)
373
+ def command_external_models_update_columns(ls: LanguageServer, raw: t.Any) -> None:
374
+ try:
375
+ if not isinstance(raw, list):
376
+ raise ValueError("Invalid command parameters")
377
+ if len(raw) != 1:
378
+ raise ValueError("Command expects exactly one parameter")
379
+ model_name = raw[0]
380
+ if not isinstance(model_name, str):
381
+ raise ValueError("Command parameter must be a string")
382
+
383
+ context = self._context_get_or_load()
384
+ if not isinstance(context, LSPContext):
385
+ raise ValueError("Context is not loaded or invalid")
386
+ model = context.context.get_model(model_name)
387
+ if model is None:
388
+ raise ValueError(f"External model '{model_name}' not found")
389
+ if model._path is None:
390
+ raise ValueError(f"External model '{model_name}' does not have a file path")
391
+ uri = URI.from_path(model._path)
392
+ updated = context.update_external_model_columns(
393
+ ls=ls,
394
+ uri=uri,
395
+ model_name=model_name,
396
+ )
397
+ if updated:
398
+ ls.show_message(
399
+ f"Updated columns for '{model_name}'",
400
+ types.MessageType.Info,
401
+ )
402
+ else:
403
+ ls.show_message(
404
+ f"Columns for '{model_name}' are already up to date",
405
+ )
406
+ except Exception as e:
407
+ ls.show_message(f"Error executing command: {e}", types.MessageType.Error)
408
+ return None
409
+
371
410
  @self.server.feature(types.INITIALIZE)
372
411
  def initialize(ls: LanguageServer, params: types.InitializeParams) -> None:
373
412
  """Initialize the server when the client connects."""
@@ -750,6 +789,17 @@ class SQLMeshLanguageServer:
750
789
  ls.log_trace(f"Error getting code actions: {e}")
751
790
  return None
752
791
 
792
+ @self.server.feature(types.TEXT_DOCUMENT_CODE_LENS)
793
+ def code_lens(ls: LanguageServer, params: types.CodeLensParams) -> t.List[types.CodeLens]:
794
+ try:
795
+ uri = URI(params.text_document.uri)
796
+ context = self._context_get_or_load(uri)
797
+ code_lenses = context.get_code_lenses(uri)
798
+ return code_lenses if code_lenses else []
799
+ except Exception as e:
800
+ ls.log_trace(f"Error getting code lenses: {e}")
801
+ return []
802
+
753
803
  @self.server.feature(
754
804
  types.TEXT_DOCUMENT_COMPLETION,
755
805
  types.CompletionOptions(trigger_characters=["@"]), # advertise "@" for macros
sqlmesh/utils/lineage.py CHANGED
@@ -387,6 +387,22 @@ def _get_yaml_model_range(path: Path, model_name: str) -> t.Optional[Range]:
387
387
  Returns:
388
388
  The Range of the model block in the YAML file, or None if not found
389
389
  """
390
+ model_name_ranges = get_yaml_model_name_ranges(path)
391
+ if model_name_ranges is None:
392
+ return None
393
+ return model_name_ranges.get(model_name, None)
394
+
395
+
396
+ def get_yaml_model_name_ranges(path: Path) -> t.Optional[t.Dict[str, Range]]:
397
+ """
398
+ Get the ranges of all model names in a YAML file.
399
+
400
+ Args:
401
+ path: Path to the YAML file
402
+
403
+ Returns:
404
+ A dictionary mapping model names to their ranges in the YAML file.
405
+ """
390
406
  yaml = YAML()
391
407
  with path.open("r", encoding="utf-8") as f:
392
408
  data = yaml.load(f)
@@ -394,11 +410,15 @@ def _get_yaml_model_range(path: Path, model_name: str) -> t.Optional[Range]:
394
410
  if not isinstance(data, list):
395
411
  return None
396
412
 
413
+ model_name_ranges = {}
397
414
  for item in data:
398
- if isinstance(item, dict) and item.get("name") == model_name:
399
- # Get size of block by taking the earliest line/col in the items block and the last line/col of the block
415
+ if isinstance(item, dict):
400
416
  position_data = item.lc.data["name"] # type: ignore
401
417
  start = Position(line=position_data[2], character=position_data[3])
402
418
  end = Position(line=position_data[2], character=position_data[3] + len(item["name"]))
403
- return Range(start=start, end=end)
404
- return None
419
+ name = item.get("name")
420
+ if not name:
421
+ continue
422
+ model_name_ranges[name] = Range(start=start, end=end)
423
+
424
+ return model_name_ranges
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.205.1.dev12
3
+ Version: 0.205.1.dev14
4
4
  Summary: Next-generation data transformation framework
5
5
  Author-email: "TobikoData Inc." <engineering@tobikodata.com>
6
6
  License: Apache License
@@ -1,12 +1,12 @@
1
1
  sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
2
- sqlmesh/_version.py,sha256=WTw_W2Esc4P3kIzSIPfK9wOHvtYNAqkh8yWnjotys94,530
2
+ sqlmesh/_version.py,sha256=VkZDSB5PrX79GeReENUXKOq9WI4eAEyfAwpKMP4m_VI,530
3
3
  sqlmesh/magics.py,sha256=bEzYqXHcM0P3CjyUZ1O9arlmXAdLAhoglKbQ29fD9AE,41842
4
4
  sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  sqlmesh/cicd/bot.py,sha256=2zlbn-DXkqQzr3lA0__IGU4XaIfXBXBKLWXNI2DRJX8,759
7
7
  sqlmesh/cicd/config.py,sha256=mpgkisSBBovlNrNZir2unT8Wes6b38RW2UsU_o4e8vY,109
8
8
  sqlmesh/cli/__init__.py,sha256=MAXAyO7isbyM-PaSdFjkJNcjn32WjOl0XzxT5gvp_vo,1690
9
- sqlmesh/cli/main.py,sha256=rWwRZCJH-ogbT3X38inrYR4lQJUAOe2jHIUOsjpyCMA,36114
9
+ sqlmesh/cli/main.py,sha256=vDs65xGTyki-9bnssMWoZxyEbezH4Hnt-LYlPUG7vBQ,36404
10
10
  sqlmesh/cli/options.py,sha256=8qEGWivk4urGikpEmaU9T8WsyaZtjCpmW4Ed25iQ73I,2543
11
11
  sqlmesh/cli/project_init.py,sha256=5JmDmUK0WJs39hM-p76uzHYdo1Hnx6fKuJg_pR3Hn5A,16419
12
12
  sqlmesh/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -26,7 +26,7 @@ sqlmesh/core/reference.py,sha256=k7OSkLqTjPR8WJjNeFj0xAJ297nZUMgb_iTVwKRRKjc,487
26
26
  sqlmesh/core/renderer.py,sha256=8zXlvp1roSAEG-_m3thFmUggE1USbBBeoEKnBEshlPQ,26854
27
27
  sqlmesh/core/scheduler.py,sha256=CeI-15GrraLUI5YO8fQUACj7WG7dY6otE4TaJOp2_IU,41041
28
28
  sqlmesh/core/schema_diff.py,sha256=Sp2MoqAngp-yTYevkLaf9jb26SuAdGXoZ54g5MjWowU,30516
29
- sqlmesh/core/schema_loader.py,sha256=lvrI9k7hr1P4X4E6t3U-KrcuvdQuw0UdNlN90P2s52w,3563
29
+ sqlmesh/core/schema_loader.py,sha256=_Pq2RSw91uthqv1vNi_eHmLlzhtGz_APMJ0wAJZYuvk,3677
30
30
  sqlmesh/core/selector.py,sha256=CBuCbaFzidinaoS66o4MY9F-1C3k9YddNMyUv-5Z2i8,12815
31
31
  sqlmesh/core/signal.py,sha256=yVLXewYP6eH0vt-EwaIaI2WwHz6hWsVr-Kb2m4kP1FU,1353
32
32
  sqlmesh/core/table_diff.py,sha256=d1Cqlz2i6ktaFY_y7DoPe_FJqyx2FHD-6_s1sYFRFBU,28846
@@ -164,13 +164,14 @@ sqlmesh/integrations/github/cicd/command.py,sha256=w3oWhvR4utEurB5UABXj4iVBIojkC
164
164
  sqlmesh/integrations/github/cicd/config.py,sha256=n4KyNv65y1gpys82iLAQZUb6g2pnzywyV_7cOrQXsnI,3669
165
165
  sqlmesh/integrations/github/cicd/controller.py,sha256=XZIh8y7527sBcTMCyXyVxulieFGa90Uz5Uq0wfLPjOY,54857
166
166
  sqlmesh/lsp/api.py,sha256=_lA_buSPZFIoLJuINbS53LbNOOaHp3orb0uFTE3aCqI,2328
167
+ sqlmesh/lsp/commands.py,sha256=7tZPePSH-IwBYmXJPIlqGM7pi4rOCLEtc3fKJglAxZs,72
167
168
  sqlmesh/lsp/completions.py,sha256=7Lhboh6xyoMJ3kkHG3aZz1xVbDwKiXeQKdIRj5xlUOA,6674
168
- sqlmesh/lsp/context.py,sha256=7zkDu1J4OyeFgWM_q96_zSqI057Ei_dExx-zcBVADNs,14850
169
+ sqlmesh/lsp/context.py,sha256=sfeFUayKzbxd9tDwMrcYf8b0i4ypH3liw1mjfgPAQ1k,19192
169
170
  sqlmesh/lsp/custom.py,sha256=3gfN_z9IXKOhTGkaZX7V5I8WUmI4z1GWe1sViOo92pw,3980
170
171
  sqlmesh/lsp/errors.py,sha256=3NMim_5J00Eypz7t8b7XbkBfy8gIsRkeq-VcjD4COtc,1489
171
172
  sqlmesh/lsp/helpers.py,sha256=EFc1u3-b7kSv5-tNwmKUDxId72RCLDBnN2lLTgRSzzQ,1020
172
173
  sqlmesh/lsp/hints.py,sha256=j-blccBUil94yRoDjWfkSM0HqMmsKD6hP2TaWdWWVk4,3734
173
- sqlmesh/lsp/main.py,sha256=FQUK44Q93wgujpPs9MSOzudrTQUUuvF8p5CvQ1MW3Vc,42357
174
+ sqlmesh/lsp/main.py,sha256=gVFQkD8DVPWO1bz2V1-UvR4DPwq_4AFsz95-8tIsVZU,44745
174
175
  sqlmesh/lsp/reference.py,sha256=-TTT5NIIGDQoEDCzH8RNgEINt0p9DYclzEn4rBjreRI,18475
175
176
  sqlmesh/lsp/rename.py,sha256=AFj-zJGWiBgHSj1jx1rOx4yJmmw1QpEcob648epM8gk,4668
176
177
  sqlmesh/lsp/tests_ranges.py,sha256=YO5w534J5_y2NWxj9t637wHLbFDJdXBvM7i5F4C-P0I,2308
@@ -277,7 +278,7 @@ sqlmesh/utils/errors.py,sha256=8FE33Eo3KN3Y4s5EZM5t92jZi9BAVGzkr3QCGlrLeDk,5679
277
278
  sqlmesh/utils/git.py,sha256=v1MD4Zwn52UBn_tTfoKn8SAPJVGC6SEFrJ4WEJFbgF0,1868
278
279
  sqlmesh/utils/hashing.py,sha256=nZRKvLNQ83tLG4IoXshVJZf-MbDrXC1HOeNw8Ji-tMM,578
279
280
  sqlmesh/utils/jinja.py,sha256=zulSPIICdFOjN__xkAiMpxbCS7S0--xAFK9d8VG0KvU,27844
280
- sqlmesh/utils/lineage.py,sha256=r8bmemlZpGq-g2jlEPUnG3qNrg1RCdHC0I8k8x8QvKM,15578
281
+ sqlmesh/utils/lineage.py,sha256=zz9BPc6MShRy9LEXmAp02x6oKt4ubVNUPdapFVFKkac,16019
281
282
  sqlmesh/utils/metaprogramming.py,sha256=yDWS3_tkm6Yd5TNHgii2x_VdZ2pVM0vL6oFuwFMMs0A,23554
282
283
  sqlmesh/utils/migration.py,sha256=R7Ck6FX-LfcujGy7sgS0kDWlK-xAEBODr3gqIQ8gC08,835
283
284
  sqlmesh/utils/pandas.py,sha256=FytTSLcRNtO0-YMvpoDBkkut3yoQJR9mBSKpif8lxug,2497
@@ -286,7 +287,7 @@ sqlmesh/utils/pydantic.py,sha256=o_NsXbIpDqNpUA1Uc5xF0ZzoXQYYB0DfHwdRxBwXPNk,120
286
287
  sqlmesh/utils/rich.py,sha256=cwQ5nJ6sgz64xHtoh6_ec7ReV5YpsOGhMtUJnwoRfEI,3549
287
288
  sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
288
289
  sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
289
- sqlmesh-0.205.1.dev12.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
290
+ sqlmesh-0.205.1.dev14.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
290
291
  web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
291
292
  web/client/dist/index.html,sha256=SXykdSRNgrT1k6I2dPZPEfpxPjIsi8-yVFijt-naSA4,5472
292
293
  web/client/dist/assets/Audits-Jm353fhk.js,sha256=ry6b5IKT3hLAfD5C3T2BqxulfauEV0n0YZ2vsP4eQ_U,1041
@@ -404,8 +405,8 @@ web/server/api/endpoints/models.py,sha256=kwj0s7uve3iZSMfmjkoPVMFMeY1sD0peTeyrWf
404
405
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
405
406
  web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
406
407
  web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
407
- sqlmesh-0.205.1.dev12.dist-info/METADATA,sha256=JxUFF0ojuET-0RCbaB99S7iHF5xlkI-LoVBKF4iApJQ,26679
408
- sqlmesh-0.205.1.dev12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
409
- sqlmesh-0.205.1.dev12.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
410
- sqlmesh-0.205.1.dev12.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
411
- sqlmesh-0.205.1.dev12.dist-info/RECORD,,
408
+ sqlmesh-0.205.1.dev14.dist-info/METADATA,sha256=LsXedzQKGbblTMp1pq7pViBRzMPUn0lHTuOenw7djB0,26679
409
+ sqlmesh-0.205.1.dev14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
410
+ sqlmesh-0.205.1.dev14.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
411
+ sqlmesh-0.205.1.dev14.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
412
+ sqlmesh-0.205.1.dev14.dist-info/RECORD,,