acryl-datahub-cloud 0.3.13.3rc0__py3-none-any.whl → 0.3.14__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 (51) hide show
  1. acryl_datahub_cloud/_codegen_config.json +1 -1
  2. acryl_datahub_cloud/datahub_usage_reporting/excluded.py +94 -0
  3. acryl_datahub_cloud/datahub_usage_reporting/usage_feature_reporter.py +462 -34
  4. acryl_datahub_cloud/metadata/_urns/urn_defs.py +2034 -2034
  5. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/event/notification/settings/__init__.py +2 -0
  6. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/identity/__init__.py +6 -0
  7. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/search/features/__init__.py +2 -0
  8. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/platform/event/v1/__init__.py +4 -0
  9. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/asset/__init__.py +19 -0
  10. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/global/__init__.py +6 -0
  11. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/template/__init__.py +6 -0
  12. acryl_datahub_cloud/metadata/schema.avsc +24776 -24109
  13. acryl_datahub_cloud/metadata/schema_classes.py +1581 -696
  14. acryl_datahub_cloud/metadata/schemas/ActionRequestInfo.avsc +95 -0
  15. acryl_datahub_cloud/metadata/schemas/AssertionAnalyticsRunEvent.avsc +0 -21
  16. acryl_datahub_cloud/metadata/schemas/AssetSettings.avsc +63 -0
  17. acryl_datahub_cloud/metadata/schemas/ChartInfo.avsc +2 -1
  18. acryl_datahub_cloud/metadata/schemas/CorpGroupSettings.avsc +127 -2
  19. acryl_datahub_cloud/metadata/schemas/CorpUserInvitationStatus.avsc +106 -0
  20. acryl_datahub_cloud/metadata/schemas/CorpUserKey.avsc +2 -0
  21. acryl_datahub_cloud/metadata/schemas/CorpUserSettings.avsc +127 -2
  22. acryl_datahub_cloud/metadata/schemas/CorpUserUsageFeatures.avsc +93 -0
  23. acryl_datahub_cloud/metadata/schemas/DataHubPageModuleProperties.avsc +21 -2
  24. acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateProperties.avsc +77 -1
  25. acryl_datahub_cloud/metadata/schemas/DataProductKey.avsc +1 -0
  26. acryl_datahub_cloud/metadata/schemas/DatasetUsageStatistics.avsc +8 -0
  27. acryl_datahub_cloud/metadata/schemas/DomainKey.avsc +1 -0
  28. acryl_datahub_cloud/metadata/schemas/GlobalSettingsInfo.avsc +82 -0
  29. acryl_datahub_cloud/metadata/schemas/GlossaryNodeKey.avsc +1 -0
  30. acryl_datahub_cloud/metadata/schemas/GlossaryTermKey.avsc +1 -0
  31. acryl_datahub_cloud/metadata/schemas/IncidentActivityEvent.avsc +3 -3
  32. acryl_datahub_cloud/metadata/schemas/IncidentInfo.avsc +3 -3
  33. acryl_datahub_cloud/metadata/schemas/InferredMetadata.avsc +69 -0
  34. acryl_datahub_cloud/metadata/schemas/InviteToken.avsc +26 -0
  35. acryl_datahub_cloud/metadata/schemas/LogicalParent.avsc +104 -100
  36. acryl_datahub_cloud/metadata/schemas/MetadataChangeEvent.avsc +98 -45
  37. acryl_datahub_cloud/metadata/schemas/MonitorSuiteInfo.avsc +127 -2
  38. acryl_datahub_cloud/metadata/schemas/NotificationRequest.avsc +79 -2
  39. acryl_datahub_cloud/metadata/schemas/Ownership.avsc +69 -0
  40. acryl_datahub_cloud/metadata/schemas/RelationshipChangeEvent.avsc +215 -0
  41. acryl_datahub_cloud/metadata/schemas/SchemaFieldKey.avsc +2 -0
  42. acryl_datahub_cloud/metadata/schemas/StructuredProperties.avsc +69 -0
  43. acryl_datahub_cloud/metadata/schemas/SubscriptionInfo.avsc +127 -2
  44. acryl_datahub_cloud/sdk/assertions_client.py +21 -7
  45. acryl_datahub_cloud/sdk/resolver_client.py +4 -1
  46. acryl_datahub_cloud/sdk/subscription_client.py +8 -3
  47. {acryl_datahub_cloud-0.3.13.3rc0.dist-info → acryl_datahub_cloud-0.3.14.dist-info}/METADATA +43 -43
  48. {acryl_datahub_cloud-0.3.13.3rc0.dist-info → acryl_datahub_cloud-0.3.14.dist-info}/RECORD +51 -45
  49. {acryl_datahub_cloud-0.3.13.3rc0.dist-info → acryl_datahub_cloud-0.3.14.dist-info}/WHEEL +0 -0
  50. {acryl_datahub_cloud-0.3.13.3rc0.dist-info → acryl_datahub_cloud-0.3.14.dist-info}/entry_points.txt +0 -0
  51. {acryl_datahub_cloud-0.3.13.3rc0.dist-info → acryl_datahub_cloud-0.3.14.dist-info}/top_level.txt +0 -0
@@ -435,6 +435,75 @@
435
435
  "name": "source",
436
436
  "default": null,
437
437
  "doc": "Source information for the ownership"
438
+ },
439
+ {
440
+ "Searchable": {
441
+ "/actor": {
442
+ "fieldName": "ownerAttributionActors",
443
+ "fieldType": "URN",
444
+ "queryByDefault": false
445
+ },
446
+ "/source": {
447
+ "fieldName": "ownerAttributionSources",
448
+ "fieldType": "URN",
449
+ "queryByDefault": false
450
+ },
451
+ "/time": {
452
+ "fieldName": "ownerAttributionDates",
453
+ "fieldType": "DATETIME",
454
+ "queryByDefault": false
455
+ }
456
+ },
457
+ "type": [
458
+ "null",
459
+ {
460
+ "type": "record",
461
+ "name": "MetadataAttribution",
462
+ "namespace": "com.linkedin.pegasus2avro.common",
463
+ "fields": [
464
+ {
465
+ "type": "long",
466
+ "name": "time",
467
+ "doc": "When this metadata was updated."
468
+ },
469
+ {
470
+ "java": {
471
+ "class": "com.linkedin.pegasus2avro.common.urn.Urn"
472
+ },
473
+ "type": "string",
474
+ "name": "actor",
475
+ "doc": "The entity (e.g. a member URN) responsible for applying the assocated metadata. This can\neither be a user (in case of UI edits) or the datahub system for automation.",
476
+ "Urn": "Urn"
477
+ },
478
+ {
479
+ "java": {
480
+ "class": "com.linkedin.pegasus2avro.common.urn.Urn"
481
+ },
482
+ "type": [
483
+ "null",
484
+ "string"
485
+ ],
486
+ "name": "source",
487
+ "default": null,
488
+ "doc": "The DataHub source responsible for applying the associated metadata. This will only be filled out\nwhen a DataHub source is responsible. This includes the specific metadata test urn, the automation urn.",
489
+ "Urn": "Urn"
490
+ },
491
+ {
492
+ "type": {
493
+ "type": "map",
494
+ "values": "string"
495
+ },
496
+ "name": "sourceDetail",
497
+ "default": {},
498
+ "doc": "The details associated with why this metadata was applied. For example, this could include\nthe actual regex rule, sql statement, ingestion pipeline ID, etc.\nAlso can include flags like 'propagated'=true or 'inferred'=true."
499
+ }
500
+ ],
501
+ "doc": "Information about who, why, and how this metadata was applied"
502
+ }
503
+ ],
504
+ "name": "attribution",
505
+ "default": null,
506
+ "doc": "Information about who, why, and how this metadata was applied"
438
507
  }
439
508
  ],
440
509
  "doc": "Ownership information"
@@ -556,6 +625,32 @@
556
625
  "name": "lastModified",
557
626
  "default": null,
558
627
  "doc": "Audit stamp containing who last modified this relationship edge and when"
628
+ },
629
+ {
630
+ "Searchable": {
631
+ "/actor": {
632
+ "fieldName": "structuredPropertyAttributionActors",
633
+ "fieldType": "URN",
634
+ "queryByDefault": false
635
+ },
636
+ "/source": {
637
+ "fieldName": "structuredPropertyAttributionSources",
638
+ "fieldType": "URN",
639
+ "queryByDefault": false
640
+ },
641
+ "/time": {
642
+ "fieldName": "structuredPropertyAttributionDates",
643
+ "fieldType": "DATETIME",
644
+ "queryByDefault": false
645
+ }
646
+ },
647
+ "type": [
648
+ "null",
649
+ "com.linkedin.pegasus2avro.common.MetadataAttribution"
650
+ ],
651
+ "name": "attribution",
652
+ "default": null,
653
+ "doc": "Information about who, why, and how this metadata was applied"
559
654
  }
560
655
  ]
561
656
  }
@@ -167,27 +167,6 @@
167
167
  "doc": "Data Platform for parent",
168
168
  "Urn": "Urn"
169
169
  },
170
- {
171
- "Searchable": {
172
- "/*": {
173
- "addToFilters": true,
174
- "fieldType": "URN",
175
- "hasValuesFieldName": "hasAsserteeContainer"
176
- }
177
- },
178
- "TimeseriesField": {},
179
- "java": {
180
- "class": "com.linkedin.pegasus2avro.common.urn.Urn"
181
- },
182
- "type": [
183
- "null",
184
- "string"
185
- ],
186
- "name": "asserteeContainer",
187
- "default": null,
188
- "doc": "The Container attached to the entity's parent Asset",
189
- "Urn": "Urn"
190
- },
191
170
  {
192
171
  "Searchable": {
193
172
  "addToFilters": true,
@@ -0,0 +1,63 @@
1
+ {
2
+ "type": "record",
3
+ "Aspect": {
4
+ "name": "assetSettings"
5
+ },
6
+ "name": "AssetSettings",
7
+ "namespace": "com.linkedin.pegasus2avro.settings.asset",
8
+ "fields": [
9
+ {
10
+ "type": [
11
+ "null",
12
+ {
13
+ "type": "record",
14
+ "name": "AssetSummarySettings",
15
+ "namespace": "com.linkedin.pegasus2avro.settings.asset",
16
+ "fields": [
17
+ {
18
+ "Relationship": {
19
+ "/*/template": {
20
+ "entityTypes": [
21
+ "dataHubPageTemplate"
22
+ ],
23
+ "name": "HasSummaryTemplate"
24
+ }
25
+ },
26
+ "type": [
27
+ {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "record",
31
+ "name": "AssetSummarySettingsTemplate",
32
+ "namespace": "com.linkedin.pegasus2avro.settings.asset",
33
+ "fields": [
34
+ {
35
+ "java": {
36
+ "class": "com.linkedin.pegasus2avro.common.urn.Urn"
37
+ },
38
+ "type": "string",
39
+ "name": "template",
40
+ "doc": "The urn of the template",
41
+ "Urn": "Urn"
42
+ }
43
+ ],
44
+ "doc": "Object containing the template and any additional info for asset summary settings"
45
+ }
46
+ },
47
+ "null"
48
+ ],
49
+ "name": "templates",
50
+ "default": [],
51
+ "doc": "The list of templates applied to this asset in order. Right now we only expect one."
52
+ }
53
+ ],
54
+ "doc": "Information related to the asset summary for this asset"
55
+ }
56
+ ],
57
+ "name": "assetSummary",
58
+ "default": null,
59
+ "doc": "Information related to the asset summary for this asset"
60
+ }
61
+ ],
62
+ "doc": "Settings associated with this asset"
63
+ }
@@ -188,7 +188,8 @@
188
188
  "createdActor": "inputEdges/*/created/actor",
189
189
  "createdOn": "inputEdges/*/created/time",
190
190
  "entityTypes": [
191
- "dataset"
191
+ "dataset",
192
+ "chart"
192
193
  ],
193
194
  "isLineage": true,
194
195
  "name": "Consumes",
@@ -21,13 +21,15 @@
21
21
  "type": "enum",
22
22
  "symbolDocs": {
23
23
  "EMAIL": "Email target type.",
24
- "SLACK": "Slack target type."
24
+ "SLACK": "Slack target type.",
25
+ "TEAMS": "Microsoft Teams target type."
25
26
  },
26
27
  "name": "NotificationSinkType",
27
28
  "namespace": "com.linkedin.pegasus2avro.event.notification",
28
29
  "symbols": [
29
30
  "SLACK",
30
- "EMAIL"
31
+ "EMAIL",
32
+ "TEAMS"
31
33
  ],
32
34
  "doc": "A type of sink / platform to send a notification to."
33
35
  }
@@ -93,6 +95,129 @@
93
95
  "default": null,
94
96
  "doc": "Email Notification Settings"
95
97
  },
98
+ {
99
+ "type": [
100
+ "null",
101
+ {
102
+ "type": "record",
103
+ "name": "TeamsNotificationSettings",
104
+ "namespace": "com.linkedin.pegasus2avro.event.notification.settings",
105
+ "fields": [
106
+ {
107
+ "type": [
108
+ "null",
109
+ {
110
+ "type": "record",
111
+ "name": "TeamsUser",
112
+ "namespace": "com.linkedin.pegasus2avro.settings.global",
113
+ "fields": [
114
+ {
115
+ "type": [
116
+ "null",
117
+ "string"
118
+ ],
119
+ "name": "teamsUserId",
120
+ "default": null,
121
+ "doc": "The Teams user ID (internal Teams identifier).\nThis is the primary identifier used for Teams messaging."
122
+ },
123
+ {
124
+ "Searchable": {
125
+ "fieldType": "KEYWORD",
126
+ "queryByDefault": false
127
+ },
128
+ "type": [
129
+ "null",
130
+ "string"
131
+ ],
132
+ "name": "azureUserId",
133
+ "default": null,
134
+ "doc": "The Azure AD user ID (Azure Active Directory object ID).\nThis is the primary identifier for Azure AD operations and Microsoft Graph API calls."
135
+ },
136
+ {
137
+ "type": [
138
+ "null",
139
+ "string"
140
+ ],
141
+ "name": "email",
142
+ "default": null,
143
+ "doc": "The user's email address (fallback identifier).\nUsed when other IDs are not available or for email-based user resolution."
144
+ },
145
+ {
146
+ "type": [
147
+ "null",
148
+ "string"
149
+ ],
150
+ "name": "displayName",
151
+ "default": null,
152
+ "doc": "The user's display name (cached value, may be stale).\nRetrieved from Microsoft Graph API and cached for performance."
153
+ },
154
+ {
155
+ "type": [
156
+ "null",
157
+ "long"
158
+ ],
159
+ "name": "lastUpdated",
160
+ "default": null,
161
+ "doc": "The timestamp when the cached display name was last updated.\nUsed for TTL-based cache invalidation (milliseconds since epoch)."
162
+ }
163
+ ],
164
+ "doc": "Teams user information with cached display name and multiple ID support.\nFollows the same caching pattern as TeamsChannel for consistency."
165
+ }
166
+ ],
167
+ "name": "user",
168
+ "default": null,
169
+ "doc": "Optional structured user information with cached metadata.\nSupports both Azure AD user ID and Teams user ID with cached display name."
170
+ },
171
+ {
172
+ "type": [
173
+ "null",
174
+ {
175
+ "type": "array",
176
+ "items": {
177
+ "type": "record",
178
+ "name": "TeamsChannel",
179
+ "namespace": "com.linkedin.pegasus2avro.settings.global",
180
+ "fields": [
181
+ {
182
+ "type": "string",
183
+ "name": "id",
184
+ "doc": "The Teams channel ID (internal Teams identifier)."
185
+ },
186
+ {
187
+ "type": [
188
+ "null",
189
+ "string"
190
+ ],
191
+ "name": "name",
192
+ "default": null,
193
+ "doc": "The Teams channel display name (cached value, may be stale)."
194
+ },
195
+ {
196
+ "type": [
197
+ "null",
198
+ "long"
199
+ ],
200
+ "name": "lastUpdated",
201
+ "default": null,
202
+ "doc": "The timestamp when the cached name was last updated.\nUsed for TTL-based cache invalidation."
203
+ }
204
+ ],
205
+ "doc": "Teams channel information with cached display name."
206
+ }
207
+ }
208
+ ],
209
+ "name": "channels",
210
+ "default": null,
211
+ "doc": "Optional list of structured channels with cached metadata"
212
+ }
213
+ ],
214
+ "doc": "Microsoft Teams Notification settings for an actor."
215
+ }
216
+ ],
217
+ "name": "teamsSettings",
218
+ "default": null,
219
+ "doc": "Microsoft Teams Notification Settings"
220
+ },
96
221
  {
97
222
  "type": [
98
223
  "null",
@@ -0,0 +1,106 @@
1
+ {
2
+ "type": "record",
3
+ "Aspect": {
4
+ "name": "corpUserInvitationStatus"
5
+ },
6
+ "name": "CorpUserInvitationStatus",
7
+ "namespace": "com.linkedin.pegasus2avro.identity",
8
+ "fields": [
9
+ {
10
+ "Searchable": {
11
+ "fieldType": "URN",
12
+ "hasValuesFieldName": "hasRole",
13
+ "queryByDefault": false
14
+ },
15
+ "java": {
16
+ "class": "com.linkedin.pegasus2avro.common.urn.Urn"
17
+ },
18
+ "type": [
19
+ "null",
20
+ "string"
21
+ ],
22
+ "name": "role",
23
+ "default": null,
24
+ "doc": "Role will only work in non-sso environments today.",
25
+ "Urn": "Urn"
26
+ },
27
+ {
28
+ "type": {
29
+ "type": "record",
30
+ "name": "AuditStamp",
31
+ "namespace": "com.linkedin.pegasus2avro.common",
32
+ "fields": [
33
+ {
34
+ "type": "long",
35
+ "name": "time",
36
+ "doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
37
+ },
38
+ {
39
+ "java": {
40
+ "class": "com.linkedin.pegasus2avro.common.urn.Urn"
41
+ },
42
+ "type": "string",
43
+ "name": "actor",
44
+ "doc": "The entity (e.g. a member URN) which will be credited for moving the resource/association/sub-resource into the specific lifecycle stage. It is also the one used to authorize the change.",
45
+ "Urn": "Urn"
46
+ },
47
+ {
48
+ "java": {
49
+ "class": "com.linkedin.pegasus2avro.common.urn.Urn"
50
+ },
51
+ "type": [
52
+ "null",
53
+ "string"
54
+ ],
55
+ "name": "impersonator",
56
+ "default": null,
57
+ "doc": "The entity (e.g. a service URN) which performs the change on behalf of the Actor and must be authorized to act as the Actor.",
58
+ "Urn": "Urn"
59
+ },
60
+ {
61
+ "type": [
62
+ "null",
63
+ "string"
64
+ ],
65
+ "name": "message",
66
+ "default": null,
67
+ "doc": "Additional context around how DataHub was informed of the particular change. For example: was the change created by an automated process, or manually."
68
+ }
69
+ ],
70
+ "doc": "Data captured on a resource/association/sub-resource level giving insight into when that resource/association/sub-resource moved into a particular lifecycle stage, and who acted to move it into that specific lifecycle stage."
71
+ },
72
+ "name": "created",
73
+ "doc": "Created Audit"
74
+ },
75
+ {
76
+ "Searchable": {
77
+ "fieldName": "invitationStatus",
78
+ "fieldType": "KEYWORD",
79
+ "queryByDefault": false
80
+ },
81
+ "type": {
82
+ "type": "enum",
83
+ "name": "InvitationStatus",
84
+ "namespace": "com.linkedin.pegasus2avro.identity",
85
+ "symbols": [
86
+ "SENT",
87
+ "ACCEPTED",
88
+ "REVOKED",
89
+ "SUGGESTION_DISMISSED"
90
+ ]
91
+ },
92
+ "name": "status",
93
+ "doc": "The status of the invitation"
94
+ },
95
+ {
96
+ "type": "com.linkedin.pegasus2avro.common.AuditStamp",
97
+ "name": "lastUpdated",
98
+ "doc": "Last Status Change Audit"
99
+ },
100
+ {
101
+ "type": "string",
102
+ "name": "invitationToken",
103
+ "doc": "Unique token for the invitation URL - hashed via SecretService "
104
+ }
105
+ ]
106
+ }
@@ -21,6 +21,8 @@
21
21
  "testResults",
22
22
  "subTypes",
23
23
  "slackUserInfo",
24
+ "corpUserUsageFeatures",
25
+ "corpUserInvitationStatus",
24
26
  "share",
25
27
  "formNotifications"
26
28
  ],
@@ -80,13 +80,15 @@
80
80
  "type": "enum",
81
81
  "symbolDocs": {
82
82
  "EMAIL": "Email target type.",
83
- "SLACK": "Slack target type."
83
+ "SLACK": "Slack target type.",
84
+ "TEAMS": "Microsoft Teams target type."
84
85
  },
85
86
  "name": "NotificationSinkType",
86
87
  "namespace": "com.linkedin.pegasus2avro.event.notification",
87
88
  "symbols": [
88
89
  "SLACK",
89
- "EMAIL"
90
+ "EMAIL",
91
+ "TEAMS"
90
92
  ],
91
93
  "doc": "A type of sink / platform to send a notification to."
92
94
  }
@@ -152,6 +154,129 @@
152
154
  "default": null,
153
155
  "doc": "Email Notification Settings"
154
156
  },
157
+ {
158
+ "type": [
159
+ "null",
160
+ {
161
+ "type": "record",
162
+ "name": "TeamsNotificationSettings",
163
+ "namespace": "com.linkedin.pegasus2avro.event.notification.settings",
164
+ "fields": [
165
+ {
166
+ "type": [
167
+ "null",
168
+ {
169
+ "type": "record",
170
+ "name": "TeamsUser",
171
+ "namespace": "com.linkedin.pegasus2avro.settings.global",
172
+ "fields": [
173
+ {
174
+ "type": [
175
+ "null",
176
+ "string"
177
+ ],
178
+ "name": "teamsUserId",
179
+ "default": null,
180
+ "doc": "The Teams user ID (internal Teams identifier).\nThis is the primary identifier used for Teams messaging."
181
+ },
182
+ {
183
+ "Searchable": {
184
+ "fieldType": "KEYWORD",
185
+ "queryByDefault": false
186
+ },
187
+ "type": [
188
+ "null",
189
+ "string"
190
+ ],
191
+ "name": "azureUserId",
192
+ "default": null,
193
+ "doc": "The Azure AD user ID (Azure Active Directory object ID).\nThis is the primary identifier for Azure AD operations and Microsoft Graph API calls."
194
+ },
195
+ {
196
+ "type": [
197
+ "null",
198
+ "string"
199
+ ],
200
+ "name": "email",
201
+ "default": null,
202
+ "doc": "The user's email address (fallback identifier).\nUsed when other IDs are not available or for email-based user resolution."
203
+ },
204
+ {
205
+ "type": [
206
+ "null",
207
+ "string"
208
+ ],
209
+ "name": "displayName",
210
+ "default": null,
211
+ "doc": "The user's display name (cached value, may be stale).\nRetrieved from Microsoft Graph API and cached for performance."
212
+ },
213
+ {
214
+ "type": [
215
+ "null",
216
+ "long"
217
+ ],
218
+ "name": "lastUpdated",
219
+ "default": null,
220
+ "doc": "The timestamp when the cached display name was last updated.\nUsed for TTL-based cache invalidation (milliseconds since epoch)."
221
+ }
222
+ ],
223
+ "doc": "Teams user information with cached display name and multiple ID support.\nFollows the same caching pattern as TeamsChannel for consistency."
224
+ }
225
+ ],
226
+ "name": "user",
227
+ "default": null,
228
+ "doc": "Optional structured user information with cached metadata.\nSupports both Azure AD user ID and Teams user ID with cached display name."
229
+ },
230
+ {
231
+ "type": [
232
+ "null",
233
+ {
234
+ "type": "array",
235
+ "items": {
236
+ "type": "record",
237
+ "name": "TeamsChannel",
238
+ "namespace": "com.linkedin.pegasus2avro.settings.global",
239
+ "fields": [
240
+ {
241
+ "type": "string",
242
+ "name": "id",
243
+ "doc": "The Teams channel ID (internal Teams identifier)."
244
+ },
245
+ {
246
+ "type": [
247
+ "null",
248
+ "string"
249
+ ],
250
+ "name": "name",
251
+ "default": null,
252
+ "doc": "The Teams channel display name (cached value, may be stale)."
253
+ },
254
+ {
255
+ "type": [
256
+ "null",
257
+ "long"
258
+ ],
259
+ "name": "lastUpdated",
260
+ "default": null,
261
+ "doc": "The timestamp when the cached name was last updated.\nUsed for TTL-based cache invalidation."
262
+ }
263
+ ],
264
+ "doc": "Teams channel information with cached display name."
265
+ }
266
+ }
267
+ ],
268
+ "name": "channels",
269
+ "default": null,
270
+ "doc": "Optional list of structured channels with cached metadata"
271
+ }
272
+ ],
273
+ "doc": "Microsoft Teams Notification settings for an actor."
274
+ }
275
+ ],
276
+ "name": "teamsSettings",
277
+ "default": null,
278
+ "doc": "Microsoft Teams Notification Settings"
279
+ },
155
280
  {
156
281
  "type": [
157
282
  "null",