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 +2 -2
- sqlmesh/cli/main.py +15 -8
- sqlmesh/core/schema_loader.py +19 -13
- sqlmesh/lsp/commands.py +1 -0
- sqlmesh/lsp/context.py +108 -2
- sqlmesh/lsp/main.py +50 -0
- sqlmesh/utils/lineage.py +24 -4
- {sqlmesh-0.205.1.dev12.dist-info → sqlmesh-0.205.1.dev14.dist-info}/METADATA +1 -1
- {sqlmesh-0.205.1.dev12.dist-info → sqlmesh-0.205.1.dev14.dist-info}/RECORD +13 -12
- {sqlmesh-0.205.1.dev12.dist-info → sqlmesh-0.205.1.dev14.dist-info}/WHEEL +0 -0
- {sqlmesh-0.205.1.dev12.dist-info → sqlmesh-0.205.1.dev14.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.205.1.dev12.dist-info → sqlmesh-0.205.1.dev14.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.205.1.dev12.dist-info → sqlmesh-0.205.1.dev14.dist-info}/top_level.txt +0 -0
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.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 205, 1, '
|
|
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:
|
sqlmesh/core/schema_loader.py
CHANGED
|
@@ -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":
|
|
65
|
+
"columns": columns,
|
|
77
66
|
**gateway_part,
|
|
78
67
|
}
|
|
79
68
|
for table, columns in sorted(
|
|
80
69
|
pool.map(
|
|
81
|
-
lambda table: (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
|
sqlmesh/lsp/commands.py
ADDED
|
@@ -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)
|
|
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
|
-
|
|
404
|
-
|
|
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,12 +1,12 @@
|
|
|
1
1
|
sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
|
|
2
|
-
sqlmesh/_version.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
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.
|
|
408
|
-
sqlmesh-0.205.1.
|
|
409
|
-
sqlmesh-0.205.1.
|
|
410
|
-
sqlmesh-0.205.1.
|
|
411
|
-
sqlmesh-0.205.1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|