dasl-client 1.0.18__tar.gz → 1.0.20__tar.gz

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 dasl-client might be problematic. Click here for more details.

Files changed (42) hide show
  1. {dasl_client-1.0.18 → dasl_client-1.0.20}/PKG-INFO +1 -1
  2. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/preset_development/preview_engine.py +31 -5
  3. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/preset_development/stage.py +6 -1
  4. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/content.py +0 -2
  5. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/dbui.py +0 -5
  6. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client.egg-info/PKG-INFO +1 -1
  7. {dasl_client-1.0.18 → dasl_client-1.0.20}/pyproject.toml +1 -1
  8. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/test_api_surface.py +5 -2
  9. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/test_marshaling.py +0 -2
  10. {dasl_client-1.0.18 → dasl_client-1.0.20}/LICENSE +0 -0
  11. {dasl_client-1.0.18 → dasl_client-1.0.20}/README.md +0 -0
  12. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/__init__.py +0 -0
  13. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/auth/__init__.py +0 -0
  14. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/auth/auth.py +0 -0
  15. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/client.py +0 -0
  16. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/conn/__init__.py +0 -0
  17. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/conn/client_identifier.py +0 -0
  18. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/conn/conn.py +0 -0
  19. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/errors/__init__.py +0 -0
  20. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/errors/errors.py +0 -0
  21. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/helpers.py +0 -0
  22. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/preset_development/__init__.py +0 -0
  23. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/preset_development/errors.py +0 -0
  24. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/preset_development/preview_parameters.py +0 -0
  25. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/__init__.py +0 -0
  26. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/admin_config.py +0 -0
  27. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/datasource.py +0 -0
  28. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/helpers.py +0 -0
  29. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/rule.py +0 -0
  30. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/types.py +0 -0
  31. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client/types/workspace_config.py +0 -0
  32. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client.egg-info/SOURCES.txt +0 -0
  33. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client.egg-info/dependency_links.txt +0 -0
  34. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client.egg-info/requires.txt +0 -0
  35. {dasl_client-1.0.18 → dasl_client-1.0.20}/dasl_client.egg-info/top_level.txt +0 -0
  36. {dasl_client-1.0.18 → dasl_client-1.0.20}/setup.cfg +0 -0
  37. {dasl_client-1.0.18 → dasl_client-1.0.20}/setup.py +0 -0
  38. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/__init__.py +0 -0
  39. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/conftest.py +0 -0
  40. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/constants.py +0 -0
  41. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/test_api_changes.py +0 -0
  42. {dasl_client-1.0.18 → dasl_client-1.0.20}/test/test_databricks_secret_auth.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dasl_client
3
- Version: 1.0.18
3
+ Version: 1.0.20
4
4
  Summary: The DASL client library used for interacting with the DASL workspace
5
5
  Home-page: https://github.com/antimatter/asl
6
6
  Author: Antimatter Team
@@ -175,6 +175,7 @@ class PreviewEngine:
175
175
  self,
176
176
  input_df: DataFrame,
177
177
  stage_dataframes: Tuple[DataFrame, Dict[str, DataFrame], Dict[str, DataFrame]],
178
+ gold_table_catalog: str,
178
179
  gold_table_schema: str,
179
180
  ) -> None:
180
181
  """
@@ -247,12 +248,13 @@ class PreviewEngine:
247
248
  # NOTE: Name is stored as Gold_name/Silver_input. So we need to get just the Gold table
248
249
  # name that we are comparing the dataframe metadata to.
249
250
  name = name.split("/")[0]
251
+ fqn_gold_table_name = f"{self.force_apply_backticks(gold_table_catalog)}.{self.force_apply_backticks(gold_table_schema)}.{self.force_apply_backticks(name)}"
250
252
 
251
- if not self._spark.catalog.tableExists(f"{gold_table_schema}.{name}"):
253
+ if not self._spark.catalog.tableExists(f"{fqn_gold_table_name}"):
252
254
  raise UnknownGoldTableError(name, gold_table_schema)
253
255
 
254
256
  # Performs the type check.
255
- delta_df = self._spark.table(f"`{gold_table_schema}`.`{name}`").limit(0)
257
+ delta_df = self._spark.table(f"{fqn_gold_table_name}").limit(0)
256
258
  unioned_df = delta_df.unionByName(df, allowMissingColumns=True)
257
259
 
258
260
  # Now we check no new columns.
@@ -293,6 +295,25 @@ class PreviewEngine:
293
295
  d("Resultant gold table preview", 3)
294
296
  display(unioned_df)
295
297
 
298
+ def is_backtick_escaped(self, name: str) -> bool:
299
+ """
300
+ check if a given (column) name is backtick escaped or not
301
+ :param name: column name
302
+ :return: bool
303
+ """
304
+ return name.startswith("`") and name.endswith("`")
305
+
306
+ def force_apply_backticks(self, name: str) -> str:
307
+ """
308
+ forces application of backticks to the given (column) name as a single unit
309
+ if it already has backticks this is a noop
310
+ :param name: column name
311
+ :return: str
312
+ """
313
+ if self.is_backtick_escaped(name):
314
+ return name
315
+ return f"`{name}`"
316
+
296
317
  def evaluate(self, gold_table_schema: str, display: bool = True) -> None:
297
318
  """
298
319
  Evaluates the loaded preset YAML using the input datasource configuration to load
@@ -302,8 +323,8 @@ class PreviewEngine:
302
323
  s = gold_table_schema.split(".")
303
324
  if len(s) != 2:
304
325
  raise InvalidGoldTableSchemaError(gold_table_schema)
305
- catalog_name = s[0]
306
- schema_name = s[1]
326
+ catalog_name = s[0].lstrip("`").rstrip("`")
327
+ schema_name = s[1].lstrip("`").rstrip("`")
307
328
  if any(
308
329
  row.catalog == catalog_name
309
330
  for row in self._spark.sql("SHOW CATALOGS").collect()
@@ -352,7 +373,12 @@ class PreviewEngine:
352
373
  self._bronze = df
353
374
  self._result_df_map = self._run(df)
354
375
  if display:
355
- self._render_output(df, self._result_df_map, gold_table_schema)
376
+ self._render_output(
377
+ df,
378
+ self._result_df_map,
379
+ self.force_apply_backticks(catalog_name),
380
+ self.force_apply_backticks(schema_name),
381
+ )
356
382
 
357
383
  def results(
358
384
  self,
@@ -224,10 +224,15 @@ class Stage:
224
224
 
225
225
  referenced_columns = self._referenced_columns()
226
226
  omitted_columns = self._omitted_columns()
227
+ # omitted and referenced cols MAY be wrapped in backticks
228
+ # so we need to check for their existence here on top of just plain col name
227
229
  preserved_columns = [
228
230
  col
229
231
  for col in df.columns
230
- if col not in referenced_columns and col not in omitted_columns
232
+ if col not in referenced_columns
233
+ and col not in omitted_columns
234
+ and self.force_apply_backticks(col) not in referenced_columns
235
+ and self.force_apply_backticks(col) not in omitted_columns
231
236
  ]
232
237
  duplicate_prefix = self._duplicate_prefix()
233
238
  column_names = self._column_names()
@@ -107,7 +107,6 @@ class GoldPreset(BaseModel):
107
107
  filter: Optional[str] = None
108
108
  post_filter: Optional[str] = None
109
109
  fields: Optional[List[Optional[FieldSpec]]] = None
110
- utils: Optional[FieldUtils] = None
111
110
 
112
111
  @staticmethod
113
112
  def from_api_obj(
@@ -126,7 +125,6 @@ class GoldPreset(BaseModel):
126
125
  filter=obj.filter,
127
126
  post_filter=obj.post_filter,
128
127
  fields=fields,
129
- utils=FieldUtils.from_api_obj(obj.utils),
130
128
  )
131
129
 
132
130
 
@@ -263,8 +263,6 @@ class TransformRequest(BaseModel):
263
263
  transform_type (str):
264
264
  The type of transform (one of SilverPreTransform,
265
265
  SilverTransform, Gold).
266
- use_pre_transform_preset (str):
267
- Indicates which pre-transform preset to use if requested.
268
266
  use_preset_table (str):
269
267
  Indicates which table to use within the preset's transform
270
268
  type for Silver and Gold.
@@ -309,7 +307,6 @@ class TransformRequest(BaseModel):
309
307
  )
310
308
 
311
309
  transform_type: str
312
- use_pre_transform_preset: Optional[str] = None
313
310
  use_preset_table: Optional[str] = None
314
311
  filter: Optional[str] = None
315
312
  post_filter: Optional[str] = None
@@ -328,7 +325,6 @@ class TransformRequest(BaseModel):
328
325
  add_fields = [FieldSpec.from_api_obj(item) for item in obj.add_fields]
329
326
  return TransformRequest.Transform(
330
327
  transform_type=obj.transform_type,
331
- use_pre_transform_preset=obj.use_pre_transform_preset,
332
328
  use_preset_table=obj.use_preset_table,
333
329
  filter=obj.filter,
334
330
  post_filter=obj.post_filter,
@@ -346,7 +342,6 @@ class TransformRequest(BaseModel):
346
342
  to_api_obj = lambda o: o.to_api_obj()
347
343
  return DbuiV1TransformRequestTransformsInner(
348
344
  transform_type=self.transform_type,
349
- use_pre_transform_preset=self.use_pre_transform_preset,
350
345
  use_preset_table=self.use_preset_table,
351
346
  filter=self.filter,
352
347
  post_filter=self.post_filter,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dasl_client
3
- Version: 1.0.18
3
+ Version: 1.0.20
4
4
  Summary: The DASL client library used for interacting with the DASL workspace
5
5
  Home-page: https://github.com/antimatter/asl
6
6
  Author: Antimatter Team
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dasl_client"
7
- version = "1.0.18"
7
+ version = "1.0.20"
8
8
  description = "The DASL client library used for interacting with the DASL workspace"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -81,6 +81,7 @@ def test_workspace_config(api_client):
81
81
  def test_minimal_data_source(api_client):
82
82
  base_data_source = DataSource(
83
83
  source="test",
84
+ source_type="test",
84
85
  schedule=Schedule(
85
86
  at_least_every="2h",
86
87
  enabled=True,
@@ -89,8 +90,10 @@ def test_minimal_data_source(api_client):
89
90
  bronze_table="test_bronze_table",
90
91
  skip_bronze_loading=False,
91
92
  ),
92
- silver=SilverSpec(),
93
- gold=GoldSpec(),
93
+ autoloader=DataSource.Autoloader(
94
+ location="s3://aws-security-data-lake-us-east-1-k8vskbicklrtekgxvyufaavf36jjql/aws/S3_DATA/2.0/region=us-east-1/",
95
+ format="json",
96
+ ),
94
97
  )
95
98
 
96
99
  base_ds_1 = api_client.create_datasource("test_1", base_data_source)
@@ -712,7 +712,6 @@ def test_transform_request_marshal_unmarshal():
712
712
  transforms=[
713
713
  TransformRequest.Transform(
714
714
  transform_type="Gold",
715
- use_pre_transform_preset="pre_preset",
716
715
  use_preset_table="table_name",
717
716
  filter="col > 0",
718
717
  post_filter="col < 100",
@@ -784,7 +783,6 @@ def test_transform_request_marshal_unmarshal():
784
783
  ),
785
784
  TransformRequest.Transform(
786
785
  transform_type="SilverTransform",
787
- use_pre_transform_preset="pre_preset_b",
788
786
  use_preset_table="table_b",
789
787
  filter="col >= 10",
790
788
  post_filter="col <= 50",
File without changes
File without changes
File without changes
File without changes