fabricks 3.0.17__py3-none-any.whl → 3.0.18__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.
@@ -16,6 +16,9 @@ class RuntimeTimeoutOptions(TypedDict):
16
16
  pre_run: int
17
17
  post_run: int
18
18
 
19
+ class UDFOptions(TypedDict):
20
+ prefix: Optional[str]
21
+ schema: Optional[str]
19
22
 
20
23
  class StepTimeoutOptions(TypedDict):
21
24
  step: Optional[int]
@@ -123,6 +126,7 @@ class Conf(TypedDict):
123
126
  options: RuntimeOptions
124
127
  path_options: RuntimePathOptions
125
128
  extender_options: Optional[ExtenderOptions]
129
+ udf_options: Optional[UDFOptions]
126
130
  spark_options: SparkOptions
127
131
  bronze: Optional[List[Bronze]]
128
132
  silver: Optional[List[Silver]]
@@ -10,7 +10,7 @@ from fabricks.cdc.nocdc import NoCDC
10
10
  from fabricks.context.log import DEFAULT_LOGGER
11
11
  from fabricks.core.jobs.base._types import JobDependency, TGold
12
12
  from fabricks.core.jobs.base.job import BaseJob
13
- from fabricks.core.udfs import is_registered, register_udf
13
+ from fabricks.core.udfs import is_registered, register_udf, udf_prefix
14
14
  from fabricks.metastore.view import create_or_replace_global_temp_view
15
15
  from fabricks.utils.path import Path
16
16
  from fabricks.utils.sqlglot import fix, get_tables
@@ -90,8 +90,8 @@ class Gold(BaseJob):
90
90
 
91
91
  else:
92
92
  matches = []
93
- if "udf_" in self.sql:
94
- r = re.compile(r"(?<=udf_)\w*(?=\()")
93
+ if f"{udf_prefix}" in self.sql:
94
+ r = re.compile(rf"(?<={udf_prefix})\w*(?=\()")
95
95
  matches = re.findall(r, self.sql)
96
96
  matches = set(matches)
97
97
  matches = list(matches)
fabricks/core/udfs.py CHANGED
@@ -5,11 +5,13 @@ from typing import Callable, List, Optional
5
5
 
6
6
  from pyspark.sql import SparkSession
7
7
 
8
- from fabricks.context import CATALOG, IS_UNITY_CATALOG, PATH_UDFS, SPARK
8
+ from fabricks.context import CATALOG, IS_UNITY_CATALOG, PATH_UDFS, SPARK, CONF_RUNTIME
9
9
  from fabricks.context.log import DEFAULT_LOGGER
10
10
 
11
11
  UDFS: dict[str, Callable] = {}
12
12
 
13
+ udf_schema = CONF_RUNTIME.get("udf_options", {}).get("schema", "default")
14
+ udf_prefix = CONF_RUNTIME.get("udf_options", {}).get("prefix", "udf_")
13
15
 
14
16
  def register_all_udfs(extension: Optional[str] = None, override: bool = False):
15
17
  """
@@ -47,12 +49,12 @@ def is_registered(udf: str, spark: Optional[SparkSession] = None) -> bool:
47
49
  spark = SPARK
48
50
  assert spark is not None
49
51
 
50
- df = spark.sql("show user functions in default")
52
+ df = spark.sql(f"show user functions in {udf_schema}")
51
53
 
52
54
  if CATALOG:
53
- df = df.where(f"function == '{CATALOG}.default.udf_{udf}'")
55
+ df = df.where(f"function == '{CATALOG}.{udf_schema}.{udf_prefix}{udf}'")
54
56
  else:
55
- df = df.where(f"function == 'spark_catalog.default.udf_{udf}'")
57
+ df = df.where(f"function == 'spark_catalog.{udf_schema}.{udf_prefix}{udf}'")
56
58
 
57
59
  return not df.isEmpty()
58
60
 
@@ -72,9 +74,9 @@ def register_udf(
72
74
 
73
75
  if not is_registered(udf, spark) or override:
74
76
  if override:
75
- DEFAULT_LOGGER.debug(f"override udf {udf}")
77
+ DEFAULT_LOGGER.debug(f"override udf {udf}", extra={"label": "fabricks"})
76
78
  else:
77
- DEFAULT_LOGGER.debug(f"register udf {udf}")
79
+ DEFAULT_LOGGER.debug(f"register udf {udf}", extra={"label": "fabricks"})
78
80
 
79
81
  if extension is None:
80
82
  extension = get_extension(udf)
@@ -89,8 +91,6 @@ def register_udf(
89
91
  elif extension == "py":
90
92
  if not IS_UNITY_CATALOG:
91
93
  assert path.exists(), f"udf not found ({path.string})"
92
- else:
93
- DEFAULT_LOGGER.debug(f"could not check if udf exists ({path.string})")
94
94
 
95
95
  spec = importlib.util.spec_from_file_location(udf, path.string)
96
96
  assert spec, f"no valid udf found ({path.string})"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricks
3
- Version: 3.0.17
3
+ Version: 3.0.18
4
4
  Author-email: BMS DWH Team <bi_support@bmsuisse.ch>
5
5
  Requires-Python: <4,>=3.9
6
6
  Requires-Dist: azure-data-tables<13,>=12.5.0
@@ -68,7 +68,7 @@ fabricks/cdc/templates/queries/scd2.sql.jinja,sha256=Nn0wUs9N-_QviZqUKRWAFdD17RR
68
68
  fabricks/cdc/templates/queries/nocdc/complete.sql.jinja,sha256=cVKKCSbiuuw1K7BOzfusX6KvzQNHU3YNUgoXgsu-c6k,267
69
69
  fabricks/cdc/templates/queries/nocdc/update.sql.jinja,sha256=mjNUwGVhZ08yUkdv9sCTkqyW60p0YavtWTqvSUVrwjA,1283
70
70
  fabricks/context/__init__.py,sha256=qfntJ9O6omzY_t6AhDP6Ndu9C5LMiVdWbo6ikhtoe7o,1446
71
- fabricks/context/_types.py,sha256=FzQJ35vp0uc6pAq18bc-VHwMVEWtd0VDdm8xQmNr2Sg,2681
71
+ fabricks/context/_types.py,sha256=4eRV6oln6ToqybM2zrjtZNIvGa5TyxmuFYcID2U7XLc,2800
72
72
  fabricks/context/config.py,sha256=EmLUnswuWfrncaNJMDjvdMg-1lD8aneKAY8IDna7VPE,4814
73
73
  fabricks/context/helpers.py,sha256=igY8LwLIxzfOWKCg23XMsJoY7Bw0welpdNry2mKHjF0,1600
74
74
  fabricks/context/log.py,sha256=CadrRf8iL6iXlGIGIhEIswa7wGqC-E-oLwWcGTyJ10s,2074
@@ -80,7 +80,7 @@ fabricks/core/__init__.py,sha256=LaqDi4xuyHAoLOvS44PQdZdRfq9SmVr7mB6BDHyxYpc,209
80
80
  fabricks/core/extenders.py,sha256=oJzfv0hWxusnGmrjMwbrGyKfot8xzA4XtNquPWfFgPo,727
81
81
  fabricks/core/job_schema.py,sha256=6-70oy0ZJd3V9AiXfc0Q8b8NVEynxQza_h7mB13uB-s,853
82
82
  fabricks/core/masks.py,sha256=0ARgXE6stazRlfjE2v2sOdQWjAH2TbCOgtuD33BeZqE,1531
83
- fabricks/core/udfs.py,sha256=QlFOgN-Ceiv601-2O2sPXfSMqYYZiL29GvUkTfx_P0k,3163
83
+ fabricks/core/udfs.py,sha256=U31yCnfINu9XVEy0w6R6TeUaSN4HJ_79N3hmMdd8eSk,3307
84
84
  fabricks/core/views.py,sha256=52tekqeP0Xk5EPYO220YdfFbzItX6NnObROb-ye9COQ,1181
85
85
  fabricks/core/dags/__init__.py,sha256=0DUKzVcXcROvxkN19P_kaOJ7da5BAM7Vt8EGQbp2KSY,240
86
86
  fabricks/core/dags/base.py,sha256=tFj27SqeZUZ7pB_LOWkpdowZz5gj30JUANI4gWK3Pl8,3139
@@ -98,7 +98,7 @@ fabricks/core/jobs/get_job_id.py,sha256=6dLyzxGHlRvJZVJSwZkCk3iXzWkIhePC_6FhoP0g
98
98
  fabricks/core/jobs/get_jobs.py,sha256=nJ-8DPFq1GyzWo9Mxlwq2dEeAqwg1jeQg-CHietAb1Q,3341
99
99
  fabricks/core/jobs/get_schedule.py,sha256=46pJR5LWZfuxUtLBmtB-RP6ng_W-K-ahJmD29KNmcGw,259
100
100
  fabricks/core/jobs/get_schedules.py,sha256=kryDUBrBrtAaMp8Ou5YqMOCOMKvg1GmbbOQBtiiRleM,794
101
- fabricks/core/jobs/gold.py,sha256=lwzUG-z0ACWUiR7EpDNbrrh7X7XwnixgrMoIptzK7uE,14552
101
+ fabricks/core/jobs/gold.py,sha256=JHpwyYxLgCngvqqEvuj0Scg8Wb3ciSt9NHE8XEC8wKg,14582
102
102
  fabricks/core/jobs/silver.py,sha256=kdrCBfh1jkhWJUFubGUV4kxan5eRUZl-LI-iSJxyJE4,13093
103
103
  fabricks/core/jobs/base/__init__.py,sha256=_AdWtyL7yZG2TOZ9e8WyNPrOjmm6EDkI_TNym5cLDws,208
104
104
  fabricks/core/jobs/base/_types.py,sha256=y66BtJlJskq7wGzn7te5XYjO-NEqeQGUC11kkbew8AU,8405
@@ -171,6 +171,6 @@ fabricks/utils/schema/get_schema_for_type.py,sha256=5k-R6zCgUAtapQgxT4turcx1IQ-b
171
171
  fabricks/utils/write/__init__.py,sha256=i0UnZenXj9Aq0b0_aU3s6882vg-Vu_AyKfQhl_dTp-g,200
172
172
  fabricks/utils/write/delta.py,sha256=lTQ0CfUhcvn3xTCcT_Ns6PMDBsO5UEfa2S9XpJiLJ9c,1250
173
173
  fabricks/utils/write/stream.py,sha256=wQBpAnQtYA6nl79sPKhVM6u5m-66suX7B6VQ6tW4TOs,622
174
- fabricks-3.0.17.dist-info/METADATA,sha256=JTkqiUkvRKtEQKIWDsQhsNcmvMJ81vCx9kQhyxfznwM,798
175
- fabricks-3.0.17.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
176
- fabricks-3.0.17.dist-info/RECORD,,
174
+ fabricks-3.0.18.dist-info/METADATA,sha256=YarCj7qvRhqy_-T7EKavECYdNYtsUGRqTNXWunrhQXY,798
175
+ fabricks-3.0.18.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
176
+ fabricks-3.0.18.dist-info/RECORD,,