sqlmesh 0.182.1.dev7__py3-none-any.whl → 0.182.1.dev8__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.182.1.dev7'
21
- __version_tuple__ = version_tuple = (0, 182, 1, 'dev7')
20
+ __version__ = version = '0.182.1.dev8'
21
+ __version_tuple__ = version_tuple = (0, 182, 1, 'dev8')
@@ -145,6 +145,8 @@ def _add_variables_to_python_env(
145
145
  python_env,
146
146
  None,
147
147
  strict_resolution=strict_resolution,
148
+ variables=variables,
149
+ blueprint_variables=blueprint_variables,
148
150
  )
149
151
  used_variables = (used_variables or set()) | python_used_variables
150
152
 
@@ -163,7 +165,11 @@ def _add_variables_to_python_env(
163
165
 
164
166
 
165
167
  def parse_dependencies(
166
- python_env: t.Dict[str, Executable], entrypoint: t.Optional[str], strict_resolution: bool = True
168
+ python_env: t.Dict[str, Executable],
169
+ entrypoint: t.Optional[str],
170
+ strict_resolution: bool = True,
171
+ variables: t.Optional[t.Dict[str, t.Any]] = None,
172
+ blueprint_variables: t.Optional[t.Dict[str, t.Any]] = None,
167
173
  ) -> t.Tuple[t.Set[str], t.Set[str]]:
168
174
  """
169
175
  Parses the source of a model function and finds upstream table dependencies
@@ -174,13 +180,29 @@ def parse_dependencies(
174
180
  entrypoint: The name of the function.
175
181
  strict_resolution: If true, the arguments of `table` and `resolve_table` calls must
176
182
  be resolvable at parse time, otherwise an exception will be raised.
183
+ variables: The variables available to the python environment.
184
+ blueprint_variables: The blueprint variables available to the python environment.
177
185
 
178
186
  Returns:
179
187
  A tuple containing the set of upstream table dependencies and the set of referenced variables.
180
188
  """
189
+
190
+ class VariableResolutionContext:
191
+ """This enables calls like `resolve_table` to reference `var()` and `blueprint_var()`."""
192
+
193
+ @staticmethod
194
+ def var(var_name: str, default: t.Optional[t.Any] = None) -> t.Optional[t.Any]:
195
+ return (variables or {}).get(var_name.lower(), default)
196
+
197
+ @staticmethod
198
+ def blueprint_var(var_name: str, default: t.Optional[t.Any] = None) -> t.Optional[t.Any]:
199
+ return (blueprint_variables or {}).get(var_name.lower(), default)
200
+
181
201
  env = prepare_env(python_env)
202
+ local_env = dict.fromkeys(("context", "evaluator"), VariableResolutionContext)
203
+
182
204
  depends_on = set()
183
- variables = set()
205
+ used_variables = set()
184
206
 
185
207
  for executable in python_env.values():
186
208
  if not executable.is_definition:
@@ -206,7 +228,7 @@ def parse_dependencies(
206
228
 
207
229
  try:
208
230
  expression = to_source(first_arg)
209
- return eval(expression, env)
231
+ return eval(expression, env, local_env)
210
232
  except Exception:
211
233
  if strict_resolution:
212
234
  raise ConfigError(
@@ -217,7 +239,7 @@ def parse_dependencies(
217
239
  if func.value.id == "context" and func.attr in ("table", "resolve_table"):
218
240
  depends_on.add(get_first_arg("model_name"))
219
241
  elif func.value.id in ("context", "evaluator") and func.attr == c.VAR:
220
- variables.add(get_first_arg("var_name").lower())
242
+ used_variables.add(get_first_arg("var_name").lower())
221
243
  elif (
222
244
  isinstance(node, ast.Attribute)
223
245
  and isinstance(node.value, ast.Name)
@@ -225,9 +247,9 @@ def parse_dependencies(
225
247
  and node.attr == c.GATEWAY
226
248
  ):
227
249
  # Check whether the gateway attribute is referenced.
228
- variables.add(c.GATEWAY)
250
+ used_variables.add(c.GATEWAY)
229
251
  elif isinstance(node, ast.FunctionDef) and node.name == entrypoint:
230
- variables.update(
252
+ used_variables.update(
231
253
  [
232
254
  arg.arg
233
255
  for arg in [*node.args.args, *node.args.kwonlyargs]
@@ -235,7 +257,7 @@ def parse_dependencies(
235
257
  ]
236
258
  )
237
259
 
238
- return depends_on, variables
260
+ return depends_on, used_variables
239
261
 
240
262
 
241
263
  def single_value_or_tuple(values: t.Sequence) -> exp.Identifier | exp.Tuple:
@@ -2286,7 +2286,13 @@ def create_python_model(
2286
2286
  dependencies_unspecified = depends_on is None
2287
2287
 
2288
2288
  parsed_depends_on, referenced_variables = (
2289
- parse_dependencies(python_env, entrypoint, strict_resolution=dependencies_unspecified)
2289
+ parse_dependencies(
2290
+ python_env,
2291
+ entrypoint,
2292
+ strict_resolution=dependencies_unspecified,
2293
+ variables=variables,
2294
+ blueprint_variables=blueprint_variables,
2295
+ )
2290
2296
  if python_env is not None
2291
2297
  else (set(), set())
2292
2298
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.182.1.dev7
3
+ Version: 0.182.1.dev8
4
4
  Summary: Next-generation data transformation framework
5
5
  Author-email: "TobikoData Inc." <engineering@tobikodata.com>
6
6
  License: Apache License
@@ -1,5 +1,5 @@
1
1
  sqlmesh/__init__.py,sha256=DRovDXI-9D9xeYDP7t8Fq7mI31S2btlN-LHPOK3y7PA,7240
2
- sqlmesh/_version.py,sha256=9b85FTpPC45M5reNcsVvi-s22K4EsW4QQLdq32wBw4c,528
2
+ sqlmesh/_version.py,sha256=0cBxYyFyc4y65tFNYy9sudbTOs3xn0j-JeOIT8EUJo4,528
3
3
  sqlmesh/magics.py,sha256=9oY1Uz8uwsuTtPRg9HTYDxnGiJ7-OVRCpmCgAhbKHUU,39431
4
4
  sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -85,9 +85,9 @@ sqlmesh/core/metric/definition.py,sha256=Yd5aVgsZCDPJ43aGP7WqtzZOuuSUtB8uJGVA6Jw
85
85
  sqlmesh/core/metric/rewriter.py,sha256=GiSTHfn2kinqCfNPYgZPRk93JFLzVaaejHtHDQ0yXZI,7326
86
86
  sqlmesh/core/model/__init__.py,sha256=C8GRZ53xuXEA9hQv3BQS9pNNyd9rZ06R_B96UYGhDu4,1644
87
87
  sqlmesh/core/model/cache.py,sha256=hzpGPXxp2LFMEp6gm-8DULJKCBDGf-1kTQcfNt0xrRM,7028
88
- sqlmesh/core/model/common.py,sha256=-ObfpO9JnTAnDI1FDwOS-vkbpqBhDL8OQ2-E3KcRjXY,14724
88
+ sqlmesh/core/model/common.py,sha256=Lr2o0KCMt3HPqlc_4uiNz5BhYSUdm5bzvjCaIz58H7A,15724
89
89
  sqlmesh/core/model/decorator.py,sha256=v_sVudNROGrtj5cZ3vgcOFnwPdzwoUGY6REAkQpIMQc,8927
90
- sqlmesh/core/model/definition.py,sha256=68ureIjncctSdaBboY2UgfPnx6jHEefH7o-55lRuL2Y,108820
90
+ sqlmesh/core/model/definition.py,sha256=qwj9smoaeVZglkTON6HTTlGzOvPwhmjgcaQ160Pjo6E,108953
91
91
  sqlmesh/core/model/kind.py,sha256=em6wq0W4pDnxl9sBgNweosnZH1on3h349t0Pn76wwBM,35867
92
92
  sqlmesh/core/model/meta.py,sha256=v-g1lnGPoeZ2SjV2CbVjvlec9buydiOFKkZWUm2dQPs,19071
93
93
  sqlmesh/core/model/schema.py,sha256=QzM1cOfukuK3L-cEE9MtxKeYec3x5JvutdZAnczJSiQ,3858
@@ -266,7 +266,7 @@ sqlmesh/utils/pandas.py,sha256=j_tYhuPcWpzuPceZZ6IhdTVbmxYyGJW7l4FHr4bQqjM,1824
266
266
  sqlmesh/utils/pydantic.py,sha256=ioaAzYF42PutEJRyAS11-AHguiCG3yWI6VRcTVa2G-g,10470
267
267
  sqlmesh/utils/rich.py,sha256=xNZyPCqEc4TAlJlsEthg-5eYUWpaizz0QjBzO7a1Yv4,1509
268
268
  sqlmesh/utils/yaml.py,sha256=np-WVcwmwsKghCgAj1OBBMsK1SXSRn4wR-H37cGiFr8,2282
269
- sqlmesh-0.182.1.dev7.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
269
+ sqlmesh-0.182.1.dev8.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
270
270
  web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
271
  web/client/dist/index.html,sha256=nPqIDCJmonOaEAp4hhwrwgPdwt_F-5zzw-WW1kJqq3I,5472
272
272
  web/client/dist/assets/Audits-DiRd7NXk.js,sha256=Q5dIFqsHps-vVYD8037NpTPW_1juQgn_Ov45smEm7Y8,1041
@@ -384,8 +384,8 @@ web/server/api/endpoints/models.py,sha256=SzS5bshzdXyM6hb948sZ_3k-xhpGCHkxkb7pHz
384
384
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
385
385
  web/server/api/endpoints/plan.py,sha256=OYuQ_4dgbhG9ibTcX1a8mvYgH3ANxw9Fhbb4wg6QWqc,9222
386
386
  web/server/api/endpoints/table_diff.py,sha256=Wd5YxeKbZB7AkrDvqFgvV9ZQlnKYOF1n5W_w2EHE_Zw,2085
387
- sqlmesh-0.182.1.dev7.dist-info/METADATA,sha256=ncRuRPs9PmQKYBR044ay0WkRee10Jbm_MXGbPF1rYTA,25252
388
- sqlmesh-0.182.1.dev7.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
389
- sqlmesh-0.182.1.dev7.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
390
- sqlmesh-0.182.1.dev7.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
391
- sqlmesh-0.182.1.dev7.dist-info/RECORD,,
387
+ sqlmesh-0.182.1.dev8.dist-info/METADATA,sha256=Fjfu0gFZBBHENYA0mS6cubRQBTCtP9dXx7YF1iX8IoE,25252
388
+ sqlmesh-0.182.1.dev8.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
389
+ sqlmesh-0.182.1.dev8.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
390
+ sqlmesh-0.182.1.dev8.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
391
+ sqlmesh-0.182.1.dev8.dist-info/RECORD,,