acryl-datahub-cloud 0.3.12.4rc2__py3-none-any.whl → 0.3.13__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 (53) hide show
  1. acryl_datahub_cloud/_codegen_config.json +1 -1
  2. acryl_datahub_cloud/lineage_features/source.py +8 -2
  3. acryl_datahub_cloud/metadata/_urns/urn_defs.py +168 -0
  4. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/actionworkflow/__init__.py +53 -0
  5. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/assertion/__init__.py +2 -0
  6. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/identity/__init__.py +2 -0
  7. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/logical/__init__.py +15 -0
  8. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/key/__init__.py +6 -0
  9. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/module/__init__.py +31 -0
  10. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/global/__init__.py +4 -0
  11. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/template/__init__.py +25 -0
  12. acryl_datahub_cloud/metadata/schema.avsc +1543 -275
  13. acryl_datahub_cloud/metadata/schema_classes.py +2040 -4
  14. acryl_datahub_cloud/metadata/schemas/ActionRequestInfo.avsc +136 -1
  15. acryl_datahub_cloud/metadata/schemas/ActionWorkflowInfo.avsc +683 -0
  16. acryl_datahub_cloud/metadata/schemas/ActionWorkflowKey.avsc +21 -0
  17. acryl_datahub_cloud/metadata/schemas/AssertionAnalyticsRunEvent.avsc +46 -0
  18. acryl_datahub_cloud/metadata/schemas/AssertionInfo.avsc +25 -0
  19. acryl_datahub_cloud/metadata/schemas/AssertionRunEvent.avsc +25 -0
  20. acryl_datahub_cloud/metadata/schemas/CorpUserSettings.avsc +50 -0
  21. acryl_datahub_cloud/metadata/schemas/DataHubPageModuleKey.avsc +21 -0
  22. acryl_datahub_cloud/metadata/schemas/DataHubPageModuleProperties.avsc +281 -0
  23. acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateKey.avsc +21 -0
  24. acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateProperties.avsc +175 -0
  25. acryl_datahub_cloud/metadata/schemas/DataJobInputOutput.avsc +8 -0
  26. acryl_datahub_cloud/metadata/schemas/DatasetKey.avsc +1 -0
  27. acryl_datahub_cloud/metadata/schemas/GlobalSettingsInfo.avsc +71 -0
  28. acryl_datahub_cloud/metadata/schemas/LogicalParent.avsc +140 -0
  29. acryl_datahub_cloud/metadata/schemas/MetadataChangeEvent.avsc +163 -1
  30. acryl_datahub_cloud/metadata/schemas/MetadataChangeLog.avsc +62 -44
  31. acryl_datahub_cloud/metadata/schemas/MetadataChangeProposal.avsc +61 -0
  32. acryl_datahub_cloud/metadata/schemas/MonitorInfo.avsc +25 -0
  33. acryl_datahub_cloud/metadata/schemas/NotificationRequest.avsc +4 -0
  34. acryl_datahub_cloud/metadata/schemas/QuerySubjects.avsc +1 -12
  35. acryl_datahub_cloud/metadata/schemas/SchemaFieldKey.avsc +1 -0
  36. acryl_datahub_cloud/metadata/schemas/SystemMetadata.avsc +61 -0
  37. acryl_datahub_cloud/metadata/schemas/UpstreamLineage.avsc +9 -0
  38. acryl_datahub_cloud/sdk/assertion/__init__.py +49 -0
  39. acryl_datahub_cloud/sdk/assertion/assertion_base.py +65 -806
  40. acryl_datahub_cloud/sdk/assertion/freshness_assertion.py +201 -0
  41. acryl_datahub_cloud/sdk/assertion/smart_freshness_assertion.py +165 -0
  42. acryl_datahub_cloud/sdk/assertion/smart_volume_assertion.py +162 -0
  43. acryl_datahub_cloud/sdk/assertion/sql_assertion.py +256 -0
  44. acryl_datahub_cloud/sdk/assertion/volume_assertion.py +156 -0
  45. acryl_datahub_cloud/sdk/assertion_input/assertion_input.py +0 -344
  46. acryl_datahub_cloud/sdk/assertion_input/smart_freshness_assertion_input.py +220 -0
  47. acryl_datahub_cloud/sdk/assertion_input/smart_volume_assertion_input.py +191 -0
  48. acryl_datahub_cloud/sdk/assertions_client.py +6 -2
  49. {acryl_datahub_cloud-0.3.12.4rc2.dist-info → acryl_datahub_cloud-0.3.13.dist-info}/METADATA +46 -44
  50. {acryl_datahub_cloud-0.3.12.4rc2.dist-info → acryl_datahub_cloud-0.3.13.dist-info}/RECORD +53 -35
  51. {acryl_datahub_cloud-0.3.12.4rc2.dist-info → acryl_datahub_cloud-0.3.13.dist-info}/WHEEL +0 -0
  52. {acryl_datahub_cloud-0.3.12.4rc2.dist-info → acryl_datahub_cloud-0.3.13.dist-info}/entry_points.txt +0 -0
  53. {acryl_datahub_cloud-0.3.12.4rc2.dist-info → acryl_datahub_cloud-0.3.13.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,191 @@
1
+ """
2
+ Smart Volume Assertion Input classes for DataHub.
3
+
4
+ This module contains the _SmartVolumeAssertionInput class that handles
5
+ input validation and entity creation for smart volume assertions.
6
+ """
7
+
8
+ from datetime import datetime
9
+ from typing import Optional, Union
10
+
11
+ from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
12
+ DEFAULT_HOURLY_SCHEDULE,
13
+ AssertionIncidentBehaviorInputTypes,
14
+ DetectionMechanismInputTypes,
15
+ ExclusionWindowInputTypes,
16
+ FieldSpecType,
17
+ InferenceSensitivity,
18
+ _AssertionInput,
19
+ _DatasetProfile,
20
+ _HasSmartAssertionInputs,
21
+ _InformationSchema,
22
+ _Query,
23
+ )
24
+ from acryl_datahub_cloud.sdk.entities.assertion import (
25
+ AssertionInfoInputType,
26
+ TagsInputType,
27
+ )
28
+ from acryl_datahub_cloud.sdk.errors import SDKNotYetSupportedError
29
+ from datahub.metadata import schema_classes as models
30
+ from datahub.metadata.urns import AssertionUrn, CorpUserUrn, DatasetUrn
31
+ from datahub.sdk.entity_client import EntityClient
32
+
33
+
34
+ class _SmartVolumeAssertionInput(_AssertionInput, _HasSmartAssertionInputs):
35
+ def __init__(
36
+ self,
37
+ *,
38
+ # Required fields
39
+ dataset_urn: Union[str, DatasetUrn],
40
+ entity_client: EntityClient, # Needed to get the schema field spec for the detection mechanism if needed
41
+ # Optional fields
42
+ urn: Optional[Union[str, AssertionUrn]] = None,
43
+ display_name: Optional[str] = None,
44
+ enabled: bool = True,
45
+ schedule: Optional[Union[str, models.CronScheduleClass]] = None,
46
+ detection_mechanism: DetectionMechanismInputTypes = None,
47
+ sensitivity: Optional[Union[str, InferenceSensitivity]] = None,
48
+ exclusion_windows: Optional[ExclusionWindowInputTypes] = None,
49
+ training_data_lookback_days: Optional[int] = None,
50
+ incident_behavior: Optional[AssertionIncidentBehaviorInputTypes] = None,
51
+ tags: Optional[TagsInputType] = None,
52
+ created_by: Union[str, CorpUserUrn],
53
+ created_at: datetime,
54
+ updated_by: Union[str, CorpUserUrn],
55
+ updated_at: datetime,
56
+ ):
57
+ _AssertionInput.__init__(
58
+ self,
59
+ dataset_urn=dataset_urn,
60
+ entity_client=entity_client,
61
+ urn=urn,
62
+ display_name=display_name,
63
+ enabled=enabled,
64
+ schedule=schedule,
65
+ detection_mechanism=detection_mechanism,
66
+ incident_behavior=incident_behavior,
67
+ tags=tags,
68
+ source_type=models.AssertionSourceTypeClass.INFERRED, # Smart assertions are of type inferred, not native
69
+ created_by=created_by,
70
+ created_at=created_at,
71
+ updated_by=updated_by,
72
+ updated_at=updated_at,
73
+ )
74
+ _HasSmartAssertionInputs.__init__(
75
+ self,
76
+ sensitivity=sensitivity,
77
+ exclusion_windows=exclusion_windows,
78
+ training_data_lookback_days=training_data_lookback_days,
79
+ )
80
+
81
+ def _create_assertion_info(
82
+ self, filter: Optional[models.DatasetFilterClass]
83
+ ) -> AssertionInfoInputType:
84
+ """
85
+ Create a VolumeAssertionInfoClass for a smart volume assertion.
86
+
87
+ Args:
88
+ filter: Optional filter to apply to the assertion.
89
+
90
+ Returns:
91
+ A VolumeAssertionInfoClass configured for smart volume.
92
+ """
93
+ return models.VolumeAssertionInfoClass(
94
+ type=models.VolumeAssertionTypeClass.ROW_COUNT_TOTAL, # Currently only ROW_COUNT_TOTAL is supported for smart volume
95
+ entity=str(self.dataset_urn),
96
+ filter=filter,
97
+ )
98
+
99
+ def _convert_schedule(self) -> models.CronScheduleClass:
100
+ """Create a schedule for a smart volume assertion.
101
+
102
+ Returns:
103
+ A CronScheduleClass with appropriate schedule settings.
104
+ """
105
+ if self.schedule is None:
106
+ return DEFAULT_HOURLY_SCHEDULE
107
+
108
+ return models.CronScheduleClass(
109
+ cron=self.schedule.cron,
110
+ timezone=self.schedule.timezone,
111
+ )
112
+
113
+ def _get_assertion_evaluation_parameters(
114
+ self, source_type: str, field: Optional[FieldSpecType]
115
+ ) -> models.AssertionEvaluationParametersClass:
116
+ return models.AssertionEvaluationParametersClass(
117
+ type=models.AssertionEvaluationParametersTypeClass.DATASET_VOLUME,
118
+ datasetVolumeParameters=models.DatasetVolumeAssertionParametersClass(
119
+ sourceType=source_type,
120
+ ),
121
+ )
122
+
123
+ def _convert_assertion_source_type_and_field(
124
+ self,
125
+ ) -> tuple[str, Optional[FieldSpecType]]:
126
+ """
127
+ Convert detection mechanism into source type and field specification for volume assertions.
128
+
129
+ Returns:
130
+ A tuple of (source_type, field) where field may be None.
131
+ Note that the source_type is a string, not a models.DatasetFreshnessSourceTypeClass (or other assertion source type) since
132
+ the source type is not a enum in the code generated from the DatasetFreshnessSourceType enum in the PDL.
133
+
134
+ Raises:
135
+ SDKNotYetSupportedError: If the detection mechanism is not supported.
136
+ SDKUsageError: If the field (column) is not found in the dataset,
137
+ and the detection mechanism requires a field. Also if the field
138
+ is not an allowed type for the detection mechanism.
139
+ """
140
+ source_type = models.DatasetVolumeSourceTypeClass.INFORMATION_SCHEMA
141
+ field = None
142
+
143
+ if isinstance(self.detection_mechanism, _Query):
144
+ source_type = models.DatasetVolumeSourceTypeClass.QUERY
145
+ elif isinstance(self.detection_mechanism, _InformationSchema):
146
+ source_type = models.DatasetVolumeSourceTypeClass.INFORMATION_SCHEMA
147
+ elif isinstance(self.detection_mechanism, _DatasetProfile):
148
+ source_type = models.DatasetVolumeSourceTypeClass.DATAHUB_DATASET_PROFILE
149
+ else:
150
+ raise SDKNotYetSupportedError(
151
+ f"Detection mechanism {self.detection_mechanism} not yet supported for smart volume assertions"
152
+ )
153
+
154
+ return source_type, field
155
+
156
+ def _create_monitor_info(
157
+ self,
158
+ assertion_urn: AssertionUrn,
159
+ status: models.MonitorStatusClass,
160
+ schedule: models.CronScheduleClass,
161
+ ) -> models.MonitorInfoClass:
162
+ """
163
+ Create a MonitorInfoClass with all the necessary components.
164
+ """
165
+ source_type, field = self._convert_assertion_source_type_and_field()
166
+ return models.MonitorInfoClass(
167
+ type=models.MonitorTypeClass.ASSERTION,
168
+ status=status,
169
+ assertionMonitor=models.AssertionMonitorClass(
170
+ assertions=[
171
+ models.AssertionEvaluationSpecClass(
172
+ assertion=str(assertion_urn),
173
+ schedule=schedule,
174
+ parameters=self._get_assertion_evaluation_parameters(
175
+ str(source_type), field
176
+ ),
177
+ ),
178
+ ],
179
+ settings=models.AssertionMonitorSettingsClass(
180
+ adjustmentSettings=models.AssertionAdjustmentSettingsClass(
181
+ sensitivity=self._convert_sensitivity(),
182
+ exclusionWindows=self._convert_exclusion_windows(),
183
+ trainingDataLookbackWindowDays=self.training_data_lookback_days,
184
+ ),
185
+ ),
186
+ ),
187
+ )
188
+
189
+ def _assertion_type(self) -> str:
190
+ """Get the assertion type."""
191
+ return models.AssertionTypeClass.VOLUME
@@ -27,8 +27,6 @@ from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
27
27
  InferenceSensitivity,
28
28
  TimeWindowSizeInputTypes,
29
29
  _AssertionInput,
30
- _SmartFreshnessAssertionInput,
31
- _SmartVolumeAssertionInput,
32
30
  )
33
31
  from acryl_datahub_cloud.sdk.assertion_input.column_metric_assertion_input import (
34
32
  ColumnMetricAssertionParameters,
@@ -45,6 +43,12 @@ from acryl_datahub_cloud.sdk.assertion_input.freshness_assertion_input import (
45
43
  from acryl_datahub_cloud.sdk.assertion_input.smart_column_metric_assertion_input import (
46
44
  _SmartColumnMetricAssertionInput,
47
45
  )
46
+ from acryl_datahub_cloud.sdk.assertion_input.smart_freshness_assertion_input import (
47
+ _SmartFreshnessAssertionInput,
48
+ )
49
+ from acryl_datahub_cloud.sdk.assertion_input.smart_volume_assertion_input import (
50
+ _SmartVolumeAssertionInput,
51
+ )
48
52
  from acryl_datahub_cloud.sdk.assertion_input.sql_assertion_input import (
49
53
  SqlAssertionCondition,
50
54
  SqlAssertionCriteria,
@@ -1,6 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acryl-datahub-cloud
3
- Version: 0.3.12.4rc2
3
+ Version: 0.3.13
4
+ Requires-Python: >=3.10
4
5
  Requires-Dist: avro-gen3==0.7.16
5
6
  Requires-Dist: acryl-datahub
6
7
  Requires-Dist: croniter
@@ -8,92 +9,93 @@ Requires-Dist: pytz
8
9
  Requires-Dist: types-croniter
9
10
  Requires-Dist: tzlocal
10
11
  Provides-Extra: datahub-lineage-features
11
- Requires-Dist: pandas; extra == "datahub-lineage-features"
12
12
  Requires-Dist: pydantic<2; extra == "datahub-lineage-features"
13
- Requires-Dist: tenacity; extra == "datahub-lineage-features"
14
- Requires-Dist: opensearch-py==2.4.2; extra == "datahub-lineage-features"
15
13
  Requires-Dist: duckdb; extra == "datahub-lineage-features"
16
14
  Requires-Dist: pyarrow; extra == "datahub-lineage-features"
15
+ Requires-Dist: tenacity; extra == "datahub-lineage-features"
16
+ Requires-Dist: opensearch-py==2.4.2; extra == "datahub-lineage-features"
17
+ Requires-Dist: pandas; extra == "datahub-lineage-features"
17
18
  Provides-Extra: datahub-reporting-forms
18
- Requires-Dist: pandas; extra == "datahub-reporting-forms"
19
+ Requires-Dist: boto3; extra == "datahub-reporting-forms"
19
20
  Requires-Dist: pydantic<2; extra == "datahub-reporting-forms"
20
21
  Requires-Dist: duckdb; extra == "datahub-reporting-forms"
21
- Requires-Dist: termcolor==2.5.0; extra == "datahub-reporting-forms"
22
22
  Requires-Dist: pyarrow; extra == "datahub-reporting-forms"
23
- Requires-Dist: boto3; extra == "datahub-reporting-forms"
23
+ Requires-Dist: pandas; extra == "datahub-reporting-forms"
24
+ Requires-Dist: termcolor==2.5.0; extra == "datahub-reporting-forms"
24
25
  Provides-Extra: datahub-reporting-extract-graph
25
- Requires-Dist: pandas; extra == "datahub-reporting-extract-graph"
26
+ Requires-Dist: boto3; extra == "datahub-reporting-extract-graph"
26
27
  Requires-Dist: pydantic<2; extra == "datahub-reporting-extract-graph"
27
- Requires-Dist: opensearch-py==2.4.2; extra == "datahub-reporting-extract-graph"
28
28
  Requires-Dist: duckdb; extra == "datahub-reporting-extract-graph"
29
29
  Requires-Dist: pyarrow; extra == "datahub-reporting-extract-graph"
30
- Requires-Dist: boto3; extra == "datahub-reporting-extract-graph"
30
+ Requires-Dist: opensearch-py==2.4.2; extra == "datahub-reporting-extract-graph"
31
+ Requires-Dist: pandas; extra == "datahub-reporting-extract-graph"
31
32
  Provides-Extra: datahub-reporting-extract-sql
32
- Requires-Dist: pandas; extra == "datahub-reporting-extract-sql"
33
+ Requires-Dist: boto3; extra == "datahub-reporting-extract-sql"
33
34
  Requires-Dist: pydantic<2; extra == "datahub-reporting-extract-sql"
34
35
  Requires-Dist: duckdb; extra == "datahub-reporting-extract-sql"
35
36
  Requires-Dist: pyarrow; extra == "datahub-reporting-extract-sql"
36
- Requires-Dist: boto3; extra == "datahub-reporting-extract-sql"
37
+ Requires-Dist: pandas; extra == "datahub-reporting-extract-sql"
37
38
  Provides-Extra: datahub-usage-reporting
38
- Requires-Dist: polars==1.30.0; extra == "datahub-usage-reporting"
39
- Requires-Dist: opensearch-py==2.4.2; extra == "datahub-usage-reporting"
39
+ Requires-Dist: boto3; extra == "datahub-usage-reporting"
40
+ Requires-Dist: pyarrow<=18.0.0; extra == "datahub-usage-reporting"
41
+ Requires-Dist: pydantic<2; extra == "datahub-usage-reporting"
42
+ Requires-Dist: duckdb; extra == "datahub-usage-reporting"
40
43
  Requires-Dist: scipy<=1.14.1; extra == "datahub-usage-reporting"
44
+ Requires-Dist: polars==1.30.0; extra == "datahub-usage-reporting"
45
+ Requires-Dist: pandas; extra == "datahub-usage-reporting"
41
46
  Requires-Dist: numpy<2; extra == "datahub-usage-reporting"
42
47
  Requires-Dist: pyarrow; extra == "datahub-usage-reporting"
48
+ Requires-Dist: opensearch-py==2.4.2; extra == "datahub-usage-reporting"
43
49
  Requires-Dist: elasticsearch==7.13.4; extra == "datahub-usage-reporting"
44
- Requires-Dist: pandas; extra == "datahub-usage-reporting"
45
- Requires-Dist: pydantic<2; extra == "datahub-usage-reporting"
46
- Requires-Dist: duckdb; extra == "datahub-usage-reporting"
47
- Requires-Dist: pyarrow<=18.0.0; extra == "datahub-usage-reporting"
48
50
  Requires-Dist: termcolor==2.5.0; extra == "datahub-usage-reporting"
49
- Requires-Dist: boto3; extra == "datahub-usage-reporting"
50
51
  Provides-Extra: datahub-metadata-sharing
51
52
  Requires-Dist: tenacity; extra == "datahub-metadata-sharing"
52
53
  Provides-Extra: datahub-action-request-owner
53
54
  Requires-Dist: tenacity; extra == "datahub-action-request-owner"
54
55
  Provides-Extra: acryl-cs-issues
55
- Requires-Dist: openai; extra == "acryl-cs-issues"
56
56
  Requires-Dist: slack-sdk; extra == "acryl-cs-issues"
57
- Requires-Dist: zenpy; extra == "acryl-cs-issues"
58
57
  Requires-Dist: jinja2; extra == "acryl-cs-issues"
58
+ Requires-Dist: zenpy; extra == "acryl-cs-issues"
59
+ Requires-Dist: openai; extra == "acryl-cs-issues"
59
60
  Provides-Extra: datahub-forms-notifications
60
61
  Requires-Dist: tenacity; extra == "datahub-forms-notifications"
61
62
  Provides-Extra: all
63
+ Requires-Dist: boto3; extra == "all"
64
+ Requires-Dist: scipy<=1.14.1; extra == "all"
65
+ Requires-Dist: pandas; extra == "all"
66
+ Requires-Dist: pyarrow; extra == "all"
67
+ Requires-Dist: zenpy; extra == "all"
62
68
  Requires-Dist: tenacity; extra == "all"
63
69
  Requires-Dist: opensearch-py==2.4.2; extra == "all"
64
- Requires-Dist: jinja2; extra == "all"
65
- Requires-Dist: scipy<=1.14.1; extra == "all"
66
- Requires-Dist: openai; extra == "all"
70
+ Requires-Dist: termcolor==2.5.0; extra == "all"
71
+ Requires-Dist: pyarrow<=18.0.0; extra == "all"
67
72
  Requires-Dist: pydantic<2; extra == "all"
68
73
  Requires-Dist: duckdb; extra == "all"
69
- Requires-Dist: pyarrow<=18.0.0; extra == "all"
70
- Requires-Dist: termcolor==2.5.0; extra == "all"
74
+ Requires-Dist: jinja2; extra == "all"
75
+ Requires-Dist: openai; extra == "all"
71
76
  Requires-Dist: polars==1.30.0; extra == "all"
72
- Requires-Dist: slack-sdk; extra == "all"
73
77
  Requires-Dist: numpy<2; extra == "all"
74
- Requires-Dist: zenpy; extra == "all"
75
- Requires-Dist: pyarrow; extra == "all"
78
+ Requires-Dist: slack-sdk; extra == "all"
76
79
  Requires-Dist: elasticsearch==7.13.4; extra == "all"
77
- Requires-Dist: pandas; extra == "all"
78
- Requires-Dist: boto3; extra == "all"
79
80
  Provides-Extra: dev
80
- Requires-Dist: polars==1.30.0; extra == "dev"
81
- Requires-Dist: tenacity; extra == "dev"
82
- Requires-Dist: opensearch-py==2.4.2; extra == "dev"
83
- Requires-Dist: jinja2; extra == "dev"
84
- Requires-Dist: scipy<=1.14.1; extra == "dev"
81
+ Requires-Dist: boto3; extra == "dev"
85
82
  Requires-Dist: slack-sdk; extra == "dev"
83
+ Requires-Dist: pyarrow<=18.0.0; extra == "dev"
84
+ Requires-Dist: pydantic<2; extra == "dev"
85
+ Requires-Dist: duckdb; extra == "dev"
86
+ Requires-Dist: scipy<=1.14.1; extra == "dev"
87
+ Requires-Dist: jinja2; extra == "dev"
88
+ Requires-Dist: openai; extra == "dev"
89
+ Requires-Dist: polars==1.30.0; extra == "dev"
90
+ Requires-Dist: pandas; extra == "dev"
91
+ Requires-Dist: acryl-datahub[dev]; extra == "dev"
86
92
  Requires-Dist: numpy<2; extra == "dev"
87
- Requires-Dist: zenpy; extra == "dev"
88
93
  Requires-Dist: pyarrow; extra == "dev"
94
+ Requires-Dist: zenpy; extra == "dev"
95
+ Requires-Dist: tenacity; extra == "dev"
96
+ Requires-Dist: opensearch-py==2.4.2; extra == "dev"
89
97
  Requires-Dist: elasticsearch==7.13.4; extra == "dev"
90
- Requires-Dist: pandas; extra == "dev"
91
- Requires-Dist: acryl-datahub[dev]; extra == "dev"
92
- Requires-Dist: pydantic<2; extra == "dev"
93
- Requires-Dist: openai; extra == "dev"
94
- Requires-Dist: duckdb; extra == "dev"
95
- Requires-Dist: pyarrow<=18.0.0; extra == "dev"
96
98
  Requires-Dist: termcolor==2.5.0; extra == "dev"
97
- Requires-Dist: boto3; extra == "dev"
98
99
  Dynamic: provides-extra
99
100
  Dynamic: requires-dist
101
+ Dynamic: requires-python