acryl-datahub-cloud 0.3.13.2rc4__py3-none-any.whl → 0.3.14rc0__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-cloud might be problematic. Click here for more details.

Files changed (33) hide show
  1. acryl_datahub_cloud/_codegen_config.json +1 -1
  2. acryl_datahub_cloud/datahub_usage_reporting/usage_feature_reporter.py +443 -34
  3. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/identity/__init__.py +6 -0
  4. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/search/features/__init__.py +2 -0
  5. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/platform/event/v1/__init__.py +4 -0
  6. acryl_datahub_cloud/metadata/schema.avsc +445 -107
  7. acryl_datahub_cloud/metadata/schema_classes.py +420 -19
  8. acryl_datahub_cloud/metadata/schemas/ActionRequestInfo.avsc +95 -0
  9. acryl_datahub_cloud/metadata/schemas/AssertionAnalyticsRunEvent.avsc +0 -21
  10. acryl_datahub_cloud/metadata/schemas/ChartInfo.avsc +2 -1
  11. acryl_datahub_cloud/metadata/schemas/CorpUserInvitationStatus.avsc +106 -0
  12. acryl_datahub_cloud/metadata/schemas/CorpUserKey.avsc +2 -0
  13. acryl_datahub_cloud/metadata/schemas/CorpUserUsageFeatures.avsc +93 -0
  14. acryl_datahub_cloud/metadata/schemas/DataHubPageModuleProperties.avsc +13 -2
  15. acryl_datahub_cloud/metadata/schemas/DatasetUsageStatistics.avsc +8 -0
  16. acryl_datahub_cloud/metadata/schemas/InferredMetadata.avsc +69 -0
  17. acryl_datahub_cloud/metadata/schemas/InviteToken.avsc +26 -0
  18. acryl_datahub_cloud/metadata/schemas/LogicalParent.avsc +104 -100
  19. acryl_datahub_cloud/metadata/schemas/MetadataChangeEvent.avsc +98 -45
  20. acryl_datahub_cloud/metadata/schemas/NotificationRequest.avsc +71 -0
  21. acryl_datahub_cloud/metadata/schemas/Ownership.avsc +69 -0
  22. acryl_datahub_cloud/metadata/schemas/RelationshipChangeEvent.avsc +215 -0
  23. acryl_datahub_cloud/metadata/schemas/SchemaFieldKey.avsc +2 -0
  24. acryl_datahub_cloud/metadata/schemas/StructuredProperties.avsc +69 -0
  25. acryl_datahub_cloud/metadata/schemas/StructuredPropertyDefinition.avsc +3 -0
  26. acryl_datahub_cloud/sdk/assertions_client.py +21 -7
  27. acryl_datahub_cloud/sdk/resolver_client.py +4 -1
  28. acryl_datahub_cloud/sdk/subscription_client.py +8 -3
  29. {acryl_datahub_cloud-0.3.13.2rc4.dist-info → acryl_datahub_cloud-0.3.14rc0.dist-info}/METADATA +48 -48
  30. {acryl_datahub_cloud-0.3.13.2rc4.dist-info → acryl_datahub_cloud-0.3.14rc0.dist-info}/RECORD +33 -30
  31. {acryl_datahub_cloud-0.3.13.2rc4.dist-info → acryl_datahub_cloud-0.3.14rc0.dist-info}/WHEEL +0 -0
  32. {acryl_datahub_cloud-0.3.13.2rc4.dist-info → acryl_datahub_cloud-0.3.14rc0.dist-info}/entry_points.txt +0 -0
  33. {acryl_datahub_cloud-0.3.13.2rc4.dist-info → acryl_datahub_cloud-0.3.14rc0.dist-info}/top_level.txt +0 -0
@@ -3280,7 +3280,6 @@ class AssertionAnalyticsRunEventClass(_Aspect):
3280
3280
  asserteeGlossaryTerms: Union[None, List[str]]=None,
3281
3281
  asserteeOwners: Union[None, List[str]]=None,
3282
3282
  asserteeDataPlatform: Union[None, str]=None,
3283
- asserteeContainer: Union[None, str]=None,
3284
3283
  asserteeDataPlatformInstance: Union[None, str]=None,
3285
3284
  asserteeSchemaFieldGlossaryTerms: Union[None, List[str]]=None,
3286
3285
  asserteeSchemaFieldTags: Union[None, List[str]]=None,
@@ -3299,7 +3298,6 @@ class AssertionAnalyticsRunEventClass(_Aspect):
3299
3298
  self.asserteeGlossaryTerms = asserteeGlossaryTerms
3300
3299
  self.asserteeOwners = asserteeOwners
3301
3300
  self.asserteeDataPlatform = asserteeDataPlatform
3302
- self.asserteeContainer = asserteeContainer
3303
3301
  self.asserteeDataPlatformInstance = asserteeDataPlatformInstance
3304
3302
  self.asserteeSchemaFieldGlossaryTerms = asserteeSchemaFieldGlossaryTerms
3305
3303
  self.asserteeSchemaFieldTags = asserteeSchemaFieldTags
@@ -3326,7 +3324,6 @@ class AssertionAnalyticsRunEventClass(_Aspect):
3326
3324
  self.asserteeGlossaryTerms = self.RECORD_SCHEMA.fields_dict["asserteeGlossaryTerms"].default
3327
3325
  self.asserteeOwners = self.RECORD_SCHEMA.fields_dict["asserteeOwners"].default
3328
3326
  self.asserteeDataPlatform = self.RECORD_SCHEMA.fields_dict["asserteeDataPlatform"].default
3329
- self.asserteeContainer = self.RECORD_SCHEMA.fields_dict["asserteeContainer"].default
3330
3327
  self.asserteeDataPlatformInstance = self.RECORD_SCHEMA.fields_dict["asserteeDataPlatformInstance"].default
3331
3328
  self.asserteeSchemaFieldGlossaryTerms = self.RECORD_SCHEMA.fields_dict["asserteeSchemaFieldGlossaryTerms"].default
3332
3329
  self.asserteeSchemaFieldTags = self.RECORD_SCHEMA.fields_dict["asserteeSchemaFieldTags"].default
@@ -3422,16 +3419,6 @@ class AssertionAnalyticsRunEventClass(_Aspect):
3422
3419
  self._inner_dict['asserteeDataPlatform'] = value
3423
3420
 
3424
3421
 
3425
- @property
3426
- def asserteeContainer(self) -> Union[None, str]:
3427
- """The Container attached to the entity's parent Asset"""
3428
- return self._inner_dict.get('asserteeContainer') # type: ignore
3429
-
3430
- @asserteeContainer.setter
3431
- def asserteeContainer(self, value: Union[None, str]) -> None:
3432
- self._inner_dict['asserteeContainer'] = value
3433
-
3434
-
3435
3422
  @property
3436
3423
  def asserteeDataPlatformInstance(self) -> Union[None, str]:
3437
3424
  """Instance of the parent's data platform (e.g. db instance)"""
@@ -10418,6 +10405,7 @@ class OwnerClass(DictWrapper):
10418
10405
  type: Union[str, "OwnershipTypeClass"],
10419
10406
  typeUrn: Union[None, str]=None,
10420
10407
  source: Union[None, "OwnershipSourceClass"]=None,
10408
+ attribution: Union[None, "MetadataAttributionClass"]=None,
10421
10409
  ):
10422
10410
  super().__init__()
10423
10411
 
@@ -10425,12 +10413,14 @@ class OwnerClass(DictWrapper):
10425
10413
  self.type = type
10426
10414
  self.typeUrn = typeUrn
10427
10415
  self.source = source
10416
+ self.attribution = attribution
10428
10417
 
10429
10418
  def _restore_defaults(self) -> None:
10430
10419
  self.owner = str()
10431
10420
  self.type = OwnershipTypeClass.CUSTOM
10432
10421
  self.typeUrn = self.RECORD_SCHEMA.fields_dict["typeUrn"].default
10433
10422
  self.source = self.RECORD_SCHEMA.fields_dict["source"].default
10423
+ self.attribution = self.RECORD_SCHEMA.fields_dict["attribution"].default
10434
10424
 
10435
10425
 
10436
10426
  @property
@@ -10475,6 +10465,16 @@ class OwnerClass(DictWrapper):
10475
10465
  self._inner_dict['source'] = value
10476
10466
 
10477
10467
 
10468
+ @property
10469
+ def attribution(self) -> Union[None, "MetadataAttributionClass"]:
10470
+ """Information about who, why, and how this metadata was applied"""
10471
+ return self._inner_dict.get('attribution') # type: ignore
10472
+
10473
+ @attribution.setter
10474
+ def attribution(self, value: Union[None, "MetadataAttributionClass"]) -> None:
10475
+ self._inner_dict['attribution'] = value
10476
+
10477
+
10478
10478
  class OwnershipClass(_Aspect):
10479
10479
  """Ownership information of an entity."""
10480
10480
 
@@ -18618,6 +18618,9 @@ class NotificationTemplateTypeClass(object):
18618
18618
  BROADCAST_ASSERTION_STATUS_CHANGE = "BROADCAST_ASSERTION_STATUS_CHANGE"
18619
18619
  """Assertion change notification template."""
18620
18620
 
18621
+ INVITATION = "INVITATION"
18622
+ """User invitation notification template."""
18623
+
18621
18624
  CUSTOM = "CUSTOM"
18622
18625
  """Legacy template types to support backwards compatibility."""
18623
18626
 
@@ -21239,6 +21242,87 @@ class CorpUserInfoClass(_Aspect):
21239
21242
  self._inner_dict['system'] = value
21240
21243
 
21241
21244
 
21245
+ class CorpUserInvitationStatusClass(_Aspect):
21246
+ # No docs available.
21247
+
21248
+
21249
+ ASPECT_NAME = 'corpUserInvitationStatus'
21250
+ ASPECT_INFO = {}
21251
+ RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.identity.CorpUserInvitationStatus")
21252
+
21253
+ def __init__(self,
21254
+ created: "AuditStampClass",
21255
+ status: Union[str, "InvitationStatusClass"],
21256
+ lastUpdated: "AuditStampClass",
21257
+ invitationToken: str,
21258
+ role: Union[None, str]=None,
21259
+ ):
21260
+ super().__init__()
21261
+
21262
+ self.role = role
21263
+ self.created = created
21264
+ self.status = status
21265
+ self.lastUpdated = lastUpdated
21266
+ self.invitationToken = invitationToken
21267
+
21268
+ def _restore_defaults(self) -> None:
21269
+ self.role = self.RECORD_SCHEMA.fields_dict["role"].default
21270
+ self.created = AuditStampClass._construct_with_defaults()
21271
+ self.status = InvitationStatusClass.SENT
21272
+ self.lastUpdated = AuditStampClass._construct_with_defaults()
21273
+ self.invitationToken = str()
21274
+
21275
+
21276
+ @property
21277
+ def role(self) -> Union[None, str]:
21278
+ """Role will only work in non-sso environments today."""
21279
+ return self._inner_dict.get('role') # type: ignore
21280
+
21281
+ @role.setter
21282
+ def role(self, value: Union[None, str]) -> None:
21283
+ self._inner_dict['role'] = value
21284
+
21285
+
21286
+ @property
21287
+ def created(self) -> "AuditStampClass":
21288
+ """Created Audit"""
21289
+ return self._inner_dict.get('created') # type: ignore
21290
+
21291
+ @created.setter
21292
+ def created(self, value: "AuditStampClass") -> None:
21293
+ self._inner_dict['created'] = value
21294
+
21295
+
21296
+ @property
21297
+ def status(self) -> Union[str, "InvitationStatusClass"]:
21298
+ """The status of the invitation"""
21299
+ return self._inner_dict.get('status') # type: ignore
21300
+
21301
+ @status.setter
21302
+ def status(self, value: Union[str, "InvitationStatusClass"]) -> None:
21303
+ self._inner_dict['status'] = value
21304
+
21305
+
21306
+ @property
21307
+ def lastUpdated(self) -> "AuditStampClass":
21308
+ """Last Status Change Audit"""
21309
+ return self._inner_dict.get('lastUpdated') # type: ignore
21310
+
21311
+ @lastUpdated.setter
21312
+ def lastUpdated(self, value: "AuditStampClass") -> None:
21313
+ self._inner_dict['lastUpdated'] = value
21314
+
21315
+
21316
+ @property
21317
+ def invitationToken(self) -> str:
21318
+ """Unique token for the invitation URL - hashed via SecretService """
21319
+ return self._inner_dict.get('invitationToken') # type: ignore
21320
+
21321
+ @invitationToken.setter
21322
+ def invitationToken(self, value: str) -> None:
21323
+ self._inner_dict['invitationToken'] = value
21324
+
21325
+
21242
21326
  class CorpUserSettingsClass(_Aspect):
21243
21327
  """Settings that a user can customize through the DataHub UI"""
21244
21328
 
@@ -21404,6 +21488,15 @@ class GroupMembershipClass(_Aspect):
21404
21488
  self._inner_dict['groups'] = value
21405
21489
 
21406
21490
 
21491
+ class InvitationStatusClass(object):
21492
+ # No docs available.
21493
+
21494
+ SENT = "SENT"
21495
+ ACCEPTED = "ACCEPTED"
21496
+ REVOKED = "REVOKED"
21497
+ SUGGESTION_DISMISSED = "SUGGESTION_DISMISSED"
21498
+
21499
+
21407
21500
  class InviteTokenClass(_Aspect):
21408
21501
  """Aspect used to store invite tokens."""
21409
21502
 
@@ -21415,15 +21508,22 @@ class InviteTokenClass(_Aspect):
21415
21508
  def __init__(self,
21416
21509
  token: str,
21417
21510
  role: Union[None, str]=None,
21511
+ tokenType: Optional[Union[Union[str, "TokenTypeClass"], None]]=None,
21418
21512
  ):
21419
21513
  super().__init__()
21420
21514
 
21421
21515
  self.token = token
21422
21516
  self.role = role
21517
+ if tokenType is None:
21518
+ # default: 'SHARED'
21519
+ self.tokenType = self.RECORD_SCHEMA.fields_dict["tokenType"].default
21520
+ else:
21521
+ self.tokenType = tokenType
21423
21522
 
21424
21523
  def _restore_defaults(self) -> None:
21425
21524
  self.token = str()
21426
21525
  self.role = self.RECORD_SCHEMA.fields_dict["role"].default
21526
+ self.tokenType = self.RECORD_SCHEMA.fields_dict["tokenType"].default
21427
21527
 
21428
21528
 
21429
21529
  @property
@@ -21446,6 +21546,16 @@ class InviteTokenClass(_Aspect):
21446
21546
  self._inner_dict['role'] = value
21447
21547
 
21448
21548
 
21549
+ @property
21550
+ def tokenType(self) -> Union[Union[str, "TokenTypeClass"], None]:
21551
+ """The type of invite token - shared (admin managed) or individual (single-use)"""
21552
+ return self._inner_dict.get('tokenType') # type: ignore
21553
+
21554
+ @tokenType.setter
21555
+ def tokenType(self, value: Union[Union[str, "TokenTypeClass"], None]) -> None:
21556
+ self._inner_dict['tokenType'] = value
21557
+
21558
+
21449
21559
  class NativeGroupMembershipClass(_Aspect):
21450
21560
  """Carries information about the native CorpGroups a user is in."""
21451
21561
 
@@ -21504,6 +21614,17 @@ class RoleMembershipClass(_Aspect):
21504
21614
  self._inner_dict['roles'] = value
21505
21615
 
21506
21616
 
21617
+ class TokenTypeClass(object):
21618
+ """Token types for different invitation workflows"""
21619
+
21620
+ SHARED = "SHARED"
21621
+ """Shared token that admin can copy and share manually. Reusable until admin regenerates."""
21622
+
21623
+ INDIVIDUAL = "INDIVIDUAL"
21624
+ """Individual token generated for bulk invitations. Single-use, consumed on signup."""
21625
+
21626
+
21627
+
21507
21628
  class IncidentActivityChangeClass(DictWrapper):
21508
21629
  """Incident Activity Change is a record that represents the changes that occurred in the incident activity event."""
21509
21630
 
@@ -23062,23 +23183,23 @@ class LogicalParentClass(_Aspect):
23062
23183
  RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.logical.LogicalParent")
23063
23184
 
23064
23185
  def __init__(self,
23065
- parent: "EdgeClass",
23186
+ parent: Union[None, "EdgeClass"]=None,
23066
23187
  ):
23067
23188
  super().__init__()
23068
23189
 
23069
23190
  self.parent = parent
23070
23191
 
23071
23192
  def _restore_defaults(self) -> None:
23072
- self.parent = EdgeClass._construct_with_defaults()
23193
+ self.parent = self.RECORD_SCHEMA.fields_dict["parent"].default
23073
23194
 
23074
23195
 
23075
23196
  @property
23076
- def parent(self) -> "EdgeClass":
23197
+ def parent(self) -> Union[None, "EdgeClass"]:
23077
23198
  # No docs available.
23078
23199
  return self._inner_dict.get('parent') # type: ignore
23079
23200
 
23080
23201
  @parent.setter
23081
- def parent(self, value: "EdgeClass") -> None:
23202
+ def parent(self, value: Union[None, "EdgeClass"]) -> None:
23082
23203
  self._inner_dict['parent'] = value
23083
23204
 
23084
23205
 
@@ -23332,7 +23453,7 @@ class CorpUserKeyClass(_Aspect):
23332
23453
 
23333
23454
 
23334
23455
  ASPECT_NAME = 'corpUserKey'
23335
- ASPECT_INFO = {'keyForEntity': 'corpuser', 'entityCategory': '_unset_', 'entityAspects': ['corpUserInfo', 'corpUserEditableInfo', 'corpUserStatus', 'groupMembership', 'globalTags', 'status', 'corpUserCredentials', 'nativeGroupMembership', 'corpUserSettings', 'origin', 'roleMembership', 'structuredProperties', 'forms', 'testResults', 'subTypes', 'slackUserInfo', 'share', 'formNotifications'], 'entityDoc': 'CorpUser represents an identity of a person (or an account) in the enterprise.'}
23456
+ ASPECT_INFO = {'keyForEntity': 'corpuser', 'entityCategory': '_unset_', 'entityAspects': ['corpUserInfo', 'corpUserEditableInfo', 'corpUserStatus', 'groupMembership', 'globalTags', 'status', 'corpUserCredentials', 'nativeGroupMembership', 'corpUserSettings', 'origin', 'roleMembership', 'structuredProperties', 'forms', 'testResults', 'subTypes', 'slackUserInfo', 'corpUserUsageFeatures', 'corpUserInvitationStatus', 'share', 'formNotifications'], 'entityDoc': 'CorpUser represents an identity of a person (or an account) in the enterprise.'}
23336
23457
  RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.metadata.key.CorpUserKey")
23337
23458
 
23338
23459
  def __init__(self,
@@ -25190,7 +25311,7 @@ class SchemaFieldKeyClass(_Aspect):
25190
25311
 
25191
25312
 
25192
25313
  ASPECT_NAME = 'schemaFieldKey'
25193
- ASPECT_INFO = {'keyForEntity': 'schemaField', 'entityCategory': 'core', 'entityAspects': ['schemafieldInfo', 'structuredProperties', 'forms', 'businessAttributes', 'status', 'schemaFieldAliases', 'documentation', 'testResults', 'deprecation', 'subTypes', 'logicalParent', 'schemaFieldProfile', 'lineageFeatures']}
25314
+ ASPECT_INFO = {'keyForEntity': 'schemaField', 'entityCategory': 'core', 'entityAspects': ['schemafieldInfo', 'structuredProperties', 'forms', 'businessAttributes', 'status', 'schemaFieldAliases', 'documentation', 'testResults', 'deprecation', 'subTypes', 'logicalParent', 'globalTags', 'glossaryTerms', 'schemaFieldProfile', 'lineageFeatures']}
25194
25315
  RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.metadata.key.SchemaFieldKey")
25195
25316
 
25196
25317
  def __init__(self,
@@ -25894,6 +26015,90 @@ class SearchParamsClass(DictWrapper):
25894
26015
  self._inner_dict['filters'] = value
25895
26016
 
25896
26017
 
26018
+ class CorpUserUsageFeaturesClass(_Aspect):
26019
+ # No docs available.
26020
+
26021
+
26022
+ ASPECT_NAME = 'corpUserUsageFeatures'
26023
+ ASPECT_INFO = {}
26024
+ RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.metadata.search.features.CorpUserUsageFeatures")
26025
+
26026
+ def __init__(self,
26027
+ userUsageTotalPast30Days: Union[None, int]=None,
26028
+ userPlatformUsageTotalsPast30Days: Union[None, Dict[str, float]]=None,
26029
+ userPlatformUsagePercentilePast30Days: Union[None, Dict[str, float]]=None,
26030
+ userUsagePercentilePast30Days: Union[None, float]=None,
26031
+ userTopDatasetsByUsage: Union[None, Dict[str, float]]=None,
26032
+ ):
26033
+ super().__init__()
26034
+
26035
+ self.userUsageTotalPast30Days = userUsageTotalPast30Days
26036
+ self.userPlatformUsageTotalsPast30Days = userPlatformUsageTotalsPast30Days
26037
+ self.userPlatformUsagePercentilePast30Days = userPlatformUsagePercentilePast30Days
26038
+ self.userUsagePercentilePast30Days = userUsagePercentilePast30Days
26039
+ self.userTopDatasetsByUsage = userTopDatasetsByUsage
26040
+
26041
+ def _restore_defaults(self) -> None:
26042
+ self.userUsageTotalPast30Days = self.RECORD_SCHEMA.fields_dict["userUsageTotalPast30Days"].default
26043
+ self.userPlatformUsageTotalsPast30Days = self.RECORD_SCHEMA.fields_dict["userPlatformUsageTotalsPast30Days"].default
26044
+ self.userPlatformUsagePercentilePast30Days = self.RECORD_SCHEMA.fields_dict["userPlatformUsagePercentilePast30Days"].default
26045
+ self.userUsagePercentilePast30Days = self.RECORD_SCHEMA.fields_dict["userUsagePercentilePast30Days"].default
26046
+ self.userTopDatasetsByUsage = self.RECORD_SCHEMA.fields_dict["userTopDatasetsByUsage"].default
26047
+
26048
+
26049
+ @property
26050
+ def userUsageTotalPast30Days(self) -> Union[None, int]:
26051
+ """Total number of usage in the last 30 days"""
26052
+ return self._inner_dict.get('userUsageTotalPast30Days') # type: ignore
26053
+
26054
+ @userUsageTotalPast30Days.setter
26055
+ def userUsageTotalPast30Days(self, value: Union[None, int]) -> None:
26056
+ self._inner_dict['userUsageTotalPast30Days'] = value
26057
+
26058
+
26059
+ @property
26060
+ def userPlatformUsageTotalsPast30Days(self) -> Union[None, Dict[str, float]]:
26061
+ """usage broken down by platform so we can differentiate between top users of snowflake vs redshift
26062
+ key is supposed to be platform urn"""
26063
+ return self._inner_dict.get('userPlatformUsageTotalsPast30Days') # type: ignore
26064
+
26065
+ @userPlatformUsageTotalsPast30Days.setter
26066
+ def userPlatformUsageTotalsPast30Days(self, value: Union[None, Dict[str, float]]) -> None:
26067
+ self._inner_dict['userPlatformUsageTotalsPast30Days'] = value
26068
+
26069
+
26070
+ @property
26071
+ def userPlatformUsagePercentilePast30Days(self) -> Union[None, Dict[str, float]]:
26072
+ """usage broken down by platform so we can differentiate between top users of snowflake vs redshift"""
26073
+ return self._inner_dict.get('userPlatformUsagePercentilePast30Days') # type: ignore
26074
+
26075
+ @userPlatformUsagePercentilePast30Days.setter
26076
+ def userPlatformUsagePercentilePast30Days(self, value: Union[None, Dict[str, float]]) -> None:
26077
+ self._inner_dict['userPlatformUsagePercentilePast30Days'] = value
26078
+
26079
+
26080
+ @property
26081
+ def userUsagePercentilePast30Days(self) -> Union[None, float]:
26082
+ """Platform usage total percentile for ranking users across all platforms"""
26083
+ return self._inner_dict.get('userUsagePercentilePast30Days') # type: ignore
26084
+
26085
+ @userUsagePercentilePast30Days.setter
26086
+ def userUsagePercentilePast30Days(self, value: Union[None, float]) -> None:
26087
+ self._inner_dict['userUsagePercentilePast30Days'] = value
26088
+
26089
+
26090
+ @property
26091
+ def userTopDatasetsByUsage(self) -> Union[None, Dict[str, float]]:
26092
+ """Gather what are the top datasets per user so we can create a welcome module
26093
+ With links to the users top datasets with lineage (top 25)
26094
+ Map keys are dataset URN strings"""
26095
+ return self._inner_dict.get('userTopDatasetsByUsage') # type: ignore
26096
+
26097
+ @userTopDatasetsByUsage.setter
26098
+ def userTopDatasetsByUsage(self, value: Union[None, Dict[str, float]]) -> None:
26099
+ self._inner_dict['userTopDatasetsByUsage'] = value
26100
+
26101
+
25897
26102
  class CostCurrencyCodeClass(object):
25898
26103
  """ Currency code for the cost """
25899
26104
 
@@ -29445,13 +29650,16 @@ class AssetCollectionModuleParamsClass(DictWrapper):
29445
29650
  RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.module.AssetCollectionModuleParams")
29446
29651
  def __init__(self,
29447
29652
  assetUrns: List[str],
29653
+ dynamicFilterJson: Union[None, str]=None,
29448
29654
  ):
29449
29655
  super().__init__()
29450
29656
 
29451
29657
  self.assetUrns = assetUrns
29658
+ self.dynamicFilterJson = dynamicFilterJson
29452
29659
 
29453
29660
  def _restore_defaults(self) -> None:
29454
29661
  self.assetUrns = list()
29662
+ self.dynamicFilterJson = self.RECORD_SCHEMA.fields_dict["dynamicFilterJson"].default
29455
29663
 
29456
29664
 
29457
29665
  @property
@@ -29464,6 +29672,20 @@ class AssetCollectionModuleParamsClass(DictWrapper):
29464
29672
  self._inner_dict['assetUrns'] = value
29465
29673
 
29466
29674
 
29675
+ @property
29676
+ def dynamicFilterJson(self) -> Union[None, str]:
29677
+ """Optional dynamic filters
29678
+
29679
+ The stringified json representing the logical predicate built in the UI to select assets.
29680
+ This predicate is turned into orFilters to send through graphql since graphql doesn't support
29681
+ arbitrary nesting. This string is used to restore the UI for this logical predicate."""
29682
+ return self._inner_dict.get('dynamicFilterJson') # type: ignore
29683
+
29684
+ @dynamicFilterJson.setter
29685
+ def dynamicFilterJson(self, value: Union[None, str]) -> None:
29686
+ self._inner_dict['dynamicFilterJson'] = value
29687
+
29688
+
29467
29689
  class DataHubPageModuleParamsClass(DictWrapper):
29468
29690
  """The specific parameters stored for a module"""
29469
29691
 
@@ -29646,6 +29868,9 @@ class DataHubPageModuleTypeClass(object):
29646
29868
  SUBSCRIBED_ASSETS = "SUBSCRIBED_ASSETS"
29647
29869
  """Module displaying assets subscribed to by a given user"""
29648
29870
 
29871
+ WORKFLOWS = "WORKFLOWS"
29872
+ """Module displaying workflows that can be started"""
29873
+
29649
29874
 
29650
29875
 
29651
29876
  class DataHubPageModuleVisibilityClass(DictWrapper):
@@ -32663,6 +32888,153 @@ class ParametersClass(DictWrapper):
32663
32888
  pass
32664
32889
 
32665
32890
 
32891
+ class RelationshipChangeEventClass(DictWrapper):
32892
+ """Kafka event for proposing a relationship change between two entities.
32893
+ For example, when dataset1 establishes a new downstream relationship with dataset2."""
32894
+
32895
+ RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.platform.event.v1.RelationshipChangeEvent")
32896
+ def __init__(self,
32897
+ sourceUrn: str,
32898
+ destinationUrn: str,
32899
+ operation: Union[str, "RelationshipChangeOperationClass"],
32900
+ relationshipType: str,
32901
+ auditStamp: "AuditStampClass",
32902
+ auditHeader: Union[None, "KafkaAuditHeaderClass"]=None,
32903
+ lifecycleOwner: Union[None, str]=None,
32904
+ via: Union[None, str]=None,
32905
+ properties: Union[None, Dict[str, str]]=None,
32906
+ ):
32907
+ super().__init__()
32908
+
32909
+ self.auditHeader = auditHeader
32910
+ self.sourceUrn = sourceUrn
32911
+ self.destinationUrn = destinationUrn
32912
+ self.operation = operation
32913
+ self.relationshipType = relationshipType
32914
+ self.lifecycleOwner = lifecycleOwner
32915
+ self.via = via
32916
+ self.properties = properties
32917
+ self.auditStamp = auditStamp
32918
+
32919
+ def _restore_defaults(self) -> None:
32920
+ self.auditHeader = self.RECORD_SCHEMA.fields_dict["auditHeader"].default
32921
+ self.sourceUrn = str()
32922
+ self.destinationUrn = str()
32923
+ self.operation = RelationshipChangeOperationClass.ADD
32924
+ self.relationshipType = str()
32925
+ self.lifecycleOwner = self.RECORD_SCHEMA.fields_dict["lifecycleOwner"].default
32926
+ self.via = self.RECORD_SCHEMA.fields_dict["via"].default
32927
+ self.properties = self.RECORD_SCHEMA.fields_dict["properties"].default
32928
+ self.auditStamp = AuditStampClass._construct_with_defaults()
32929
+
32930
+
32931
+ @property
32932
+ def auditHeader(self) -> Union[None, "KafkaAuditHeaderClass"]:
32933
+ """Kafka audit header containing metadata about the message itself.
32934
+ Includes information like message ID, timestamp, and server details."""
32935
+ return self._inner_dict.get('auditHeader') # type: ignore
32936
+
32937
+ @auditHeader.setter
32938
+ def auditHeader(self, value: Union[None, "KafkaAuditHeaderClass"]) -> None:
32939
+ self._inner_dict['auditHeader'] = value
32940
+
32941
+
32942
+ @property
32943
+ def sourceUrn(self) -> str:
32944
+ """The URN (Uniform Resource Name) of the source entity in the relationship.
32945
+ In a downstream relationship example, this would be the URN of the upstream dataset."""
32946
+ return self._inner_dict.get('sourceUrn') # type: ignore
32947
+
32948
+ @sourceUrn.setter
32949
+ def sourceUrn(self, value: str) -> None:
32950
+ self._inner_dict['sourceUrn'] = value
32951
+
32952
+
32953
+ @property
32954
+ def destinationUrn(self) -> str:
32955
+ """The URN of the destination entity in the relationship.
32956
+ In a downstream relationship example, this would be the URN of the downstream dataset."""
32957
+ return self._inner_dict.get('destinationUrn') # type: ignore
32958
+
32959
+ @destinationUrn.setter
32960
+ def destinationUrn(self, value: str) -> None:
32961
+ self._inner_dict['destinationUrn'] = value
32962
+
32963
+
32964
+ @property
32965
+ def operation(self) -> Union[str, "RelationshipChangeOperationClass"]:
32966
+ """The operation being performed on this relationship.
32967
+ Typically includes operations like ADD, REMOVE, or RESTATE."""
32968
+ return self._inner_dict.get('operation') # type: ignore
32969
+
32970
+ @operation.setter
32971
+ def operation(self, value: Union[str, "RelationshipChangeOperationClass"]) -> None:
32972
+ self._inner_dict['operation'] = value
32973
+
32974
+
32975
+ @property
32976
+ def relationshipType(self) -> str:
32977
+ """The type/category of relationship being established or modified.
32978
+ Examples: "DownstreamOf", "Contains", "OwnedBy", "DerivedFrom", etc."""
32979
+ return self._inner_dict.get('relationshipType') # type: ignore
32980
+
32981
+ @relationshipType.setter
32982
+ def relationshipType(self, value: str) -> None:
32983
+ self._inner_dict['relationshipType'] = value
32984
+
32985
+
32986
+ @property
32987
+ def lifecycleOwner(self) -> Union[None, str]:
32988
+ """The system or service responsible for managing the lifecycle of this relationship.
32989
+ This helps identify which component has authority over the relationship."""
32990
+ return self._inner_dict.get('lifecycleOwner') # type: ignore
32991
+
32992
+ @lifecycleOwner.setter
32993
+ def lifecycleOwner(self, value: Union[None, str]) -> None:
32994
+ self._inner_dict['lifecycleOwner'] = value
32995
+
32996
+
32997
+ @property
32998
+ def via(self) -> Union[None, str]:
32999
+ """Information about how or through what means this relationship was established.
33000
+ Could indicate a specific pipeline, process, or tool that discovered/created the relationship."""
33001
+ return self._inner_dict.get('via') # type: ignore
33002
+
33003
+ @via.setter
33004
+ def via(self, value: Union[None, str]) -> None:
33005
+ self._inner_dict['via'] = value
33006
+
33007
+
33008
+ @property
33009
+ def properties(self) -> Union[None, Dict[str, str]]:
33010
+ """Additional custom properties associated with this relationship.
33011
+ Allows for flexible extension without changing the schema."""
33012
+ return self._inner_dict.get('properties') # type: ignore
33013
+
33014
+ @properties.setter
33015
+ def properties(self, value: Union[None, Dict[str, str]]) -> None:
33016
+ self._inner_dict['properties'] = value
33017
+
33018
+
33019
+ @property
33020
+ def auditStamp(self) -> "AuditStampClass":
33021
+ """Stores information about who made this change and when.
33022
+ Contains the actor (user or system) that performed the action and the timestamp."""
33023
+ return self._inner_dict.get('auditStamp') # type: ignore
33024
+
33025
+ @auditStamp.setter
33026
+ def auditStamp(self, value: "AuditStampClass") -> None:
33027
+ self._inner_dict['auditStamp'] = value
33028
+
33029
+
33030
+ class RelationshipChangeOperationClass(object):
33031
+ # No docs available.
33032
+
33033
+ ADD = "ADD"
33034
+ REMOVE = "REMOVE"
33035
+ RESTATE = "RESTATE"
33036
+
33037
+
32666
33038
  class PlatformResourceInfoClass(_Aspect):
32667
33039
  """Platform Resource Info.
32668
33040
  These entities are for miscelaneous data that is used in non-core parts of the system.
@@ -37275,6 +37647,7 @@ class StructuredPropertyValueAssignmentClass(DictWrapper):
37275
37647
  values: List[Union[str, float]],
37276
37648
  created: Union[None, "AuditStampClass"]=None,
37277
37649
  lastModified: Union[None, "AuditStampClass"]=None,
37650
+ attribution: Union[None, "MetadataAttributionClass"]=None,
37278
37651
  ):
37279
37652
  super().__init__()
37280
37653
 
@@ -37282,12 +37655,14 @@ class StructuredPropertyValueAssignmentClass(DictWrapper):
37282
37655
  self.values = values
37283
37656
  self.created = created
37284
37657
  self.lastModified = lastModified
37658
+ self.attribution = attribution
37285
37659
 
37286
37660
  def _restore_defaults(self) -> None:
37287
37661
  self.propertyUrn = str()
37288
37662
  self.values = list()
37289
37663
  self.created = self.RECORD_SCHEMA.fields_dict["created"].default
37290
37664
  self.lastModified = self.RECORD_SCHEMA.fields_dict["lastModified"].default
37665
+ self.attribution = self.RECORD_SCHEMA.fields_dict["attribution"].default
37291
37666
 
37292
37667
 
37293
37668
  @property
@@ -37330,6 +37705,16 @@ class StructuredPropertyValueAssignmentClass(DictWrapper):
37330
37705
  self._inner_dict['lastModified'] = value
37331
37706
 
37332
37707
 
37708
+ @property
37709
+ def attribution(self) -> Union[None, "MetadataAttributionClass"]:
37710
+ """Information about who, why, and how this metadata was applied"""
37711
+ return self._inner_dict.get('attribution') # type: ignore
37712
+
37713
+ @attribution.setter
37714
+ def attribution(self, value: Union[None, "MetadataAttributionClass"]) -> None:
37715
+ self._inner_dict['attribution'] = value
37716
+
37717
+
37333
37718
  class EntityChangeDetailsClass(DictWrapper):
37334
37719
  """Details involving an EntityChangeType. Used by Subscriptions to determine which
37335
37720
  change types should trigger a notification."""
@@ -39910,13 +40295,16 @@ __SCHEMA_TYPES = {
39910
40295
  'com.linkedin.pegasus2avro.identity.CorpUserEditableInfo': CorpUserEditableInfoClass,
39911
40296
  'com.linkedin.pegasus2avro.identity.CorpUserHomePageSettings': CorpUserHomePageSettingsClass,
39912
40297
  'com.linkedin.pegasus2avro.identity.CorpUserInfo': CorpUserInfoClass,
40298
+ 'com.linkedin.pegasus2avro.identity.CorpUserInvitationStatus': CorpUserInvitationStatusClass,
39913
40299
  'com.linkedin.pegasus2avro.identity.CorpUserSettings': CorpUserSettingsClass,
39914
40300
  'com.linkedin.pegasus2avro.identity.CorpUserStatus': CorpUserStatusClass,
39915
40301
  'com.linkedin.pegasus2avro.identity.CorpUserViewsSettings': CorpUserViewsSettingsClass,
39916
40302
  'com.linkedin.pegasus2avro.identity.GroupMembership': GroupMembershipClass,
40303
+ 'com.linkedin.pegasus2avro.identity.InvitationStatus': InvitationStatusClass,
39917
40304
  'com.linkedin.pegasus2avro.identity.InviteToken': InviteTokenClass,
39918
40305
  'com.linkedin.pegasus2avro.identity.NativeGroupMembership': NativeGroupMembershipClass,
39919
40306
  'com.linkedin.pegasus2avro.identity.RoleMembership': RoleMembershipClass,
40307
+ 'com.linkedin.pegasus2avro.identity.TokenType': TokenTypeClass,
39920
40308
  'com.linkedin.pegasus2avro.incident.IncidentActivityChange': IncidentActivityChangeClass,
39921
40309
  'com.linkedin.pegasus2avro.incident.IncidentActivityChangeType': IncidentActivityChangeTypeClass,
39922
40310
  'com.linkedin.pegasus2avro.incident.IncidentActivityEvent': IncidentActivityEventClass,
@@ -40031,6 +40419,7 @@ __SCHEMA_TYPES = {
40031
40419
  'com.linkedin.pegasus2avro.metadata.recommendation.RecommendationParams': RecommendationParamsClass,
40032
40420
  'com.linkedin.pegasus2avro.metadata.recommendation.RecommendationRenderType': RecommendationRenderTypeClass,
40033
40421
  'com.linkedin.pegasus2avro.metadata.recommendation.SearchParams': SearchParamsClass,
40422
+ 'com.linkedin.pegasus2avro.metadata.search.features.CorpUserUsageFeatures': CorpUserUsageFeaturesClass,
40034
40423
  'com.linkedin.pegasus2avro.metadata.search.features.CostCurrencyCode': CostCurrencyCodeClass,
40035
40424
  'com.linkedin.pegasus2avro.metadata.search.features.CostFeatures': CostFeaturesClass,
40036
40425
  'com.linkedin.pegasus2avro.metadata.search.features.LineageFeatures': LineageFeaturesClass,
@@ -40162,6 +40551,8 @@ __SCHEMA_TYPES = {
40162
40551
  'com.linkedin.pegasus2avro.persona.DataHubPersonaInfo': DataHubPersonaInfoClass,
40163
40552
  'com.linkedin.pegasus2avro.platform.event.v1.EntityChangeEvent': EntityChangeEventClass,
40164
40553
  'com.linkedin.pegasus2avro.platform.event.v1.Parameters': ParametersClass,
40554
+ 'com.linkedin.pegasus2avro.platform.event.v1.RelationshipChangeEvent': RelationshipChangeEventClass,
40555
+ 'com.linkedin.pegasus2avro.platform.event.v1.RelationshipChangeOperation': RelationshipChangeOperationClass,
40165
40556
  'com.linkedin.pegasus2avro.platformresource.PlatformResourceInfo': PlatformResourceInfoClass,
40166
40557
  'com.linkedin.pegasus2avro.platformresource.PlatformResourceKey': PlatformResourceKeyClass,
40167
40558
  'com.linkedin.pegasus2avro.policy.DataHubActorFilter': DataHubActorFilterClass,
@@ -40670,13 +41061,16 @@ __SCHEMA_TYPES = {
40670
41061
  'CorpUserEditableInfo': CorpUserEditableInfoClass,
40671
41062
  'CorpUserHomePageSettings': CorpUserHomePageSettingsClass,
40672
41063
  'CorpUserInfo': CorpUserInfoClass,
41064
+ 'CorpUserInvitationStatus': CorpUserInvitationStatusClass,
40673
41065
  'CorpUserSettings': CorpUserSettingsClass,
40674
41066
  'CorpUserStatus': CorpUserStatusClass,
40675
41067
  'CorpUserViewsSettings': CorpUserViewsSettingsClass,
40676
41068
  'GroupMembership': GroupMembershipClass,
41069
+ 'InvitationStatus': InvitationStatusClass,
40677
41070
  'InviteToken': InviteTokenClass,
40678
41071
  'NativeGroupMembership': NativeGroupMembershipClass,
40679
41072
  'RoleMembership': RoleMembershipClass,
41073
+ 'TokenType': TokenTypeClass,
40680
41074
  'IncidentActivityChange': IncidentActivityChangeClass,
40681
41075
  'IncidentActivityChangeType': IncidentActivityChangeTypeClass,
40682
41076
  'IncidentActivityEvent': IncidentActivityEventClass,
@@ -40791,6 +41185,7 @@ __SCHEMA_TYPES = {
40791
41185
  'RecommendationParams': RecommendationParamsClass,
40792
41186
  'RecommendationRenderType': RecommendationRenderTypeClass,
40793
41187
  'SearchParams': SearchParamsClass,
41188
+ 'CorpUserUsageFeatures': CorpUserUsageFeaturesClass,
40794
41189
  'CostCurrencyCode': CostCurrencyCodeClass,
40795
41190
  'CostFeatures': CostFeaturesClass,
40796
41191
  'LineageFeatures': LineageFeaturesClass,
@@ -40922,6 +41317,8 @@ __SCHEMA_TYPES = {
40922
41317
  'DataHubPersonaInfo': DataHubPersonaInfoClass,
40923
41318
  'EntityChangeEvent': EntityChangeEventClass,
40924
41319
  'Parameters': ParametersClass,
41320
+ 'RelationshipChangeEvent': RelationshipChangeEventClass,
41321
+ 'RelationshipChangeOperation': RelationshipChangeOperationClass,
40925
41322
  'PlatformResourceInfo': PlatformResourceInfoClass,
40926
41323
  'PlatformResourceKey': PlatformResourceKeyClass,
40927
41324
  'DataHubActorFilter': DataHubActorFilterClass,
@@ -41139,6 +41536,7 @@ ASPECT_CLASSES: List[Type[_Aspect]] = [
41139
41536
  GroupMembershipClass,
41140
41537
  CorpGroupInfoClass,
41141
41538
  InviteTokenClass,
41539
+ CorpUserInvitationStatusClass,
41142
41540
  CorpUserInfoClass,
41143
41541
  CorpUserCredentialsClass,
41144
41542
  CorpGroupSettingsClass,
@@ -41172,6 +41570,7 @@ ASPECT_CLASSES: List[Type[_Aspect]] = [
41172
41570
  PostInfoClass,
41173
41571
  CostFeaturesClass,
41174
41572
  LineageFeaturesClass,
41573
+ CorpUserUsageFeaturesClass,
41175
41574
  UsageFeaturesClass,
41176
41575
  StorageFeaturesClass,
41177
41576
  RecommendationModuleClass,
@@ -41433,6 +41832,7 @@ class AspectBag(TypedDict, total=False):
41433
41832
  groupMembership: GroupMembershipClass
41434
41833
  corpGroupInfo: CorpGroupInfoClass
41435
41834
  inviteToken: InviteTokenClass
41835
+ corpUserInvitationStatus: CorpUserInvitationStatusClass
41436
41836
  corpUserInfo: CorpUserInfoClass
41437
41837
  corpUserCredentials: CorpUserCredentialsClass
41438
41838
  corpGroupSettings: CorpGroupSettingsClass
@@ -41466,6 +41866,7 @@ class AspectBag(TypedDict, total=False):
41466
41866
  postInfo: PostInfoClass
41467
41867
  costFeatures: CostFeaturesClass
41468
41868
  lineageFeatures: LineageFeaturesClass
41869
+ corpUserUsageFeatures: CorpUserUsageFeaturesClass
41469
41870
  usageFeatures: UsageFeaturesClass
41470
41871
  storageFeatures: StorageFeaturesClass
41471
41872
  recommendationModule: RecommendationModuleClass