From 6a27a5169dd7a13941842344a8a0308a67ed801c Mon Sep 17 00:00:00 2001 From: Gleb Kanterov Date: Mon, 7 Apr 2025 17:23:22 +0200 Subject: [PATCH] [Python] Remove one-ofs and default values --- .../bundles/jobs/_models/cron_schedule.py | 16 ++++---- .../bundles/jobs/_models/job_permission.py | 12 ------ .../bundles/jobs/_models/job_run_as.py | 11 ------ .../databricks/bundles/jobs/_models/task.py | 13 ------- .../bundles/jobs/_models/trigger_settings.py | 12 ------ .../databricks_tests/core/test_transform.py | 2 + .../databricks_tests/jobs/test_permission.py | 37 ------------------- 7 files changed, 10 insertions(+), 93 deletions(-) delete mode 100644 experimental/python/databricks_tests/jobs/test_permission.py diff --git a/experimental/python/databricks/bundles/jobs/_models/cron_schedule.py b/experimental/python/databricks/bundles/jobs/_models/cron_schedule.py index 85432c4b3c..43fb3306b9 100644 --- a/experimental/python/databricks/bundles/jobs/_models/cron_schedule.py +++ b/experimental/python/databricks/bundles/jobs/_models/cron_schedule.py @@ -19,14 +19,14 @@ class CronSchedule: A Cron expression using Quartz syntax that describes the schedule for a job. See [Cron Trigger](http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html) for details. This field is required. """ - pause_status: VariableOrOptional[PauseStatus] = None + timezone_id: VariableOr[str] """ - Indicate whether this schedule is paused or not. + A Java timezone ID. The schedule for a job is resolved with respect to this timezone. See [Java TimeZone](https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html) for details. This field is required. """ - timezone_id: VariableOr[str] = "UTC" + pause_status: VariableOrOptional[PauseStatus] = None """ - A Java timezone ID. The schedule for a job is resolved with respect to this timezone. See [Java TimeZone](https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html) for details. This field is required. + Indicate whether this schedule is paused or not. """ @classmethod @@ -45,14 +45,14 @@ class CronScheduleDict(TypedDict, total=False): A Cron expression using Quartz syntax that describes the schedule for a job. See [Cron Trigger](http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html) for details. This field is required. """ - pause_status: VariableOrOptional[PauseStatusParam] + timezone_id: VariableOr[str] """ - Indicate whether this schedule is paused or not. + A Java timezone ID. The schedule for a job is resolved with respect to this timezone. See [Java TimeZone](https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html) for details. This field is required. """ - timezone_id: VariableOr[str] + pause_status: VariableOrOptional[PauseStatusParam] """ - A Java timezone ID. The schedule for a job is resolved with respect to this timezone. See [Java TimeZone](https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html) for details. This field is required. + Indicate whether this schedule is paused or not. """ diff --git a/experimental/python/databricks/bundles/jobs/_models/job_permission.py b/experimental/python/databricks/bundles/jobs/_models/job_permission.py index 986b035933..b2ab73cee0 100644 --- a/experimental/python/databricks/bundles/jobs/_models/job_permission.py +++ b/experimental/python/databricks/bundles/jobs/_models/job_permission.py @@ -25,18 +25,6 @@ class JobPermission: user_name: VariableOrOptional[str] = None - def __post_init__(self): - union_fields = [ - self.user_name, - self.service_principal_name, - self.group_name, - ] - - if sum(f is not None for f in union_fields) != 1: - raise ValueError( - "JobPermission must specify exactly one of 'user_name', 'service_principal_name', 'group_name'" - ) - @classmethod def from_dict(cls, value: "JobPermissionDict") -> "Self": return _transform(cls, value) diff --git a/experimental/python/databricks/bundles/jobs/_models/job_run_as.py b/experimental/python/databricks/bundles/jobs/_models/job_run_as.py index ddf6a14522..59b1af3161 100644 --- a/experimental/python/databricks/bundles/jobs/_models/job_run_as.py +++ b/experimental/python/databricks/bundles/jobs/_models/job_run_as.py @@ -27,17 +27,6 @@ class JobRunAs: The email of an active workspace user. Non-admin users can only set this field to their own email. """ - def __post_init__(self): - union_fields = [ - self.user_name, - self.service_principal_name, - ] - - if sum(f is not None for f in union_fields) != 1: - raise ValueError( - "JobRunAs must specify exactly one of 'user_name', 'service_principal_name'" - ) - @classmethod def from_dict(cls, value: "JobRunAsDict") -> "Self": return _transform(cls, value) diff --git a/experimental/python/databricks/bundles/jobs/_models/task.py b/experimental/python/databricks/bundles/jobs/_models/task.py index b9d9886ec3..65edc7f76f 100644 --- a/experimental/python/databricks/bundles/jobs/_models/task.py +++ b/experimental/python/databricks/bundles/jobs/_models/task.py @@ -269,19 +269,6 @@ class Task: A collection of system notification IDs to notify when runs of this task begin or complete. The default behavior is to not send any system notifications. """ - def __post_init__(self): - union_fields = [ - self.new_cluster, - self.job_cluster_key, - self.environment_key, - self.existing_cluster_id, - ] - - if sum(f is not None for f in union_fields) > 1: - raise ValueError( - "Only one of 'new_cluster', 'job_cluster_key', 'environment_key', 'existing_cluster_id' can be specified in Task" - ) - @classmethod def from_dict(cls, value: "TaskDict") -> "Self": return _transform(cls, value) diff --git a/experimental/python/databricks/bundles/jobs/_models/trigger_settings.py b/experimental/python/databricks/bundles/jobs/_models/trigger_settings.py index 5256efce67..4608c98c82 100644 --- a/experimental/python/databricks/bundles/jobs/_models/trigger_settings.py +++ b/experimental/python/databricks/bundles/jobs/_models/trigger_settings.py @@ -46,18 +46,6 @@ class TriggerSettings: :meta private: [EXPERIMENTAL] """ - def __post_init__(self): - union_fields = [ - self.file_arrival, - self.periodic, - self.table_update, - ] - - if sum(f is not None for f in union_fields) != 1: - raise ValueError( - "TriggerSettings must specify exactly one of 'file_arrival', 'periodic', 'table_update'" - ) - @classmethod def from_dict(cls, value: "TriggerSettingsDict") -> "Self": return _transform(cls, value) diff --git a/experimental/python/databricks_tests/core/test_transform.py b/experimental/python/databricks_tests/core/test_transform.py index 93b25d37e1..b7830e4832 100644 --- a/experimental/python/databricks_tests/core/test_transform.py +++ b/experimental/python/databricks_tests/core/test_transform.py @@ -233,12 +233,14 @@ def test_cron_schedule(): CronSchedule, { "quartz_cron_expression": "0 0 0 * * ?", + "timezone_id": "UTC", "pause_status": Variable(path="var.pause_status", type=str), }, ) assert cron_schedule == CronSchedule( quartz_cron_expression="0 0 0 * * ?", + timezone_id="UTC", pause_status=Variable(path="var.pause_status", type=PauseStatus), ) diff --git a/experimental/python/databricks_tests/jobs/test_permission.py b/experimental/python/databricks_tests/jobs/test_permission.py deleted file mode 100644 index d64d6b790a..0000000000 --- a/experimental/python/databricks_tests/jobs/test_permission.py +++ /dev/null @@ -1,37 +0,0 @@ -import pytest - -from databricks.bundles.jobs import JobPermission -from databricks.bundles.jobs._models.job_permission_level import JobPermissionLevel - - -def test_oneof_one(): - permission = JobPermission( - level=JobPermissionLevel.CAN_VIEW, - user_name="test@example.com", - ) - - assert permission - - -def test_oneof_none(): - with pytest.raises(ValueError) as exc_info: - JobPermission(level=JobPermissionLevel.CAN_VIEW) - - assert exc_info.exconly() == ( - "ValueError: JobPermission must specify exactly one of 'user_name', " - "'service_principal_name', 'group_name'" - ) - - -def test_oneof_both(): - with pytest.raises(ValueError) as exc_info: - JobPermission( - level=JobPermissionLevel.CAN_VIEW, - user_name="test@example.com", - service_principal_name="secret", - ) - - assert exc_info.exconly() == ( - "ValueError: JobPermission must specify exactly one of 'user_name', " - "'service_principal_name', 'group_name'" - )