acryl-datahub 1.2.0.1rc1__py3-none-any.whl → 1.2.0.2rc2__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.

Potentially problematic release.


This version of acryl-datahub might be problematic. Click here for more details.

Files changed (29) hide show
  1. {acryl_datahub-1.2.0.1rc1.dist-info → acryl_datahub-1.2.0.2rc2.dist-info}/METADATA +2556 -2556
  2. {acryl_datahub-1.2.0.1rc1.dist-info → acryl_datahub-1.2.0.2rc2.dist-info}/RECORD +29 -29
  3. datahub/_version.py +1 -1
  4. datahub/emitter/rest_emitter.py +3 -1
  5. datahub/ingestion/source/abs/source.py +5 -29
  6. datahub/ingestion/source/data_lake_common/data_lake_utils.py +37 -0
  7. datahub/ingestion/source/dbt/dbt_common.py +69 -2
  8. datahub/ingestion/source/ge_data_profiler.py +9 -1
  9. datahub/ingestion/source/looker/looker_common.py +40 -4
  10. datahub/ingestion/source/s3/source.py +5 -33
  11. datahub/ingestion/source/sql/postgres.py +190 -1
  12. datahub/ingestion/source/sql_queries.py +112 -77
  13. datahub/ingestion/source/unity/proxy.py +8 -8
  14. datahub/metadata/_internal_schema_classes.py +81 -0
  15. datahub/metadata/com/linkedin/pegasus2avro/module/__init__.py +2 -0
  16. datahub/metadata/schema.avsc +60 -0
  17. datahub/metadata/schemas/CorpUserSettings.avsc +10 -1
  18. datahub/metadata/schemas/DataHubPageModuleProperties.avsc +33 -0
  19. datahub/metadata/schemas/MetadataChangeEvent.avsc +18 -0
  20. datahub/metadata/schemas/MetadataChangeLog.avsc +62 -44
  21. datahub/metadata/schemas/MetadataChangeProposal.avsc +61 -0
  22. datahub/metadata/schemas/SystemMetadata.avsc +61 -0
  23. datahub/sdk/search_filters.py +51 -2
  24. datahub/sql_parsing/sql_parsing_aggregator.py +1 -0
  25. datahub/upgrade/upgrade.py +5 -3
  26. {acryl_datahub-1.2.0.1rc1.dist-info → acryl_datahub-1.2.0.2rc2.dist-info}/WHEEL +0 -0
  27. {acryl_datahub-1.2.0.1rc1.dist-info → acryl_datahub-1.2.0.2rc2.dist-info}/entry_points.txt +0 -0
  28. {acryl_datahub-1.2.0.1rc1.dist-info → acryl_datahub-1.2.0.2rc2.dist-info}/licenses/LICENSE +0 -0
  29. {acryl_datahub-1.2.0.1rc1.dist-info → acryl_datahub-1.2.0.2rc2.dist-info}/top_level.txt +0 -0
@@ -29,7 +29,7 @@ from datahub.ingestion.graph.filters import (
29
29
  _get_status_filter,
30
30
  )
31
31
  from datahub.metadata.schema_classes import EntityTypeName
32
- from datahub.metadata.urns import DataPlatformUrn, DomainUrn
32
+ from datahub.metadata.urns import ContainerUrn, DataPlatformUrn, DomainUrn
33
33
 
34
34
  _AndSearchFilterRule = TypedDict(
35
35
  "_AndSearchFilterRule", {"and": List[SearchFilterRule]}
@@ -81,7 +81,7 @@ class _EntityTypeFilter(_BaseFilter):
81
81
  ENTITY_TYPE_FIELD: ClassVar[str] = "_entityType"
82
82
 
83
83
  entity_type: List[str] = pydantic.Field(
84
- description="The entity type to filter on. Can be 'dataset', 'chart', 'dashboard', 'corpuser', etc.",
84
+ description="The entity type to filter on. Can be 'dataset', 'chart', 'dashboard', 'corpuser', 'dataProduct', etc.",
85
85
  )
86
86
 
87
87
  def _build_rule(self) -> SearchFilterRule:
@@ -174,6 +174,39 @@ class _DomainFilter(_BaseFilter):
174
174
  return [{"and": [self._build_rule()]}]
175
175
 
176
176
 
177
+ class _ContainerFilter(_BaseFilter):
178
+ container: List[str]
179
+ direct_descendants_only: bool = pydantic.Field(
180
+ default=False,
181
+ description="If true, only entities that are direct descendants of the container will be returned.",
182
+ )
183
+
184
+ @pydantic.validator("container", each_item=True)
185
+ def validate_container(cls, v: str) -> str:
186
+ return str(ContainerUrn.from_string(v))
187
+
188
+ @classmethod
189
+ def _field_discriminator(cls) -> str:
190
+ return "container"
191
+
192
+ def _build_rule(self) -> SearchFilterRule:
193
+ if self.direct_descendants_only:
194
+ return SearchFilterRule(
195
+ field="container",
196
+ condition="EQUAL",
197
+ values=self.container,
198
+ )
199
+ else:
200
+ return SearchFilterRule(
201
+ field="browsePathV2",
202
+ condition="CONTAIN",
203
+ values=self.container,
204
+ )
205
+
206
+ def compile(self) -> _OrFilters:
207
+ return [{"and": [self._build_rule()]}]
208
+
209
+
177
210
  class _EnvFilter(_BaseFilter):
178
211
  # Note that not all entity types have an env (e.g. dashboards / charts).
179
212
  # If the env filter is specified, these will be excluded.
@@ -342,6 +375,8 @@ def _filter_discriminator(v: Any) -> Optional[str]:
342
375
  keys = list(v.keys())
343
376
  if len(keys) == 1:
344
377
  return keys[0]
378
+ elif set(keys).issuperset({"container"}):
379
+ return _ContainerFilter._field_discriminator()
345
380
  elif set(keys).issuperset({"field", "condition"}):
346
381
  return _CustomCondition._field_discriminator()
347
382
 
@@ -360,6 +395,7 @@ if TYPE_CHECKING or not PYDANTIC_SUPPORTS_CALLABLE_DISCRIMINATOR:
360
395
  _StatusFilter,
361
396
  _PlatformFilter,
362
397
  _DomainFilter,
398
+ _ContainerFilter,
363
399
  _EnvFilter,
364
400
  _CustomCondition,
365
401
  ]
@@ -385,6 +421,7 @@ else:
385
421
  Annotated[_StatusFilter, Tag(_StatusFilter._field_discriminator())],
386
422
  Annotated[_PlatformFilter, Tag(_PlatformFilter._field_discriminator())],
387
423
  Annotated[_DomainFilter, Tag(_DomainFilter._field_discriminator())],
424
+ Annotated[_ContainerFilter, Tag(_ContainerFilter._field_discriminator())],
388
425
  Annotated[_EnvFilter, Tag(_EnvFilter._field_discriminator())],
389
426
  Annotated[_CustomCondition, Tag(_CustomCondition._field_discriminator())],
390
427
  ],
@@ -468,6 +505,18 @@ class FilterDsl:
468
505
  def domain(domain: Union[str, Sequence[str]], /) -> _DomainFilter:
469
506
  return _DomainFilter(domain=[domain] if isinstance(domain, str) else domain)
470
507
 
508
+ @staticmethod
509
+ def container(
510
+ container: Union[str, Sequence[str]],
511
+ /,
512
+ *,
513
+ direct_descendants_only: bool = False,
514
+ ) -> _ContainerFilter:
515
+ return _ContainerFilter(
516
+ container=[container] if isinstance(container, str) else container,
517
+ direct_descendants_only=direct_descendants_only,
518
+ )
519
+
471
520
  @staticmethod
472
521
  def env(env: Union[str, Sequence[str]], /) -> _EnvFilter:
473
522
  return _EnvFilter(env=[env] if isinstance(env, str) else env)
@@ -190,6 +190,7 @@ class QueryMetadata:
190
190
  source=models.QuerySourceClass.SYSTEM,
191
191
  created=self.make_created_audit_stamp(),
192
192
  lastModified=self.make_last_modified_audit_stamp(),
193
+ origin=self.origin.urn() if self.origin else None,
193
194
  )
194
195
 
195
196
 
@@ -352,9 +352,11 @@ def _maybe_print_upgrade_message(
352
352
  if version_stats.client.latest
353
353
  else None
354
354
  )
355
- client_server_compat = is_client_server_compatible(
356
- version_stats.client.current, version_stats.server.current
357
- )
355
+ client_server_compat = 0
356
+ if version_stats.server.current_server_type != "cloud":
357
+ client_server_compat = is_client_server_compatible(
358
+ version_stats.client.current, version_stats.server.current
359
+ )
358
360
 
359
361
  if latest_release_date and current_release_date:
360
362
  assert version_stats.client.latest