Skip to content

Stop rejecting unknown grant privileges in validate and PyDABs - #7315

Merged
janniklasrose merged 4 commits into
mainfrom
janniklasrose/stop-warning-and-erroring-on-grant-privilege-enum
Nov 3, 2026
Merged

janniklasrose merged 4 commits into
mainfrom
janniklasrose/stop-warning-and-erroring-on-grant-privilege-enum

Conversation

@janniklasrose

Copy link
Copy Markdown
Member

Changes

The platform accepts grant privileges that the SDK's catalog.Privilege enum does not yet list (e.g. CREATE_SECRET, see #6770). The enum values flow from the OpenAPI spec into the SDK and from there into two CLI consumers, both of which rejected platform-valid values:

  • bundle validate warned, and --strict errored, because the enum validation allowlist (bundle/internal/validation/generated/enum_fields.go) is reflected from the SDK's Values().
  • PyDABs generated a strict class Privilege(Enum) and _transform raised ValueError on unknown strings.

This PR relaxes both while keeping the enum (and completion) in the JSON schema and PyDABs:

  • bundle/internal/validation/enum.go: exclude catalog.Privilege from the generator, so no resources.*.grants[*].privileges[*] pattern is checked. Regenerated with ./task generate-validation; the diff is exactly the 10 privilege entries.
  • python/codegen/codegen/generated_enum.py: new OPEN_ENUMS = {"catalog.Privilege"}. Open enums are generated with a _missing_ hook that turns unknown strings into pseudo-members cached in _value2member_map_ (the stdlib Flag pattern, so identity/equality and from_dict → as_dict round-trips hold), and PrivilegeParam gains | str so the dict form type-checks for unknown values. main.py fails if an OPEN_ENUMS key is not a known schema. Regenerated with ./task pydabs-codegen; the diff is exactly the 10 */_models/privilege.py modules.

Deploy was never affected: catalog.Privilege is type Privilege string in Go, so unknown values already passed through both engines.

Why not wait for an SDK bump?

The allowlist is only as current as the SDK, which lags the platform by design. Privileges are an area where the platform adds values frequently, so an SDK bump fixes today's gap and reopens tomorrow's. Dropping the client-side check for this one field removes the recurring breakage; the general enum validation stays in place for everything else.

Tests

  • acceptance/bundle/validate/enum: added a schema grant with INVALID_PRIVILEGE; the regenerated output shows no warning for it while the other enum warnings still fire.
  • python/codegen/codegen_tests/test_generated_enum.py: open vs closed enum code generation.
  • python/databricks_tests/core/test_open_enum.py: known value, unknown value accepted, cached identity, non-string rejected, dict round-trip.
  • Full PyDABs suite (491 passed), pyright clean, Sphinx docs build with -W.

This pull request and its description were written by Isaac.

janniklasrose and others added 2 commits November 3, 2026 13:28
The platform accepts grant privileges that the SDK's catalog.Privilege
enum does not yet list (e.g. CREATE_SECRET, see #6770). Both consumers of
that enum rejected them:

- `bundle validate` warned, and `--strict` errored, because the enum
  validation allowlist is reflected from the SDK's Values().
- PyDABs generated a strict `Privilege(Enum)` and `_transform` raised
  ValueError on unknown strings.

Exclude catalog.Privilege from the validation generator so no
`grants[*].privileges[*]` pattern is checked, and generate Privilege as
an open enum in PyDABs: a `_missing_` hook turns unknown strings into
cached pseudo-members and `PrivilegeParam` gains `| str`. The JSON schema
keeps the enum, so completion is unchanged in both.

Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
@github-actions github-actions Bot added DABs DABs related issues PyDABs labels Nov 3, 2026
janniklasrose and others added 2 commits November 3, 2026 13:58
Move the schema grant in the enum acceptance test below the jobs so
output.txt no longer differs from main by line numbers only. Drop the
"platform adds privileges faster" wording from the changelog fragment and
the issue link from the PyDABs codegen comment.

Co-authored-by: Isaac <no-reply@databricks.com>
…nt-privilege-enum

Resolved bundle/internal/validation/generated/enum_fields.go by taking
main and re-running ./task generate-validation. Re-ran ./task
pydabs-codegen; it produced no further changes.

Co-authored-by: Isaac <no-reply@databricks.com>
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Commit: 270275e2c | Workflow run

Regression test report

Selected 1 changed tests (limit=20, 0 not selected)

2 tests: regression=2 unreleased=0 coverage=0 failing=0

test branch main (c0e1859) latest (v1.23.0)
TestAccept/bundle/validate/enum/DMS= ✅ ❌ ❌
TestAccept/bundle/validate/enum/DMS=true ✅ ❌ ❌
TestAccept/bundle/validate/enum/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.23.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/validate/enum/output.txt
        +++ /tmp/TestAcceptbundlevalidateenumDMS=2882081111/002/output.txt
        @@ -16,6 +16,10 @@
           at resources.jobs.my_job_invalid.tasks[0].new_cluster.data_security_mode
           in databricks.yml:54:33
         
        +Warning: invalid value "INVALID_PRIVILEGE" for enum field. Valid values are [ACCESS ALL_PRIVILEGES APPLY_TAG BROWSE CREATE CREATE_CATALOG CREATE_CLEAN_ROOM CREATE_CONNECTION CREATE_EXTERNAL_LOCATION CREATE_EXTERNAL_TABLE CREATE_EXTERNAL_VOLUME CREATE_FEATURE CREATE_FOREIGN_CATALOG CREATE_FOREIGN_SECURABLE CREATE_FUNCTION CREATE_MANAGED_STORAGE CREATE_MATERIALIZED_VIEW CREATE_MODEL CREATE_PROVIDER CREATE_RECIPIENT CREATE_SCHEMA CREATE_SERVICE_CREDENTIAL CREATE_SHARE CREATE_STORAGE_CREDENTIAL CREATE_TABLE CREATE_VIEW CREATE_VOLUME EXECUTE EXECUTE_CLEAN_ROOM_TASK EXTERNAL_USE_LOCATION EXTERNAL_USE_SCHEMA MANAGE MANAGE_ALLOWLIST MODIFY MODIFY_CLEAN_ROOM READ_FEATURE READ_FILES READ_METADATA READ_PRIVATE_FILES READ_VOLUME REFRESH SELECT SET_SHARE_PERMISSION USAGE USE_CATALOG USE_CONNECTION USE_MARKETPLACE_ASSETS USE_PROVIDER USE_RECIPIENT USE_SCHEMA USE_SHARE WRITE_FILES WRITE_PRIVATE_FILES WRITE_VOLUME]
        +  at resources.schemas.my_schema.grants[0].privileges[0]
        +  in databricks.yml:70:15
        +
         Warning: invalid value "INVALID_SOURCE" for enum field. Valid values are [GIT WORKSPACE]
           at resources.jobs.my_job_invalid.tasks[0].notebook_task.source
           in databricks.yml:49:21
        @@ -34,4 +38,4 @@
           User: [USERNAME]
           Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
        -Found 7 warnings
        +Found 8 warnings

latest (v1.23.0):

acceptance_test.go:1342: Diff:
        --- bundle/validate/enum/output.txt
        +++ /tmp/TestAcceptbundlevalidateenumDMS=2413694883/002/output.txt
        @@ -16,6 +16,10 @@
           at resources.jobs.my_job_invalid.tasks[0].new_cluster.data_security_mode
           in databricks.yml:54:33
         
        +Warning: invalid value "INVALID_PRIVILEGE" for enum field. Valid values are [ACCESS ALL_PRIVILEGES APPLY_TAG BROWSE CREATE CREATE_CATALOG CREATE_CLEAN_ROOM CREATE_CONNECTION CREATE_EXTERNAL_LOCATION CREATE_EXTERNAL_TABLE CREATE_EXTERNAL_VOLUME CREATE_FOREIGN_CATALOG CREATE_FOREIGN_SECURABLE CREATE_FUNCTION CREATE_MANAGED_STORAGE CREATE_MATERIALIZED_VIEW CREATE_MODEL CREATE_PROVIDER CREATE_RECIPIENT CREATE_SCHEMA CREATE_SERVICE_CREDENTIAL CREATE_SHARE CREATE_STORAGE_CREDENTIAL CREATE_TABLE CREATE_VIEW CREATE_VOLUME EXECUTE EXECUTE_CLEAN_ROOM_TASK EXTERNAL_USE_LOCATION EXTERNAL_USE_SCHEMA MANAGE MANAGE_ALLOWLIST MODIFY MODIFY_CLEAN_ROOM READ_FILES READ_METADATA READ_PRIVATE_FILES READ_VOLUME REFRESH SELECT SET_SHARE_PERMISSION USAGE USE_CATALOG USE_CONNECTION USE_MARKETPLACE_ASSETS USE_PROVIDER USE_RECIPIENT USE_SCHEMA USE_SHARE WRITE_FILES WRITE_PRIVATE_FILES WRITE_VOLUME]
        +  at resources.schemas.my_schema.grants[0].privileges[0]
        +  in databricks.yml:70:15
        +
         Warning: invalid value "INVALID_SOURCE" for enum field. Valid values are [GIT WORKSPACE]
           at resources.jobs.my_job_invalid.tasks[0].notebook_task.source
           in databricks.yml:49:21
        @@ -34,4 +38,4 @@
           User: [USERNAME]
           Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
        -Found 7 warnings
        +Found 8 warnings
TestAccept/bundle/validate/enum/DMS=true: branch ✅ | main (c0e1859) ❌ | latest (v1.23.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/validate/enum/output.txt
        +++ /tmp/TestAcceptbundlevalidateenumDMS=true1454202877/002/output.txt
        @@ -16,6 +16,10 @@
           at resources.jobs.my_job_invalid.tasks[0].new_cluster.data_security_mode
           in databricks.yml:54:33
         
        +Warning: invalid value "INVALID_PRIVILEGE" for enum field. Valid values are [ACCESS ALL_PRIVILEGES APPLY_TAG BROWSE CREATE CREATE_CATALOG CREATE_CLEAN_ROOM CREATE_CONNECTION CREATE_EXTERNAL_LOCATION CREATE_EXTERNAL_TABLE CREATE_EXTERNAL_VOLUME CREATE_FEATURE CREATE_FOREIGN_CATALOG CREATE_FOREIGN_SECURABLE CREATE_FUNCTION CREATE_MANAGED_STORAGE CREATE_MATERIALIZED_VIEW CREATE_MODEL CREATE_PROVIDER CREATE_RECIPIENT CREATE_SCHEMA CREATE_SERVICE_CREDENTIAL CREATE_SHARE CREATE_STORAGE_CREDENTIAL CREATE_TABLE CREATE_VIEW CREATE_VOLUME EXECUTE EXECUTE_CLEAN_ROOM_TASK EXTERNAL_USE_LOCATION EXTERNAL_USE_SCHEMA MANAGE MANAGE_ALLOWLIST MODIFY MODIFY_CLEAN_ROOM READ_FEATURE READ_FILES READ_METADATA READ_PRIVATE_FILES READ_VOLUME REFRESH SELECT SET_SHARE_PERMISSION USAGE USE_CATALOG USE_CONNECTION USE_MARKETPLACE_ASSETS USE_PROVIDER USE_RECIPIENT USE_SCHEMA USE_SHARE WRITE_FILES WRITE_PRIVATE_FILES WRITE_VOLUME]
        +  at resources.schemas.my_schema.grants[0].privileges[0]
        +  in databricks.yml:70:15
        +
         Warning: invalid value "INVALID_SOURCE" for enum field. Valid values are [GIT WORKSPACE]
           at resources.jobs.my_job_invalid.tasks[0].notebook_task.source
           in databricks.yml:49:21
        @@ -34,4 +38,4 @@
           User: [USERNAME]
           Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
        -Found 7 warnings
        +Found 8 warnings
        
FAIL

latest (v1.23.0):

acceptance_test.go:1342: Diff:
        --- bundle/validate/enum/output.txt
        +++ /tmp/TestAcceptbundlevalidateenumDMS=true3388785167/002/output.txt
        @@ -16,6 +16,10 @@
           at resources.jobs.my_job_invalid.tasks[0].new_cluster.data_security_mode
           in databricks.yml:54:33
         
        +Warning: invalid value "INVALID_PRIVILEGE" for enum field. Valid values are [ACCESS ALL_PRIVILEGES APPLY_TAG BROWSE CREATE CREATE_CATALOG CREATE_CLEAN_ROOM CREATE_CONNECTION CREATE_EXTERNAL_LOCATION CREATE_EXTERNAL_TABLE CREATE_EXTERNAL_VOLUME CREATE_FOREIGN_CATALOG CREATE_FOREIGN_SECURABLE CREATE_FUNCTION CREATE_MANAGED_STORAGE CREATE_MATERIALIZED_VIEW CREATE_MODEL CREATE_PROVIDER CREATE_RECIPIENT CREATE_SCHEMA CREATE_SERVICE_CREDENTIAL CREATE_SHARE CREATE_STORAGE_CREDENTIAL CREATE_TABLE CREATE_VIEW CREATE_VOLUME EXECUTE EXECUTE_CLEAN_ROOM_TASK EXTERNAL_USE_LOCATION EXTERNAL_USE_SCHEMA MANAGE MANAGE_ALLOWLIST MODIFY MODIFY_CLEAN_ROOM READ_FILES READ_METADATA READ_PRIVATE_FILES READ_VOLUME REFRESH SELECT SET_SHARE_PERMISSION USAGE USE_CATALOG USE_CONNECTION USE_MARKETPLACE_ASSETS USE_PROVIDER USE_RECIPIENT USE_SCHEMA USE_SHARE WRITE_FILES WRITE_PRIVATE_FILES WRITE_VOLUME]
        +  at resources.schemas.my_schema.grants[0].privileges[0]
        +  in databricks.yml:70:15
        +
         Warning: invalid value "INVALID_SOURCE" for enum field. Valid values are [GIT WORKSPACE]
           at resources.jobs.my_job_invalid.tasks[0].notebook_task.source
           in databricks.yml:49:21
        @@ -34,4 +38,4 @@
           User: [USERNAME]
           Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
        -Found 7 warnings
        +Found 8 warnings
        
FAIL

@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 270275e

Run: 41652236148

Env 🔄​flaky ✅​pass 🙈​skip Time
✅​ aws linux-2core-8gb 271 16 10:44
✅​ aws-windows-latest-4core-16gb 273 14 5:53
🔄​ azure linux-2core-8gb 1 269 16 9:54
✅​ azure-windows-latest-4core-16gb 272 14 5:22
✅​ gcp linux-2core-8gb 271 16 9:54
✅​ gcp-windows-latest-4core-16gb 273 14 4:34
Test Name azure linux-2core-8gb
🔄​ TestSyncIncrementalSyncFileToPythonNotebook 🔄​f
Top 6 slowest tests (at least 2 minutes):
duration env testname
4:12 azure linux-2core-8gb TestAccept
4:08 aws linux-2core-8gb TestAccept
4:08 gcp linux-2core-8gb TestAccept
3:04 gcp-windows-latest-4core-16gb TestFilerWorkspaceFilesExtensionsReadDir
2:53 aws-windows-latest-4core-16gb TestFilerWorkspaceFilesExtensionsReadDir
2:09 gcp linux-2core-8gb TestImportDirWithOverwriteFlag

@janniklasrose
janniklasrose marked this pull request as ready for review November 3, 2026 14:37
@janniklasrose
janniklasrose requested review from a team as code owners November 3, 2026 14:37
@janniklasrose
janniklasrose added this pull request to the merge queue Nov 3, 2026
Merged via the queue into main with commit a11ca9f Nov 3, 2026
32 checks passed
@janniklasrose
janniklasrose deleted the janniklasrose/stop-warning-and-erroring-on-grant-privilege-enum branch November 3, 2026 15:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DABs DABs related issues PyDABs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants