From 93bd11f0522a52ae571378d67120f53069a2f7dd Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Fri, 1 Jul 2022 14:13:34 +0000
Subject: [PATCH 01/13] Add tests to ensure API compatibility when using
 positional arguments

---
 tests/test_compat.json | 2082 ++++++++++++++++++++++++++++++++++++++++
 tests/test_compat.py   |  117 +++
 2 files changed, 2199 insertions(+)
 create mode 100644 tests/test_compat.json
 create mode 100644 tests/test_compat.py

diff --git a/tests/test_compat.json b/tests/test_compat.json
new file mode 100644
index 00000000..7b430ec6
--- /dev/null
+++ b/tests/test_compat.json
@@ -0,0 +1,2082 @@
+{
+  "databricks_cli.sdk.service.ClusterService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.ClusterService.create_cluster": [
+    "self",
+    "num_workers",
+    "autoscale",
+    "cluster_name",
+    "spark_version",
+    "spark_conf",
+    "aws_attributes",
+    "node_type_id",
+    "driver_node_type_id",
+    "ssh_public_keys",
+    "custom_tags",
+    "cluster_log_conf",
+    "spark_env_vars",
+    "autotermination_minutes",
+    "enable_elastic_disk",
+    "cluster_source",
+    "instance_pool_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.delete_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.edit_cluster": [
+    "self",
+    "cluster_id",
+    "num_workers",
+    "autoscale",
+    "cluster_name",
+    "spark_version",
+    "spark_conf",
+    "aws_attributes",
+    "node_type_id",
+    "driver_node_type_id",
+    "ssh_public_keys",
+    "custom_tags",
+    "cluster_log_conf",
+    "spark_env_vars",
+    "autotermination_minutes",
+    "enable_elastic_disk",
+    "cluster_source",
+    "instance_pool_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.get_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.get_events": [
+    "self",
+    "cluster_id",
+    "start_time",
+    "end_time",
+    "order",
+    "event_types",
+    "offset",
+    "limit",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.list_available_zones": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.list_clusters": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.list_node_types": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.list_spark_versions": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.permanent_delete_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.pin_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.resize_cluster": [
+    "self",
+    "cluster_id",
+    "num_workers",
+    "autoscale",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.restart_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.start_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ClusterService.unpin_cluster": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.DbfsService.add_block": [
+    "self",
+    "handle",
+    "data",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.add_block_test": [
+    "self",
+    "handle",
+    "data",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.close": [
+    "self",
+    "handle",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.close_test": [
+    "self",
+    "handle",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.create": [
+    "self",
+    "path",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.create_test": [
+    "self",
+    "path",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.delete": [
+    "self",
+    "path",
+    "recursive",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.delete_test": [
+    "self",
+    "path",
+    "recursive",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.get_status": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.get_status_test": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.list": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.list_test": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.mkdirs": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.mkdirs_test": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.move": [
+    "self",
+    "source_path",
+    "destination_path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.move_test": [
+    "self",
+    "source_path",
+    "destination_path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.put": [
+    "self",
+    "path",
+    "contents",
+    "overwrite",
+    "headers",
+    "src_path"
+  ],
+  "databricks_cli.sdk.service.DbfsService.put_test": [
+    "self",
+    "path",
+    "contents",
+    "overwrite",
+    "headers",
+    "src_path"
+  ],
+  "databricks_cli.sdk.service.DbfsService.read": [
+    "self",
+    "path",
+    "offset",
+    "length",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DbfsService.read_test": [
+    "self",
+    "path",
+    "offset",
+    "length",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.create": [
+    "self",
+    "id",
+    "name",
+    "storage",
+    "configuration",
+    "clusters",
+    "libraries",
+    "trigger",
+    "filters",
+    "target",
+    "continuous",
+    "development",
+    "allow_duplicate_names",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.delete": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.deploy": [
+    "self",
+    "pipeline_id",
+    "id",
+    "name",
+    "storage",
+    "configuration",
+    "clusters",
+    "libraries",
+    "trigger",
+    "filters",
+    "target",
+    "continuous",
+    "development",
+    "allow_duplicate_names",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.get": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.list": [
+    "self",
+    "pagination",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.reset": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.run": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.start_update": [
+    "self",
+    "pipeline_id",
+    "full_refresh",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.DeltaPipelinesService.stop": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.GroupsService.add_to_group": [
+    "self",
+    "parent_name",
+    "user_name",
+    "group_name",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.create_group": [
+    "self",
+    "group_name",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.get_group_members": [
+    "self",
+    "group_name",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.get_groups": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.get_groups_for_principal": [
+    "self",
+    "user_name",
+    "group_name",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.remove_from_group": [
+    "self",
+    "parent_name",
+    "user_name",
+    "group_name",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.GroupsService.remove_group": [
+    "self",
+    "group_name",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.InstancePoolService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.InstancePoolService.create_instance_pool": [
+    "self",
+    "instance_pool_name",
+    "min_idle_instances",
+    "max_capacity",
+    "aws_attributes",
+    "node_type_id",
+    "custom_tags",
+    "idle_instance_autotermination_minutes",
+    "enable_elastic_disk",
+    "disk_spec",
+    "preloaded_spark_versions",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.InstancePoolService.delete_instance_pool": [
+    "self",
+    "instance_pool_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.InstancePoolService.edit_instance_pool": [
+    "self",
+    "instance_pool_id",
+    "instance_pool_name",
+    "min_idle_instances",
+    "max_capacity",
+    "aws_attributes",
+    "node_type_id",
+    "custom_tags",
+    "idle_instance_autotermination_minutes",
+    "enable_elastic_disk",
+    "disk_spec",
+    "preloaded_spark_versions",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.InstancePoolService.get_instance_pool": [
+    "self",
+    "instance_pool_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.InstancePoolService.list_instance_pools": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.JobsService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.JobsService.cancel_run": [
+    "self",
+    "run_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.create_job": [
+    "self",
+    "name",
+    "existing_cluster_id",
+    "new_cluster",
+    "libraries",
+    "email_notifications",
+    "timeout_seconds",
+    "max_retries",
+    "min_retry_interval_millis",
+    "retry_on_timeout",
+    "schedule",
+    "notebook_task",
+    "spark_jar_task",
+    "spark_python_task",
+    "spark_submit_task",
+    "max_concurrent_runs",
+    "tasks",
+    "headers",
+    "version",
+    "git_source"
+  ],
+  "databricks_cli.sdk.service.JobsService.delete_job": [
+    "self",
+    "job_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.delete_run": [
+    "self",
+    "run_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.export_run": [
+    "self",
+    "run_id",
+    "views_to_export",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.get_job": [
+    "self",
+    "job_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.get_run": [
+    "self",
+    "run_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.get_run_output": [
+    "self",
+    "run_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.list_jobs": [
+    "self",
+    "job_type",
+    "expand_tasks",
+    "limit",
+    "offset",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.list_runs": [
+    "self",
+    "job_id",
+    "active_only",
+    "completed_only",
+    "offset",
+    "limit",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.reset_job": [
+    "self",
+    "job_id",
+    "new_settings",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.run_now": [
+    "self",
+    "job_id",
+    "jar_params",
+    "notebook_params",
+    "python_params",
+    "spark_submit_params",
+    "python_named_params",
+    "idempotency_token",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.JobsService.submit_run": [
+    "self",
+    "run_name",
+    "existing_cluster_id",
+    "new_cluster",
+    "libraries",
+    "notebook_task",
+    "spark_jar_task",
+    "spark_python_task",
+    "spark_submit_task",
+    "timeout_seconds",
+    "tasks",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.sdk.service.ManagedLibraryService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.ManagedLibraryService.all_cluster_statuses": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ManagedLibraryService.cluster_status": [
+    "self",
+    "cluster_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ManagedLibraryService.install_libraries": [
+    "self",
+    "cluster_id",
+    "libraries",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ManagedLibraryService.uninstall_libraries": [
+    "self",
+    "cluster_id",
+    "libraries",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.PolicyService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.PolicyService.create_policy": [
+    "self",
+    "policy_name",
+    "definition",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.PolicyService.delete_policy": [
+    "self",
+    "policy_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.PolicyService.edit_policy": [
+    "self",
+    "policy_id",
+    "policy_name",
+    "definition",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.PolicyService.get_policy": [
+    "self",
+    "policy_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.PolicyService.list_policies": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ReposService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.ReposService.create_repo": [
+    "self",
+    "url",
+    "provider",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ReposService.delete_repo": [
+    "self",
+    "id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ReposService.detect_repo_provider": [
+    "url"
+  ],
+  "databricks_cli.sdk.service.ReposService.get_repo": [
+    "self",
+    "id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ReposService.list_repos": [
+    "self",
+    "path_prefix",
+    "next_page_token",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.ReposService.update_repo": [
+    "self",
+    "id",
+    "branch",
+    "tag",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.SecretService.create_scope": [
+    "self",
+    "scope",
+    "initial_manage_principal",
+    "scope_backend_type",
+    "backend_azure_keyvault",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.delete_acl": [
+    "self",
+    "scope",
+    "principal",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.delete_scope": [
+    "self",
+    "scope",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.delete_secret": [
+    "self",
+    "scope",
+    "key",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.get_acl": [
+    "self",
+    "scope",
+    "principal",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.list_acls": [
+    "self",
+    "scope",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.list_scopes": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.list_secrets": [
+    "self",
+    "scope",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.put_acl": [
+    "self",
+    "scope",
+    "principal",
+    "permission",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.SecretService.put_secret": [
+    "self",
+    "scope",
+    "key",
+    "string_value",
+    "bytes_value",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.TokenService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.TokenService.create_token": [
+    "self",
+    "lifetime_seconds",
+    "comment",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.TokenService.list_tokens": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.TokenService.revoke_token": [
+    "self",
+    "token_id",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.delete": [
+    "self",
+    "path",
+    "recursive",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.export_workspace": [
+    "self",
+    "path",
+    "format",
+    "direct_download",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.get_status": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.import_workspace": [
+    "self",
+    "path",
+    "format",
+    "language",
+    "content",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.list": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.sdk.service.WorkspaceService.mkdirs": [
+    "self",
+    "path",
+    "headers"
+  ],
+  "databricks_cli.cluster_policies.api.ClusterPolicyApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.cluster_policies.api.ClusterPolicyApi.create_cluster_policy": [
+    "self",
+    "json"
+  ],
+  "databricks_cli.cluster_policies.api.ClusterPolicyApi.delete_cluster_policy": [
+    "self",
+    "policy_id"
+  ],
+  "databricks_cli.cluster_policies.api.ClusterPolicyApi.edit_cluster_policy": [
+    "self",
+    "json"
+  ],
+  "databricks_cli.cluster_policies.api.ClusterPolicyApi.get_cluster_policy": [
+    "self",
+    "policy_id"
+  ],
+  "databricks_cli.cluster_policies.api.ClusterPolicyApi.list_cluster_policies": [
+    "self"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.create_cluster": [
+    "self",
+    "json"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.delete_cluster": [
+    "self",
+    "cluster_id"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.edit_cluster": [
+    "self",
+    "json"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.get_cluster": [
+    "self",
+    "cluster_id"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.get_cluster_by_name": [
+    "self",
+    "cluster_name"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.get_cluster_id_for_name": [
+    "self",
+    "cluster_name"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.get_cluster_ids_by_name": [
+    "self",
+    "cluster_name"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.get_events": [
+    "self",
+    "cluster_id",
+    "start_time",
+    "end_time",
+    "order",
+    "event_types",
+    "offset",
+    "limit"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.list_clusters": [
+    "self"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.list_node_types": [
+    "self"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.list_zones": [
+    "self"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.permanent_delete": [
+    "self",
+    "cluster_id"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.resize_cluster": [
+    "self",
+    "cluster_id",
+    "num_workers"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.restart_cluster": [
+    "self",
+    "cluster_id"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.spark_versions": [
+    "self"
+  ],
+  "databricks_cli.clusters.api.ClusterApi.start_cluster": [
+    "self",
+    "cluster_id"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi._copy_from_dbfs_non_recursive": [
+    "self",
+    "dbfs_path_src",
+    "dst",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi._copy_from_dbfs_recursive": [
+    "self",
+    "dbfs_path_src",
+    "dst",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi._copy_to_dbfs_non_recursive": [
+    "self",
+    "src",
+    "dbfs_path_dst",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi._copy_to_dbfs_recursive": [
+    "self",
+    "src",
+    "dbfs_path_dst",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.cat": [
+    "self",
+    "src"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.cp": [
+    "self",
+    "recursive",
+    "overwrite",
+    "src",
+    "dst",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.delete": [
+    "self",
+    "dbfs_path",
+    "recursive",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.file_exists": [
+    "self",
+    "dbfs_path",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.get_file": [
+    "self",
+    "dbfs_path",
+    "dst_path",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.get_num_files_deleted": [
+    "partial_delete_error"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.get_status": [
+    "self",
+    "dbfs_path",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.list_files": [
+    "self",
+    "dbfs_path",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.mkdirs": [
+    "self",
+    "dbfs_path",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.move": [
+    "self",
+    "dbfs_src",
+    "dbfs_dst",
+    "headers"
+  ],
+  "databricks_cli.dbfs.api.DbfsApi.put_file": [
+    "self",
+    "src_path",
+    "dbfs_path",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath.__eq__": [
+    "self",
+    "other"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath.__init__": [
+    "self",
+    "absolute_path",
+    "validate"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath.__repr__": [
+    "self"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath._strip_trailing_slash": [
+    "self"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath.join": [
+    "self",
+    "file_name"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath.relpath": [
+    "self",
+    "dbfs_path_prefix"
+  ],
+  "databricks_cli.dbfs.dbfs_path.DbfsPath.validate": [
+    "self"
+  ],
+  "databricks_cli.dbfs.api.FileInfo.__eq__": [
+    "self",
+    "other"
+  ],
+  "databricks_cli.dbfs.api.FileInfo.__init__": [
+    "self",
+    "dbfs_path",
+    "is_dir",
+    "file_size",
+    "modification_time"
+  ],
+  "databricks_cli.dbfs.api.FileInfo.to_row": [
+    "self",
+    "is_long_form",
+    "is_absolute"
+  ],
+  "requests.exceptions.RequestException.__init__": [
+    "self"
+  ],
+  "databricks_cli.dbfs.api.TempDir.__enter__": [
+    "self"
+  ],
+  "databricks_cli.dbfs.api.TempDir.__exit__": [
+    "self",
+    "tp",
+    "val",
+    "traceback"
+  ],
+  "databricks_cli.dbfs.api.TempDir.__init__": [
+    "self",
+    "remove_on_exit"
+  ],
+  "databricks_cli.dbfs.api.TempDir.path": [
+    "self"
+  ],
+  "databricks_cli.groups.api.GroupsApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.groups.api.GroupsApi.add_member": [
+    "self",
+    "parent_name",
+    "user_name",
+    "group_name"
+  ],
+  "databricks_cli.groups.api.GroupsApi.create": [
+    "self",
+    "group_name"
+  ],
+  "databricks_cli.groups.api.GroupsApi.delete": [
+    "self",
+    "group_name"
+  ],
+  "databricks_cli.groups.api.GroupsApi.list_all": [
+    "self"
+  ],
+  "databricks_cli.groups.api.GroupsApi.list_members": [
+    "self",
+    "group_name"
+  ],
+  "databricks_cli.groups.api.GroupsApi.list_parents": [
+    "self",
+    "user_name",
+    "group_name"
+  ],
+  "databricks_cli.groups.api.GroupsApi.remove_member": [
+    "self",
+    "parent_name",
+    "user_name",
+    "group_name"
+  ],
+  "databricks_cli.instance_pools.api.InstancePoolsApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.instance_pools.api.InstancePoolsApi.create_instance_pool": [
+    "self",
+    "json"
+  ],
+  "databricks_cli.instance_pools.api.InstancePoolsApi.delete_instance_pool": [
+    "self",
+    "instance_pool_id"
+  ],
+  "databricks_cli.instance_pools.api.InstancePoolsApi.edit_instance_pool": [
+    "self",
+    "json"
+  ],
+  "databricks_cli.instance_pools.api.InstancePoolsApi.get_instance_pool": [
+    "self",
+    "instance_pool_id"
+  ],
+  "databricks_cli.instance_pools.api.InstancePoolsApi.list_instance_pools": [
+    "self"
+  ],
+  "databricks_cli.jobs.api.JobsApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.jobs.api.JobsApi._list_jobs_by_name": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.jobs.api.JobsApi.create_job": [
+    "self",
+    "json",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.jobs.api.JobsApi.delete_job": [
+    "self",
+    "job_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.jobs.api.JobsApi.get_job": [
+    "self",
+    "job_id",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.jobs.api.JobsApi.list_jobs": [
+    "self",
+    "job_type",
+    "expand_tasks",
+    "offset",
+    "limit",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.jobs.api.JobsApi.reset_job": [
+    "self",
+    "json",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.jobs.api.JobsApi.run_now": [
+    "self",
+    "job_id",
+    "jar_params",
+    "notebook_params",
+    "python_params",
+    "spark_submit_params",
+    "python_named_params",
+    "idempotency_token",
+    "headers",
+    "version"
+  ],
+  "databricks_cli.libraries.api.LibrariesApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.libraries.api.LibrariesApi.all_cluster_statuses": [
+    "self"
+  ],
+  "databricks_cli.libraries.api.LibrariesApi.cluster_status": [
+    "self",
+    "cluster_id"
+  ],
+  "databricks_cli.libraries.api.LibrariesApi.install_libraries": [
+    "self",
+    "cluster_id",
+    "libraries"
+  ],
+  "databricks_cli.libraries.api.LibrariesApi.uninstall_libraries": [
+    "self",
+    "cluster_id",
+    "libraries"
+  ],
+  "databricks_cli.pipelines.api.LibraryObject.__eq__": [
+    "self",
+    "other"
+  ],
+  "databricks_cli.pipelines.api.LibraryObject.__init__": [
+    "self",
+    "lib_type",
+    "lib_path"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi._get_hashed_path": [
+    "path"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi._identify_local_libraries": [
+    "lib_objects"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi._upload_libraries_and_update_settings": [
+    "self",
+    "settings",
+    "settings_dir"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi._upload_local_libraries": [
+    "self",
+    "settings_dir",
+    "local_lib_objects"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.create": [
+    "self",
+    "settings",
+    "settings_dir",
+    "allow_duplicate_names",
+    "headers"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.delete": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.edit": [
+    "self",
+    "settings",
+    "settings_dir",
+    "allow_duplicate_names",
+    "headers"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.get": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.list": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.start_update": [
+    "self",
+    "pipeline_id",
+    "full_refresh",
+    "headers"
+  ],
+  "databricks_cli.pipelines.api.PipelinesApi.stop": [
+    "self",
+    "pipeline_id",
+    "headers"
+  ],
+  "databricks_cli.repos.api.ReposApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.repos.api.ReposApi.create": [
+    "self",
+    "url",
+    "provider",
+    "path"
+  ],
+  "databricks_cli.repos.api.ReposApi.delete": [
+    "self",
+    "repo_id"
+  ],
+  "databricks_cli.repos.api.ReposApi.get": [
+    "self",
+    "repo_id"
+  ],
+  "databricks_cli.repos.api.ReposApi.get_repo_id": [
+    "self",
+    "path"
+  ],
+  "databricks_cli.repos.api.ReposApi.list": [
+    "self",
+    "path_prefix",
+    "next_page_token"
+  ],
+  "databricks_cli.repos.api.ReposApi.update": [
+    "self",
+    "repo_id",
+    "branch",
+    "tag"
+  ],
+  "databricks_cli.runs.api.RunsApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.runs.api.RunsApi.cancel_run": [
+    "self",
+    "run_id",
+    "version"
+  ],
+  "databricks_cli.runs.api.RunsApi.get_run": [
+    "self",
+    "run_id",
+    "version"
+  ],
+  "databricks_cli.runs.api.RunsApi.get_run_output": [
+    "self",
+    "run_id",
+    "version"
+  ],
+  "databricks_cli.runs.api.RunsApi.list_runs": [
+    "self",
+    "job_id",
+    "active_only",
+    "completed_only",
+    "offset",
+    "limit",
+    "version"
+  ],
+  "databricks_cli.runs.api.RunsApi.submit_run": [
+    "self",
+    "json",
+    "version"
+  ],
+  "databricks_cli.secrets.api.SecretApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.secrets.api.SecretApi.create_scope": [
+    "self",
+    "scope",
+    "initial_manage_principal",
+    "scope_backend_type",
+    "backend_azure_keyvault"
+  ],
+  "databricks_cli.secrets.api.SecretApi.delete_acl": [
+    "self",
+    "scope",
+    "principal"
+  ],
+  "databricks_cli.secrets.api.SecretApi.delete_scope": [
+    "self",
+    "scope"
+  ],
+  "databricks_cli.secrets.api.SecretApi.delete_secret": [
+    "self",
+    "scope",
+    "key"
+  ],
+  "databricks_cli.secrets.api.SecretApi.get_acl": [
+    "self",
+    "scope",
+    "principal"
+  ],
+  "databricks_cli.secrets.api.SecretApi.list_acls": [
+    "self",
+    "scope"
+  ],
+  "databricks_cli.secrets.api.SecretApi.list_scopes": [
+    "self"
+  ],
+  "databricks_cli.secrets.api.SecretApi.list_secrets": [
+    "self",
+    "scope"
+  ],
+  "databricks_cli.secrets.api.SecretApi.put_acl": [
+    "self",
+    "scope",
+    "principal",
+    "permission"
+  ],
+  "databricks_cli.secrets.api.SecretApi.put_secret": [
+    "self",
+    "scope",
+    "key",
+    "string_value",
+    "bytes_value"
+  ],
+  "databricks_cli.tokens.api.TokensApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.tokens.api.TokensApi.create": [
+    "self",
+    "lifetime_seconds",
+    "comment"
+  ],
+  "databricks_cli.tokens.api.TokensApi.list": [
+    "self"
+  ],
+  "databricks_cli.tokens.api.TokensApi.revoke": [
+    "self",
+    "token_id"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_catalog": [
+    "self",
+    "catalog_name",
+    "comment",
+    "provider",
+    "share"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_dac": [
+    "self",
+    "metastore_id",
+    "dac_spec",
+    "skip_validation"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_external_location": [
+    "self",
+    "loc_spec",
+    "skip_validation"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_metastore": [
+    "self",
+    "name",
+    "storage_root"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_metastore_assignment": [
+    "self",
+    "workspace_id",
+    "metastore_id",
+    "default_catalog_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_provider": [
+    "self",
+    "name",
+    "comment",
+    "recipient_profile"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_recipient": [
+    "self",
+    "name",
+    "comment",
+    "sharing_code",
+    "allowed_ip_addresses"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_schema": [
+    "self",
+    "catalog_name",
+    "schema_name",
+    "comment"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_share": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_storage_credential": [
+    "self",
+    "cred_spec",
+    "skip_validation"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_table": [
+    "self",
+    "table_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_catalog": [
+    "self",
+    "catalog_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_dac": [
+    "self",
+    "metastore_id",
+    "dac_id"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_external_location": [
+    "self",
+    "name",
+    "force"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_metastore": [
+    "self",
+    "metastore_id",
+    "force"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_metastore_assignment": [
+    "self",
+    "workspace_id",
+    "metastore_id"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_provider": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_recipient": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_schema": [
+    "self",
+    "schema_full_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_share": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_storage_credential": [
+    "self",
+    "name",
+    "force"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_table": [
+    "self",
+    "table_full_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_catalog": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_dac": [
+    "self",
+    "metastore_id",
+    "dac_id"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_external_location": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_metastore": [
+    "self",
+    "metastore_id"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_metastore_summary": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_permissions": [
+    "self",
+    "sec_type",
+    "sec_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_provider": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_recipient": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_recipient_share_permissions": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_schema": [
+    "self",
+    "full_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_share": [
+    "self",
+    "name",
+    "include_shared_data"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_storage_credential": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_table": [
+    "self",
+    "full_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_catalogs": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_dacs": [
+    "self",
+    "metastore_id"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_external_locations": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_lineages_by_column": [
+    "self",
+    "table_name",
+    "column_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_lineages_by_table": [
+    "self",
+    "table_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_metastores": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_provider_shares": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_providers": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_recipients": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_schemas": [
+    "self",
+    "catalog_name",
+    "name_pattern"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_share_permissions": [
+    "self",
+    "name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_shares": [
+    "self"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_storage_credentials": [
+    "self",
+    "name_pattern"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_table_summaries": [
+    "self",
+    "catalog_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_tables": [
+    "self",
+    "catalog_name",
+    "schema_name",
+    "name_pattern"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.replace_permissions": [
+    "self",
+    "sec_type",
+    "sec_name",
+    "perm_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.rotate_recipient_token": [
+    "self",
+    "name",
+    "existing_token_expire_in_seconds"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_catalog": [
+    "self",
+    "name",
+    "catalog_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_external_location": [
+    "self",
+    "name",
+    "loc_spec",
+    "force",
+    "skip_validation"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_metastore": [
+    "self",
+    "metastore_id",
+    "metastore_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_metastore_assignment": [
+    "self",
+    "workspace_id",
+    "metastore_id",
+    "default_catalog_name"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_permissions": [
+    "self",
+    "sec_type",
+    "sec_name",
+    "diff_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_provider": [
+    "self",
+    "name",
+    "new_name",
+    "comment",
+    "recipient_profile"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_recipient": [
+    "self",
+    "name",
+    "recipient_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_schema": [
+    "self",
+    "full_name",
+    "schema_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_share": [
+    "self",
+    "name",
+    "share_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_share_permissions": [
+    "self",
+    "name",
+    "perm_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_storage_credential": [
+    "self",
+    "name",
+    "cred_spec",
+    "skip_validation"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_table": [
+    "self",
+    "full_name",
+    "table_spec"
+  ],
+  "databricks_cli.unity_catalog.api.UnityCatalogApi.validate_external_location": [
+    "self",
+    "validation_spec"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.__init__": [
+    "self",
+    "client"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService._permissions_url": [
+    "self",
+    "sec_type",
+    "sec_name"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_catalog": [
+    "self",
+    "name",
+    "comment",
+    "provider",
+    "share",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_dac": [
+    "self",
+    "metastore_id",
+    "dac_spec",
+    "skip_validation",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_external_location": [
+    "self",
+    "loc_spec",
+    "skip_validation",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_metastore": [
+    "self",
+    "name",
+    "storage_root",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_metastore_assignment": [
+    "self",
+    "workspace_id",
+    "metastore_id",
+    "default_catalog_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_provider": [
+    "self",
+    "name",
+    "comment",
+    "recipient_profile",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_recipient": [
+    "self",
+    "name",
+    "comment",
+    "sharing_code",
+    "allowed_ip_addresses",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_schema": [
+    "self",
+    "catalog_name",
+    "new_schema_name",
+    "comment",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_share": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_storage_credential": [
+    "self",
+    "cred_spec",
+    "skip_validation",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_table": [
+    "self",
+    "table_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_catalog": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_dac": [
+    "self",
+    "metastore_id",
+    "dac_id",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_external_location": [
+    "self",
+    "name",
+    "force",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_metastore": [
+    "self",
+    "metastore_id",
+    "force",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_metastore_assignment": [
+    "self",
+    "workspace_id",
+    "metastore_id",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_provider": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_recipient": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_schema": [
+    "self",
+    "full_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_share": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_storage_credential": [
+    "self",
+    "name",
+    "force",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_table": [
+    "self",
+    "full_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_catalog": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_dac": [
+    "self",
+    "metastore_id",
+    "dac_id",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_external_location": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_metastore": [
+    "self",
+    "metastore_id",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_metastore_summary": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_permissions": [
+    "self",
+    "sec_type",
+    "sec_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_provider": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_recipient": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_recipient_share_permissions": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_schema": [
+    "self",
+    "full_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_share": [
+    "self",
+    "name",
+    "include_shared_data",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_storage_credential": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_table": [
+    "self",
+    "full_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_catalogs": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_dacs": [
+    "self",
+    "metastore_id",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_external_locations": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_lineages_by_column": [
+    "self",
+    "table_name",
+    "column_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_lineages_by_table": [
+    "self",
+    "table_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_metastores": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_provider_shares": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_providers": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_recipients": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_schemas": [
+    "self",
+    "catalog_name",
+    "name_regex",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_share_permissions": [
+    "self",
+    "name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_shares": [
+    "self",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_storage_credentials": [
+    "self",
+    "name_pattern",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_table_summaries": [
+    "self",
+    "catalog_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_tables": [
+    "self",
+    "catalog_name",
+    "schema_name",
+    "name_regex",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.replace_permissions": [
+    "self",
+    "sec_type",
+    "sec_name",
+    "perm_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.rotate_recipient_token": [
+    "self",
+    "name",
+    "existing_token_expire_in_seconds",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_catalog": [
+    "self",
+    "name",
+    "catalog_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_external_location": [
+    "self",
+    "name",
+    "loc_spec",
+    "force",
+    "skip_validation",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_metastore": [
+    "self",
+    "metastore_id",
+    "metastore_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_metastore_assignment": [
+    "self",
+    "workspace_id",
+    "metastore_id",
+    "default_catalog_name",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_permissions": [
+    "self",
+    "sec_type",
+    "sec_name",
+    "perm_diff_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_provider": [
+    "self",
+    "name",
+    "new_name",
+    "comment",
+    "recipient_profile",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_recipient": [
+    "self",
+    "name",
+    "recipient_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_schema": [
+    "self",
+    "full_name",
+    "schema_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_share": [
+    "self",
+    "name",
+    "share_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_share_permissions": [
+    "self",
+    "name",
+    "perm_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_storage_credential": [
+    "self",
+    "name",
+    "cred_spec",
+    "skip_validation",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_table": [
+    "self",
+    "full_name",
+    "table_spec",
+    "headers"
+  ],
+  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.validate_external_location": [
+    "self",
+    "validation_spec",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.__init__": [
+    "self",
+    "api_client"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.delete": [
+    "self",
+    "workspace_path",
+    "is_recursive",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.export_workspace": [
+    "self",
+    "source_path",
+    "target_path",
+    "fmt",
+    "is_overwrite",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.export_workspace_dir": [
+    "self",
+    "source_path",
+    "target_path",
+    "overwrite",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.get_status": [
+    "self",
+    "workspace_path",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.import_workspace": [
+    "self",
+    "source_path",
+    "target_path",
+    "language",
+    "fmt",
+    "is_overwrite",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.import_workspace_dir": [
+    "self",
+    "source_path",
+    "target_path",
+    "overwrite",
+    "exclude_hidden_files",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.list_objects": [
+    "self",
+    "workspace_path",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceApi.mkdirs": [
+    "self",
+    "workspace_path",
+    "headers"
+  ],
+  "databricks_cli.workspace.api.WorkspaceFileInfo.__init__": [
+    "self",
+    "path",
+    "object_type",
+    "object_id",
+    "language"
+  ],
+  "databricks_cli.workspace.api.WorkspaceFileInfo.to_row": [
+    "self",
+    "is_long_form",
+    "is_absolute",
+    "with_object_id"
+  ]
+}
\ No newline at end of file
diff --git a/tests/test_compat.py b/tests/test_compat.py
new file mode 100644
index 00000000..25ff9ede
--- /dev/null
+++ b/tests/test_compat.py
@@ -0,0 +1,117 @@
+# Databricks CLI
+# Copyright 2017 Databricks, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"), except
+# that the use of services to which certain application programming
+# interfaces (each, an "API") connect requires that the user first obtain
+# a license for the use of the APIs from Databricks, Inc. ("Databricks"),
+# by creating an account at www.databricks.com and agreeing to either (a)
+# the Community Edition Terms of Service, (b) the Databricks Terms of
+# Service, or (c) another written agreement between Licensee and Databricks
+# for the use of the APIs.
+#
+# You may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import inspect
+import json
+import os
+
+import databricks_cli.sdk.service
+
+import databricks_cli.cluster_policies.api
+import databricks_cli.clusters.api
+import databricks_cli.dbfs.api
+import databricks_cli.groups.api
+import databricks_cli.instance_pools.api
+import databricks_cli.jobs.api
+import databricks_cli.libraries.api
+import databricks_cli.pipelines.api
+import databricks_cli.repos.api
+import databricks_cli.runs.api
+import databricks_cli.secrets.api
+import databricks_cli.tokens.api
+import databricks_cli.unity_catalog.api
+import databricks_cli.workspace.api
+
+
+def collect_argspecs(modules):
+    return {
+        f"{func.__module__}.{func.__qualname__}": inspect.getfullargspec(func).args
+        for mod in modules
+        for (_, clazz) in inspect.getmembers(mod, predicate=inspect.isclass)
+        for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)
+    }
+
+
+def _test_compatibility(current_argspecs, existing_argspecs):
+    removed_functions = []
+    incompatible_functions = []
+    for existing_name, existing_args in existing_argspecs.items():
+        if existing_name not in current_argspecs:
+            removed_functions.append(existing_name)
+            continue
+
+        # New arguments may only be appended to ensure compatibility
+        # when functions are called with positional parameters.
+        current_args = current_argspecs[existing_name]
+        if (
+            len(current_args) < len(existing_args)
+            or current_args[0 : len(existing_args)] != existing_args
+        ):
+            incompatible_functions.append(existing_name)
+            continue
+
+    if removed_functions:
+        print("Removed functions:")
+        for fn in removed_functions:
+            print(" * " + fn)
+        assert len(removed_functions) == 0
+
+    if incompatible_functions:
+        print("Incompatible functions:")
+        for fn in incompatible_functions:
+            current_args = current_argspecs[fn]
+            existing_args = existing_argspecs[fn]
+            print(" * " + fn + ": " + str(existing_args) + " -> " + str(current_args))
+        assert len(incompatible_functions) == 0
+
+
+def test_compatibility():
+    api_packages = [
+        databricks_cli.cluster_policies.api,
+        databricks_cli.clusters.api,
+        databricks_cli.dbfs.api,
+        databricks_cli.groups.api,
+        databricks_cli.instance_pools.api,
+        databricks_cli.jobs.api,
+        databricks_cli.libraries.api,
+        databricks_cli.pipelines.api,
+        databricks_cli.repos.api,
+        databricks_cli.runs.api,
+        databricks_cli.secrets.api,
+        databricks_cli.tokens.api,
+        databricks_cli.unity_catalog.api,
+        databricks_cli.workspace.api,
+    ]
+
+    current_argspecs = collect_argspecs([databricks_cli.sdk.service] + api_packages)
+
+    test_compatibility_file = os.getenv('TEST_COMPATIBILITY_FILE', default=None)
+    if test_compatibility_file:
+        with open(test_compatibility_file, 'r', encoding='utf-8') as f:
+            existing_argspecs = json.load(f)
+        _test_compatibility(current_argspecs, existing_argspecs)
+    else:
+        # Write argspecs to file.
+        test_compatibility_file = os.path.join(os.path.dirname(__file__), "test_compat.json")
+        with open(test_compatibility_file, 'w', encoding='utf-8') as f:
+            json.dump(current_argspecs, f, indent=2)

From 8721d71e09a21fcb2fb88c00a78078e54e353ee0 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Fri, 1 Jul 2022 15:16:39 +0000
Subject: [PATCH 02/13] No f-strings in Python 2...

---
 tests/test_compat.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index 25ff9ede..7109cfe2 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -45,7 +45,7 @@
 
 def collect_argspecs(modules):
     return {
-        f"{func.__module__}.{func.__qualname__}": inspect.getfullargspec(func).args
+        func.__module__ + "." + func.__qualname__: inspect.getfullargspec(func).args
         for mod in modules
         for (_, clazz) in inspect.getmembers(mod, predicate=inspect.isclass)
         for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)

From e8bc9ed645f379594e78afc3a17e8366983adc09 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Fri, 1 Jul 2022 15:20:37 +0000
Subject: [PATCH 03/13] More Python 2 compat...

---
 tests/test_compat.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index 7109cfe2..dfb9aa13 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -24,6 +24,7 @@
 import inspect
 import json
 import os
+import six
 
 import databricks_cli.sdk.service
 
@@ -43,9 +44,15 @@
 import databricks_cli.workspace.api
 
 
+if six.PY2:
+    getargspec = inspect.getargspec
+else:
+    getargspec = inspect.getfullargspec
+
+
 def collect_argspecs(modules):
     return {
-        func.__module__ + "." + func.__qualname__: inspect.getfullargspec(func).args
+        func.__module__ + "." + func.__qualname__: getargspec(func).args
         for mod in modules
         for (_, clazz) in inspect.getmembers(mod, predicate=inspect.isclass)
         for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)

From 796fb14e9765ffc3fb15028ca0c2ca685f422dd1 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Mon, 4 Jul 2022 09:06:49 +0200
Subject: [PATCH 04/13] Skip compat test on Python 2

---
 tests/test_compat.py | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index dfb9aa13..ac62d436 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -24,6 +24,8 @@
 import inspect
 import json
 import os
+import unittest
+
 import six
 
 import databricks_cli.sdk.service
@@ -44,15 +46,9 @@
 import databricks_cli.workspace.api
 
 
-if six.PY2:
-    getargspec = inspect.getargspec
-else:
-    getargspec = inspect.getfullargspec
-
-
 def collect_argspecs(modules):
     return {
-        func.__module__ + "." + func.__qualname__: getargspec(func).args
+        func.__module__ + "." + func.__qualname__: inspect.getfullargspec(func).args
         for mod in modules
         for (_, clazz) in inspect.getmembers(mod, predicate=inspect.isclass)
         for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)
@@ -92,6 +88,7 @@ def _test_compatibility(current_argspecs, existing_argspecs):
         assert len(incompatible_functions) == 0
 
 
+@unittest.skipIf(six.PY2, reason='Needs Python 3')
 def test_compatibility():
     api_packages = [
         databricks_cli.cluster_policies.api,

From 7019ae76ba3eeaeb42f5f99340e4aacdfc59373e Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Mon, 4 Jul 2022 08:20:14 +0000
Subject: [PATCH 05/13] Ignore superfluous-parens pylint warning

---
 tests/test_compat.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index ac62d436..17ba7707 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -55,6 +55,7 @@ def collect_argspecs(modules):
     }
 
 
+# pylint: disable=superfluous-parens
 def _test_compatibility(current_argspecs, existing_argspecs):
     removed_functions = []
     incompatible_functions = []

From 215a5828de9fbf693fbcf6100a95365ca606401c Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Mon, 4 Jul 2022 08:24:11 +0000
Subject: [PATCH 06/13] Skip compat test for functions outside specified
 modules

---
 tests/test_compat.json | 407 -----------------------------------------
 tests/test_compat.py   |   7 +-
 2 files changed, 5 insertions(+), 409 deletions(-)

diff --git a/tests/test_compat.json b/tests/test_compat.json
index 7b430ec6..d000e527 100644
--- a/tests/test_compat.json
+++ b/tests/test_compat.json
@@ -924,32 +924,6 @@
     "overwrite",
     "headers"
   ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath.__eq__": [
-    "self",
-    "other"
-  ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath.__init__": [
-    "self",
-    "absolute_path",
-    "validate"
-  ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath.__repr__": [
-    "self"
-  ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath._strip_trailing_slash": [
-    "self"
-  ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath.join": [
-    "self",
-    "file_name"
-  ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath.relpath": [
-    "self",
-    "dbfs_path_prefix"
-  ],
-  "databricks_cli.dbfs.dbfs_path.DbfsPath.validate": [
-    "self"
-  ],
   "databricks_cli.dbfs.api.FileInfo.__eq__": [
     "self",
     "other"
@@ -966,9 +940,6 @@
     "is_long_form",
     "is_absolute"
   ],
-  "requests.exceptions.RequestException.__init__": [
-    "self"
-  ],
   "databricks_cli.dbfs.api.TempDir.__enter__": [
     "self"
   ],
@@ -1631,384 +1602,6 @@
     "self",
     "validation_spec"
   ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService._permissions_url": [
-    "self",
-    "sec_type",
-    "sec_name"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_catalog": [
-    "self",
-    "name",
-    "comment",
-    "provider",
-    "share",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_dac": [
-    "self",
-    "metastore_id",
-    "dac_spec",
-    "skip_validation",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_external_location": [
-    "self",
-    "loc_spec",
-    "skip_validation",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_metastore": [
-    "self",
-    "name",
-    "storage_root",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_metastore_assignment": [
-    "self",
-    "workspace_id",
-    "metastore_id",
-    "default_catalog_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_provider": [
-    "self",
-    "name",
-    "comment",
-    "recipient_profile",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_recipient": [
-    "self",
-    "name",
-    "comment",
-    "sharing_code",
-    "allowed_ip_addresses",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_schema": [
-    "self",
-    "catalog_name",
-    "new_schema_name",
-    "comment",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_share": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_storage_credential": [
-    "self",
-    "cred_spec",
-    "skip_validation",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.create_table": [
-    "self",
-    "table_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_catalog": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_dac": [
-    "self",
-    "metastore_id",
-    "dac_id",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_external_location": [
-    "self",
-    "name",
-    "force",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_metastore": [
-    "self",
-    "metastore_id",
-    "force",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_metastore_assignment": [
-    "self",
-    "workspace_id",
-    "metastore_id",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_provider": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_recipient": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_schema": [
-    "self",
-    "full_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_share": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_storage_credential": [
-    "self",
-    "name",
-    "force",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.delete_table": [
-    "self",
-    "full_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_catalog": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_dac": [
-    "self",
-    "metastore_id",
-    "dac_id",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_external_location": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_metastore": [
-    "self",
-    "metastore_id",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_metastore_summary": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_permissions": [
-    "self",
-    "sec_type",
-    "sec_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_provider": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_recipient": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_recipient_share_permissions": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_schema": [
-    "self",
-    "full_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_share": [
-    "self",
-    "name",
-    "include_shared_data",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_storage_credential": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.get_table": [
-    "self",
-    "full_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_catalogs": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_dacs": [
-    "self",
-    "metastore_id",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_external_locations": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_lineages_by_column": [
-    "self",
-    "table_name",
-    "column_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_lineages_by_table": [
-    "self",
-    "table_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_metastores": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_provider_shares": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_providers": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_recipients": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_schemas": [
-    "self",
-    "catalog_name",
-    "name_regex",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_share_permissions": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_shares": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_storage_credentials": [
-    "self",
-    "name_pattern",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_table_summaries": [
-    "self",
-    "catalog_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.list_tables": [
-    "self",
-    "catalog_name",
-    "schema_name",
-    "name_regex",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.replace_permissions": [
-    "self",
-    "sec_type",
-    "sec_name",
-    "perm_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.rotate_recipient_token": [
-    "self",
-    "name",
-    "existing_token_expire_in_seconds",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_catalog": [
-    "self",
-    "name",
-    "catalog_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_external_location": [
-    "self",
-    "name",
-    "loc_spec",
-    "force",
-    "skip_validation",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_metastore": [
-    "self",
-    "metastore_id",
-    "metastore_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_metastore_assignment": [
-    "self",
-    "workspace_id",
-    "metastore_id",
-    "default_catalog_name",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_permissions": [
-    "self",
-    "sec_type",
-    "sec_name",
-    "perm_diff_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_provider": [
-    "self",
-    "name",
-    "new_name",
-    "comment",
-    "recipient_profile",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_recipient": [
-    "self",
-    "name",
-    "recipient_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_schema": [
-    "self",
-    "full_name",
-    "schema_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_share": [
-    "self",
-    "name",
-    "share_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_share_permissions": [
-    "self",
-    "name",
-    "perm_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_storage_credential": [
-    "self",
-    "name",
-    "cred_spec",
-    "skip_validation",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.update_table": [
-    "self",
-    "full_name",
-    "table_spec",
-    "headers"
-  ],
-  "databricks_cli.unity_catalog.uc_service.UnityCatalogService.validate_external_location": [
-    "self",
-    "validation_spec",
-    "headers"
-  ],
   "databricks_cli.workspace.api.WorkspaceApi.__init__": [
     "self",
     "api_client"
diff --git a/tests/test_compat.py b/tests/test_compat.py
index 17ba7707..27a321e7 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -49,9 +49,12 @@
 def collect_argspecs(modules):
     return {
         func.__module__ + "." + func.__qualname__: inspect.getfullargspec(func).args
-        for mod in modules
-        for (_, clazz) in inspect.getmembers(mod, predicate=inspect.isclass)
+        for module in modules
+        for (_, clazz) in inspect.getmembers(module, predicate=inspect.isclass)
         for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)
+
+        # Ignore functions that are defined outside the specified module.
+        if module.__name__ == func.__module__
     }
 
 

From ae3e16f523dddf359b4d604b478559ee5deb41d5 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Mon, 4 Jul 2022 10:37:38 +0000
Subject: [PATCH 07/13] Elaborate on skip reason

---
 tests/test_compat.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index 27a321e7..eb184ee0 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -92,7 +92,7 @@ def _test_compatibility(current_argspecs, existing_argspecs):
         assert len(incompatible_functions) == 0
 
 
-@unittest.skipIf(six.PY2, reason='Needs Python 3')
+@unittest.skipIf(six.PY2, reason='The `inspect` package has significantly changed in Python 3.')
 def test_compatibility():
     api_packages = [
         databricks_cli.cluster_policies.api,

From 4e00fd9747dccd1043b9978d23d053e6341fdc3a Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Tue, 5 Jul 2022 06:48:55 +0000
Subject: [PATCH 08/13] Discover reference argspecs at runtime

---
 .github/workflows/push.yml |   27 +
 tests/test_compat.json     | 1675 ------------------------------------
 tests/test_compat.py       |  126 ++-
 3 files changed, 108 insertions(+), 1720 deletions(-)
 delete mode 100644 tests/test_compat.json

diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 746fe631..3a8a8d23 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -122,3 +122,30 @@ jobs:
           databricks --version
           which dbfs
           dbfs --version
+
+  compat:
+    name: Public API compatibility
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+
+      - name: Checkout main branch
+        uses: actions/checkout@v2
+        with:
+          ref: main
+          path: databricks-cli-main
+
+      - name: Set up Python
+        uses: actions/setup-python@v1
+
+      - name: Install pip
+        run: pip install --upgrade pip
+
+      - name: Install development dependencies (Python 3)
+        run: pip install --upgrade -r dev-requirements-py3.txt
+
+      - name: Run compatibility test
+        run: |
+          export DATABRICKS_CLI_MAIN_CHECKOUT=$GITHUB_WORKSPACE/databricks-cli-main
+          pytest --capture=no tests/test_compat.py
diff --git a/tests/test_compat.json b/tests/test_compat.json
deleted file mode 100644
index d000e527..00000000
--- a/tests/test_compat.json
+++ /dev/null
@@ -1,1675 +0,0 @@
-{
-  "databricks_cli.sdk.service.ClusterService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.ClusterService.create_cluster": [
-    "self",
-    "num_workers",
-    "autoscale",
-    "cluster_name",
-    "spark_version",
-    "spark_conf",
-    "aws_attributes",
-    "node_type_id",
-    "driver_node_type_id",
-    "ssh_public_keys",
-    "custom_tags",
-    "cluster_log_conf",
-    "spark_env_vars",
-    "autotermination_minutes",
-    "enable_elastic_disk",
-    "cluster_source",
-    "instance_pool_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.delete_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.edit_cluster": [
-    "self",
-    "cluster_id",
-    "num_workers",
-    "autoscale",
-    "cluster_name",
-    "spark_version",
-    "spark_conf",
-    "aws_attributes",
-    "node_type_id",
-    "driver_node_type_id",
-    "ssh_public_keys",
-    "custom_tags",
-    "cluster_log_conf",
-    "spark_env_vars",
-    "autotermination_minutes",
-    "enable_elastic_disk",
-    "cluster_source",
-    "instance_pool_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.get_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.get_events": [
-    "self",
-    "cluster_id",
-    "start_time",
-    "end_time",
-    "order",
-    "event_types",
-    "offset",
-    "limit",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.list_available_zones": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.list_clusters": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.list_node_types": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.list_spark_versions": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.permanent_delete_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.pin_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.resize_cluster": [
-    "self",
-    "cluster_id",
-    "num_workers",
-    "autoscale",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.restart_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.start_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ClusterService.unpin_cluster": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.DbfsService.add_block": [
-    "self",
-    "handle",
-    "data",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.add_block_test": [
-    "self",
-    "handle",
-    "data",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.close": [
-    "self",
-    "handle",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.close_test": [
-    "self",
-    "handle",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.create": [
-    "self",
-    "path",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.create_test": [
-    "self",
-    "path",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.delete": [
-    "self",
-    "path",
-    "recursive",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.delete_test": [
-    "self",
-    "path",
-    "recursive",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.get_status": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.get_status_test": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.list": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.list_test": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.mkdirs": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.mkdirs_test": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.move": [
-    "self",
-    "source_path",
-    "destination_path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.move_test": [
-    "self",
-    "source_path",
-    "destination_path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.put": [
-    "self",
-    "path",
-    "contents",
-    "overwrite",
-    "headers",
-    "src_path"
-  ],
-  "databricks_cli.sdk.service.DbfsService.put_test": [
-    "self",
-    "path",
-    "contents",
-    "overwrite",
-    "headers",
-    "src_path"
-  ],
-  "databricks_cli.sdk.service.DbfsService.read": [
-    "self",
-    "path",
-    "offset",
-    "length",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DbfsService.read_test": [
-    "self",
-    "path",
-    "offset",
-    "length",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.create": [
-    "self",
-    "id",
-    "name",
-    "storage",
-    "configuration",
-    "clusters",
-    "libraries",
-    "trigger",
-    "filters",
-    "target",
-    "continuous",
-    "development",
-    "allow_duplicate_names",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.delete": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.deploy": [
-    "self",
-    "pipeline_id",
-    "id",
-    "name",
-    "storage",
-    "configuration",
-    "clusters",
-    "libraries",
-    "trigger",
-    "filters",
-    "target",
-    "continuous",
-    "development",
-    "allow_duplicate_names",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.get": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.list": [
-    "self",
-    "pagination",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.reset": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.run": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.start_update": [
-    "self",
-    "pipeline_id",
-    "full_refresh",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.DeltaPipelinesService.stop": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.GroupsService.add_to_group": [
-    "self",
-    "parent_name",
-    "user_name",
-    "group_name",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.create_group": [
-    "self",
-    "group_name",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.get_group_members": [
-    "self",
-    "group_name",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.get_groups": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.get_groups_for_principal": [
-    "self",
-    "user_name",
-    "group_name",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.remove_from_group": [
-    "self",
-    "parent_name",
-    "user_name",
-    "group_name",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.GroupsService.remove_group": [
-    "self",
-    "group_name",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.InstancePoolService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.InstancePoolService.create_instance_pool": [
-    "self",
-    "instance_pool_name",
-    "min_idle_instances",
-    "max_capacity",
-    "aws_attributes",
-    "node_type_id",
-    "custom_tags",
-    "idle_instance_autotermination_minutes",
-    "enable_elastic_disk",
-    "disk_spec",
-    "preloaded_spark_versions",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.InstancePoolService.delete_instance_pool": [
-    "self",
-    "instance_pool_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.InstancePoolService.edit_instance_pool": [
-    "self",
-    "instance_pool_id",
-    "instance_pool_name",
-    "min_idle_instances",
-    "max_capacity",
-    "aws_attributes",
-    "node_type_id",
-    "custom_tags",
-    "idle_instance_autotermination_minutes",
-    "enable_elastic_disk",
-    "disk_spec",
-    "preloaded_spark_versions",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.InstancePoolService.get_instance_pool": [
-    "self",
-    "instance_pool_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.InstancePoolService.list_instance_pools": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.JobsService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.JobsService.cancel_run": [
-    "self",
-    "run_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.create_job": [
-    "self",
-    "name",
-    "existing_cluster_id",
-    "new_cluster",
-    "libraries",
-    "email_notifications",
-    "timeout_seconds",
-    "max_retries",
-    "min_retry_interval_millis",
-    "retry_on_timeout",
-    "schedule",
-    "notebook_task",
-    "spark_jar_task",
-    "spark_python_task",
-    "spark_submit_task",
-    "max_concurrent_runs",
-    "tasks",
-    "headers",
-    "version",
-    "git_source"
-  ],
-  "databricks_cli.sdk.service.JobsService.delete_job": [
-    "self",
-    "job_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.delete_run": [
-    "self",
-    "run_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.export_run": [
-    "self",
-    "run_id",
-    "views_to_export",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.get_job": [
-    "self",
-    "job_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.get_run": [
-    "self",
-    "run_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.get_run_output": [
-    "self",
-    "run_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.list_jobs": [
-    "self",
-    "job_type",
-    "expand_tasks",
-    "limit",
-    "offset",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.list_runs": [
-    "self",
-    "job_id",
-    "active_only",
-    "completed_only",
-    "offset",
-    "limit",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.reset_job": [
-    "self",
-    "job_id",
-    "new_settings",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.run_now": [
-    "self",
-    "job_id",
-    "jar_params",
-    "notebook_params",
-    "python_params",
-    "spark_submit_params",
-    "python_named_params",
-    "idempotency_token",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.JobsService.submit_run": [
-    "self",
-    "run_name",
-    "existing_cluster_id",
-    "new_cluster",
-    "libraries",
-    "notebook_task",
-    "spark_jar_task",
-    "spark_python_task",
-    "spark_submit_task",
-    "timeout_seconds",
-    "tasks",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.sdk.service.ManagedLibraryService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.ManagedLibraryService.all_cluster_statuses": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ManagedLibraryService.cluster_status": [
-    "self",
-    "cluster_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ManagedLibraryService.install_libraries": [
-    "self",
-    "cluster_id",
-    "libraries",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ManagedLibraryService.uninstall_libraries": [
-    "self",
-    "cluster_id",
-    "libraries",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.PolicyService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.PolicyService.create_policy": [
-    "self",
-    "policy_name",
-    "definition",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.PolicyService.delete_policy": [
-    "self",
-    "policy_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.PolicyService.edit_policy": [
-    "self",
-    "policy_id",
-    "policy_name",
-    "definition",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.PolicyService.get_policy": [
-    "self",
-    "policy_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.PolicyService.list_policies": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ReposService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.ReposService.create_repo": [
-    "self",
-    "url",
-    "provider",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ReposService.delete_repo": [
-    "self",
-    "id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ReposService.detect_repo_provider": [
-    "url"
-  ],
-  "databricks_cli.sdk.service.ReposService.get_repo": [
-    "self",
-    "id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ReposService.list_repos": [
-    "self",
-    "path_prefix",
-    "next_page_token",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.ReposService.update_repo": [
-    "self",
-    "id",
-    "branch",
-    "tag",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.SecretService.create_scope": [
-    "self",
-    "scope",
-    "initial_manage_principal",
-    "scope_backend_type",
-    "backend_azure_keyvault",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.delete_acl": [
-    "self",
-    "scope",
-    "principal",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.delete_scope": [
-    "self",
-    "scope",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.delete_secret": [
-    "self",
-    "scope",
-    "key",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.get_acl": [
-    "self",
-    "scope",
-    "principal",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.list_acls": [
-    "self",
-    "scope",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.list_scopes": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.list_secrets": [
-    "self",
-    "scope",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.put_acl": [
-    "self",
-    "scope",
-    "principal",
-    "permission",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.SecretService.put_secret": [
-    "self",
-    "scope",
-    "key",
-    "string_value",
-    "bytes_value",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.TokenService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.TokenService.create_token": [
-    "self",
-    "lifetime_seconds",
-    "comment",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.TokenService.list_tokens": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.TokenService.revoke_token": [
-    "self",
-    "token_id",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.__init__": [
-    "self",
-    "client"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.delete": [
-    "self",
-    "path",
-    "recursive",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.export_workspace": [
-    "self",
-    "path",
-    "format",
-    "direct_download",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.get_status": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.import_workspace": [
-    "self",
-    "path",
-    "format",
-    "language",
-    "content",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.list": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.sdk.service.WorkspaceService.mkdirs": [
-    "self",
-    "path",
-    "headers"
-  ],
-  "databricks_cli.cluster_policies.api.ClusterPolicyApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.cluster_policies.api.ClusterPolicyApi.create_cluster_policy": [
-    "self",
-    "json"
-  ],
-  "databricks_cli.cluster_policies.api.ClusterPolicyApi.delete_cluster_policy": [
-    "self",
-    "policy_id"
-  ],
-  "databricks_cli.cluster_policies.api.ClusterPolicyApi.edit_cluster_policy": [
-    "self",
-    "json"
-  ],
-  "databricks_cli.cluster_policies.api.ClusterPolicyApi.get_cluster_policy": [
-    "self",
-    "policy_id"
-  ],
-  "databricks_cli.cluster_policies.api.ClusterPolicyApi.list_cluster_policies": [
-    "self"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.create_cluster": [
-    "self",
-    "json"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.delete_cluster": [
-    "self",
-    "cluster_id"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.edit_cluster": [
-    "self",
-    "json"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.get_cluster": [
-    "self",
-    "cluster_id"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.get_cluster_by_name": [
-    "self",
-    "cluster_name"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.get_cluster_id_for_name": [
-    "self",
-    "cluster_name"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.get_cluster_ids_by_name": [
-    "self",
-    "cluster_name"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.get_events": [
-    "self",
-    "cluster_id",
-    "start_time",
-    "end_time",
-    "order",
-    "event_types",
-    "offset",
-    "limit"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.list_clusters": [
-    "self"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.list_node_types": [
-    "self"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.list_zones": [
-    "self"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.permanent_delete": [
-    "self",
-    "cluster_id"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.resize_cluster": [
-    "self",
-    "cluster_id",
-    "num_workers"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.restart_cluster": [
-    "self",
-    "cluster_id"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.spark_versions": [
-    "self"
-  ],
-  "databricks_cli.clusters.api.ClusterApi.start_cluster": [
-    "self",
-    "cluster_id"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi._copy_from_dbfs_non_recursive": [
-    "self",
-    "dbfs_path_src",
-    "dst",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi._copy_from_dbfs_recursive": [
-    "self",
-    "dbfs_path_src",
-    "dst",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi._copy_to_dbfs_non_recursive": [
-    "self",
-    "src",
-    "dbfs_path_dst",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi._copy_to_dbfs_recursive": [
-    "self",
-    "src",
-    "dbfs_path_dst",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.cat": [
-    "self",
-    "src"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.cp": [
-    "self",
-    "recursive",
-    "overwrite",
-    "src",
-    "dst",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.delete": [
-    "self",
-    "dbfs_path",
-    "recursive",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.file_exists": [
-    "self",
-    "dbfs_path",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.get_file": [
-    "self",
-    "dbfs_path",
-    "dst_path",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.get_num_files_deleted": [
-    "partial_delete_error"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.get_status": [
-    "self",
-    "dbfs_path",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.list_files": [
-    "self",
-    "dbfs_path",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.mkdirs": [
-    "self",
-    "dbfs_path",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.move": [
-    "self",
-    "dbfs_src",
-    "dbfs_dst",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.DbfsApi.put_file": [
-    "self",
-    "src_path",
-    "dbfs_path",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.dbfs.api.FileInfo.__eq__": [
-    "self",
-    "other"
-  ],
-  "databricks_cli.dbfs.api.FileInfo.__init__": [
-    "self",
-    "dbfs_path",
-    "is_dir",
-    "file_size",
-    "modification_time"
-  ],
-  "databricks_cli.dbfs.api.FileInfo.to_row": [
-    "self",
-    "is_long_form",
-    "is_absolute"
-  ],
-  "databricks_cli.dbfs.api.TempDir.__enter__": [
-    "self"
-  ],
-  "databricks_cli.dbfs.api.TempDir.__exit__": [
-    "self",
-    "tp",
-    "val",
-    "traceback"
-  ],
-  "databricks_cli.dbfs.api.TempDir.__init__": [
-    "self",
-    "remove_on_exit"
-  ],
-  "databricks_cli.dbfs.api.TempDir.path": [
-    "self"
-  ],
-  "databricks_cli.groups.api.GroupsApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.groups.api.GroupsApi.add_member": [
-    "self",
-    "parent_name",
-    "user_name",
-    "group_name"
-  ],
-  "databricks_cli.groups.api.GroupsApi.create": [
-    "self",
-    "group_name"
-  ],
-  "databricks_cli.groups.api.GroupsApi.delete": [
-    "self",
-    "group_name"
-  ],
-  "databricks_cli.groups.api.GroupsApi.list_all": [
-    "self"
-  ],
-  "databricks_cli.groups.api.GroupsApi.list_members": [
-    "self",
-    "group_name"
-  ],
-  "databricks_cli.groups.api.GroupsApi.list_parents": [
-    "self",
-    "user_name",
-    "group_name"
-  ],
-  "databricks_cli.groups.api.GroupsApi.remove_member": [
-    "self",
-    "parent_name",
-    "user_name",
-    "group_name"
-  ],
-  "databricks_cli.instance_pools.api.InstancePoolsApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.instance_pools.api.InstancePoolsApi.create_instance_pool": [
-    "self",
-    "json"
-  ],
-  "databricks_cli.instance_pools.api.InstancePoolsApi.delete_instance_pool": [
-    "self",
-    "instance_pool_id"
-  ],
-  "databricks_cli.instance_pools.api.InstancePoolsApi.edit_instance_pool": [
-    "self",
-    "json"
-  ],
-  "databricks_cli.instance_pools.api.InstancePoolsApi.get_instance_pool": [
-    "self",
-    "instance_pool_id"
-  ],
-  "databricks_cli.instance_pools.api.InstancePoolsApi.list_instance_pools": [
-    "self"
-  ],
-  "databricks_cli.jobs.api.JobsApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.jobs.api.JobsApi._list_jobs_by_name": [
-    "self",
-    "name",
-    "headers"
-  ],
-  "databricks_cli.jobs.api.JobsApi.create_job": [
-    "self",
-    "json",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.jobs.api.JobsApi.delete_job": [
-    "self",
-    "job_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.jobs.api.JobsApi.get_job": [
-    "self",
-    "job_id",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.jobs.api.JobsApi.list_jobs": [
-    "self",
-    "job_type",
-    "expand_tasks",
-    "offset",
-    "limit",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.jobs.api.JobsApi.reset_job": [
-    "self",
-    "json",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.jobs.api.JobsApi.run_now": [
-    "self",
-    "job_id",
-    "jar_params",
-    "notebook_params",
-    "python_params",
-    "spark_submit_params",
-    "python_named_params",
-    "idempotency_token",
-    "headers",
-    "version"
-  ],
-  "databricks_cli.libraries.api.LibrariesApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.libraries.api.LibrariesApi.all_cluster_statuses": [
-    "self"
-  ],
-  "databricks_cli.libraries.api.LibrariesApi.cluster_status": [
-    "self",
-    "cluster_id"
-  ],
-  "databricks_cli.libraries.api.LibrariesApi.install_libraries": [
-    "self",
-    "cluster_id",
-    "libraries"
-  ],
-  "databricks_cli.libraries.api.LibrariesApi.uninstall_libraries": [
-    "self",
-    "cluster_id",
-    "libraries"
-  ],
-  "databricks_cli.pipelines.api.LibraryObject.__eq__": [
-    "self",
-    "other"
-  ],
-  "databricks_cli.pipelines.api.LibraryObject.__init__": [
-    "self",
-    "lib_type",
-    "lib_path"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi._get_hashed_path": [
-    "path"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi._identify_local_libraries": [
-    "lib_objects"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi._upload_libraries_and_update_settings": [
-    "self",
-    "settings",
-    "settings_dir"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi._upload_local_libraries": [
-    "self",
-    "settings_dir",
-    "local_lib_objects"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.create": [
-    "self",
-    "settings",
-    "settings_dir",
-    "allow_duplicate_names",
-    "headers"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.delete": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.edit": [
-    "self",
-    "settings",
-    "settings_dir",
-    "allow_duplicate_names",
-    "headers"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.get": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.list": [
-    "self",
-    "headers"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.start_update": [
-    "self",
-    "pipeline_id",
-    "full_refresh",
-    "headers"
-  ],
-  "databricks_cli.pipelines.api.PipelinesApi.stop": [
-    "self",
-    "pipeline_id",
-    "headers"
-  ],
-  "databricks_cli.repos.api.ReposApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.repos.api.ReposApi.create": [
-    "self",
-    "url",
-    "provider",
-    "path"
-  ],
-  "databricks_cli.repos.api.ReposApi.delete": [
-    "self",
-    "repo_id"
-  ],
-  "databricks_cli.repos.api.ReposApi.get": [
-    "self",
-    "repo_id"
-  ],
-  "databricks_cli.repos.api.ReposApi.get_repo_id": [
-    "self",
-    "path"
-  ],
-  "databricks_cli.repos.api.ReposApi.list": [
-    "self",
-    "path_prefix",
-    "next_page_token"
-  ],
-  "databricks_cli.repos.api.ReposApi.update": [
-    "self",
-    "repo_id",
-    "branch",
-    "tag"
-  ],
-  "databricks_cli.runs.api.RunsApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.runs.api.RunsApi.cancel_run": [
-    "self",
-    "run_id",
-    "version"
-  ],
-  "databricks_cli.runs.api.RunsApi.get_run": [
-    "self",
-    "run_id",
-    "version"
-  ],
-  "databricks_cli.runs.api.RunsApi.get_run_output": [
-    "self",
-    "run_id",
-    "version"
-  ],
-  "databricks_cli.runs.api.RunsApi.list_runs": [
-    "self",
-    "job_id",
-    "active_only",
-    "completed_only",
-    "offset",
-    "limit",
-    "version"
-  ],
-  "databricks_cli.runs.api.RunsApi.submit_run": [
-    "self",
-    "json",
-    "version"
-  ],
-  "databricks_cli.secrets.api.SecretApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.secrets.api.SecretApi.create_scope": [
-    "self",
-    "scope",
-    "initial_manage_principal",
-    "scope_backend_type",
-    "backend_azure_keyvault"
-  ],
-  "databricks_cli.secrets.api.SecretApi.delete_acl": [
-    "self",
-    "scope",
-    "principal"
-  ],
-  "databricks_cli.secrets.api.SecretApi.delete_scope": [
-    "self",
-    "scope"
-  ],
-  "databricks_cli.secrets.api.SecretApi.delete_secret": [
-    "self",
-    "scope",
-    "key"
-  ],
-  "databricks_cli.secrets.api.SecretApi.get_acl": [
-    "self",
-    "scope",
-    "principal"
-  ],
-  "databricks_cli.secrets.api.SecretApi.list_acls": [
-    "self",
-    "scope"
-  ],
-  "databricks_cli.secrets.api.SecretApi.list_scopes": [
-    "self"
-  ],
-  "databricks_cli.secrets.api.SecretApi.list_secrets": [
-    "self",
-    "scope"
-  ],
-  "databricks_cli.secrets.api.SecretApi.put_acl": [
-    "self",
-    "scope",
-    "principal",
-    "permission"
-  ],
-  "databricks_cli.secrets.api.SecretApi.put_secret": [
-    "self",
-    "scope",
-    "key",
-    "string_value",
-    "bytes_value"
-  ],
-  "databricks_cli.tokens.api.TokensApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.tokens.api.TokensApi.create": [
-    "self",
-    "lifetime_seconds",
-    "comment"
-  ],
-  "databricks_cli.tokens.api.TokensApi.list": [
-    "self"
-  ],
-  "databricks_cli.tokens.api.TokensApi.revoke": [
-    "self",
-    "token_id"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_catalog": [
-    "self",
-    "catalog_name",
-    "comment",
-    "provider",
-    "share"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_dac": [
-    "self",
-    "metastore_id",
-    "dac_spec",
-    "skip_validation"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_external_location": [
-    "self",
-    "loc_spec",
-    "skip_validation"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_metastore": [
-    "self",
-    "name",
-    "storage_root"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_metastore_assignment": [
-    "self",
-    "workspace_id",
-    "metastore_id",
-    "default_catalog_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_provider": [
-    "self",
-    "name",
-    "comment",
-    "recipient_profile"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_recipient": [
-    "self",
-    "name",
-    "comment",
-    "sharing_code",
-    "allowed_ip_addresses"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_schema": [
-    "self",
-    "catalog_name",
-    "schema_name",
-    "comment"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_share": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_storage_credential": [
-    "self",
-    "cred_spec",
-    "skip_validation"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.create_table": [
-    "self",
-    "table_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_catalog": [
-    "self",
-    "catalog_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_dac": [
-    "self",
-    "metastore_id",
-    "dac_id"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_external_location": [
-    "self",
-    "name",
-    "force"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_metastore": [
-    "self",
-    "metastore_id",
-    "force"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_metastore_assignment": [
-    "self",
-    "workspace_id",
-    "metastore_id"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_provider": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_recipient": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_schema": [
-    "self",
-    "schema_full_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_share": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_storage_credential": [
-    "self",
-    "name",
-    "force"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.delete_table": [
-    "self",
-    "table_full_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_catalog": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_dac": [
-    "self",
-    "metastore_id",
-    "dac_id"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_external_location": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_metastore": [
-    "self",
-    "metastore_id"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_metastore_summary": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_permissions": [
-    "self",
-    "sec_type",
-    "sec_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_provider": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_recipient": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_recipient_share_permissions": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_schema": [
-    "self",
-    "full_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_share": [
-    "self",
-    "name",
-    "include_shared_data"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_storage_credential": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.get_table": [
-    "self",
-    "full_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_catalogs": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_dacs": [
-    "self",
-    "metastore_id"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_external_locations": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_lineages_by_column": [
-    "self",
-    "table_name",
-    "column_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_lineages_by_table": [
-    "self",
-    "table_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_metastores": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_provider_shares": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_providers": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_recipients": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_schemas": [
-    "self",
-    "catalog_name",
-    "name_pattern"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_share_permissions": [
-    "self",
-    "name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_shares": [
-    "self"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_storage_credentials": [
-    "self",
-    "name_pattern"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_table_summaries": [
-    "self",
-    "catalog_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.list_tables": [
-    "self",
-    "catalog_name",
-    "schema_name",
-    "name_pattern"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.replace_permissions": [
-    "self",
-    "sec_type",
-    "sec_name",
-    "perm_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.rotate_recipient_token": [
-    "self",
-    "name",
-    "existing_token_expire_in_seconds"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_catalog": [
-    "self",
-    "name",
-    "catalog_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_external_location": [
-    "self",
-    "name",
-    "loc_spec",
-    "force",
-    "skip_validation"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_metastore": [
-    "self",
-    "metastore_id",
-    "metastore_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_metastore_assignment": [
-    "self",
-    "workspace_id",
-    "metastore_id",
-    "default_catalog_name"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_permissions": [
-    "self",
-    "sec_type",
-    "sec_name",
-    "diff_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_provider": [
-    "self",
-    "name",
-    "new_name",
-    "comment",
-    "recipient_profile"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_recipient": [
-    "self",
-    "name",
-    "recipient_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_schema": [
-    "self",
-    "full_name",
-    "schema_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_share": [
-    "self",
-    "name",
-    "share_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_share_permissions": [
-    "self",
-    "name",
-    "perm_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_storage_credential": [
-    "self",
-    "name",
-    "cred_spec",
-    "skip_validation"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.update_table": [
-    "self",
-    "full_name",
-    "table_spec"
-  ],
-  "databricks_cli.unity_catalog.api.UnityCatalogApi.validate_external_location": [
-    "self",
-    "validation_spec"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.__init__": [
-    "self",
-    "api_client"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.delete": [
-    "self",
-    "workspace_path",
-    "is_recursive",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.export_workspace": [
-    "self",
-    "source_path",
-    "target_path",
-    "fmt",
-    "is_overwrite",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.export_workspace_dir": [
-    "self",
-    "source_path",
-    "target_path",
-    "overwrite",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.get_status": [
-    "self",
-    "workspace_path",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.import_workspace": [
-    "self",
-    "source_path",
-    "target_path",
-    "language",
-    "fmt",
-    "is_overwrite",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.import_workspace_dir": [
-    "self",
-    "source_path",
-    "target_path",
-    "overwrite",
-    "exclude_hidden_files",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.list_objects": [
-    "self",
-    "workspace_path",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceApi.mkdirs": [
-    "self",
-    "workspace_path",
-    "headers"
-  ],
-  "databricks_cli.workspace.api.WorkspaceFileInfo.__init__": [
-    "self",
-    "path",
-    "object_type",
-    "object_id",
-    "language"
-  ],
-  "databricks_cli.workspace.api.WorkspaceFileInfo.to_row": [
-    "self",
-    "is_long_form",
-    "is_absolute",
-    "with_object_id"
-  ]
-}
\ No newline at end of file
diff --git a/tests/test_compat.py b/tests/test_compat.py
index eb184ee0..ffa6aa73 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -21,34 +21,35 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import importlib
 import inspect
 import json
 import os
+import re
+import sys
+import tempfile
 import unittest
 
 import six
 
-import databricks_cli.sdk.service
 
-import databricks_cli.cluster_policies.api
-import databricks_cli.clusters.api
-import databricks_cli.dbfs.api
-import databricks_cli.groups.api
-import databricks_cli.instance_pools.api
-import databricks_cli.jobs.api
-import databricks_cli.libraries.api
-import databricks_cli.pipelines.api
-import databricks_cli.repos.api
-import databricks_cli.runs.api
-import databricks_cli.secrets.api
-import databricks_cli.tokens.api
-import databricks_cli.unity_catalog.api
-import databricks_cli.workspace.api
+def normalize_module_name(str):
+    """
+    Replace `databricks_cli_main` with `databricks_cli` to make objects comparable.
+    """
+    return re.sub(r"^(databricks_cli)_main", r"\1", str)
+
+
+def func_key(func):
+    """
+    Returns key of the full package path to the specified function.
+    """
+    return normalize_module_name(func.__module__) + "." + func.__qualname__
 
 
 def collect_argspecs(modules):
     return {
-        func.__module__ + "." + func.__qualname__: inspect.getfullargspec(func).args
+        func_key(func): inspect.getfullargspec(func).args
         for module in modules
         for (_, clazz) in inspect.getmembers(module, predicate=inspect.isclass)
         for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)
@@ -92,34 +93,69 @@ def _test_compatibility(current_argspecs, existing_argspecs):
         assert len(incompatible_functions) == 0
 
 
-@unittest.skipIf(six.PY2, reason='The `inspect` package has significantly changed in Python 3.')
-def test_compatibility():
-    api_packages = [
-        databricks_cli.cluster_policies.api,
-        databricks_cli.clusters.api,
-        databricks_cli.dbfs.api,
-        databricks_cli.groups.api,
-        databricks_cli.instance_pools.api,
-        databricks_cli.jobs.api,
-        databricks_cli.libraries.api,
-        databricks_cli.pipelines.api,
-        databricks_cli.repos.api,
-        databricks_cli.runs.api,
-        databricks_cli.secrets.api,
-        databricks_cli.tokens.api,
-        databricks_cli.unity_catalog.api,
-        databricks_cli.workspace.api,
+def import_databricks_modules(root):
+    return [
+        # Generated code.
+        importlib.import_module(".sdk.service", root),
+
+        # Functionality under the API package is used as an SDK by some.
+        importlib.import_module(".cluster_policies.api", root),
+        importlib.import_module(".clusters.api", root),
+        importlib.import_module(".dbfs.api", root),
+        importlib.import_module(".groups.api", root),
+        importlib.import_module(".instance_pools.api", root),
+        importlib.import_module(".jobs.api", root),
+        importlib.import_module(".libraries.api", root),
+        importlib.import_module(".pipelines.api", root),
+        importlib.import_module(".repos.api", root),
+        importlib.import_module(".runs.api", root),
+        importlib.import_module(".secrets.api", root),
+        importlib.import_module(".tokens.api", root),
+        importlib.import_module(".unity_catalog.api", root),
+        importlib.import_module(".workspace.api", root),
     ]
 
-    current_argspecs = collect_argspecs([databricks_cli.sdk.service] + api_packages)
-
-    test_compatibility_file = os.getenv('TEST_COMPATIBILITY_FILE', default=None)
-    if test_compatibility_file:
-        with open(test_compatibility_file, 'r', encoding='utf-8') as f:
-            existing_argspecs = json.load(f)
-        _test_compatibility(current_argspecs, existing_argspecs)
-    else:
-        # Write argspecs to file.
-        test_compatibility_file = os.path.join(os.path.dirname(__file__), "test_compat.json")
-        with open(test_compatibility_file, 'w', encoding='utf-8') as f:
-            json.dump(current_argspecs, f, indent=2)
+
+def databricks_cli_main_checkout_path():
+    return os.getenv('DATABRICKS_CLI_MAIN_CHECKOUT')
+
+
+def can_perform_compatibility_check():
+    """
+    Checks if the user has specified a path to a parallel checkout
+    of the main branch of the databricks-cli repository.
+
+    The files in this checkout will be imported under an aliased
+    package name such that we have access to the argument specs
+    of the functions in both the main branch and this repository.
+    """
+    path = databricks_cli_main_checkout_path()
+    return path and os.path.isdir(path)
+
+
+@unittest.skipIf(six.PY2 or not can_perform_compatibility_check(), reason=None)
+def test_compatibility():
+    # Make the specified path importable by symlinking its `databricks_cli`
+    # directory
+    tmpdir = tempfile.mkdtemp()
+    sys.path.append(tmpdir)
+    os.symlink(
+        os.path.join(databricks_cli_main_checkout_path(), "databricks_cli"),
+        os.path.join(tmpdir, "databricks_cli_main"),
+    )
+
+    current_argspecs = collect_argspecs(import_databricks_modules("databricks_cli"))
+    existing_argspecs = collect_argspecs(import_databricks_modules("databricks_cli_main"))
+    _test_compatibility(current_argspecs, existing_argspecs)
+
+
+if __name__ == '__main__':
+    """
+    If run directly, instead of through pytest, dump a copy
+    of the argspecs in this repository.
+    """
+    json.dump(
+        obj=collect_argspecs(import_databricks_modules("databricks_cli")),
+        fp=sys.stdout,
+        indent=2,
+    )

From d5e68e9e589bb3fde878fc16d56a27edaf0340e0 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Tue, 5 Jul 2022 06:51:38 +0000
Subject: [PATCH 09/13] Lint

---
 tests/test_compat.py | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index ffa6aa73..8ec2f972 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -33,11 +33,11 @@
 import six
 
 
-def normalize_module_name(str):
+def normalize_module_name(name):
     """
     Replace `databricks_cli_main` with `databricks_cli` to make objects comparable.
     """
-    return re.sub(r"^(databricks_cli)_main", r"\1", str)
+    return re.sub(r"^(databricks_cli)_main", r"\1", name)
 
 
 def func_key(func):
@@ -53,7 +53,6 @@ def collect_argspecs(modules):
         for module in modules
         for (_, clazz) in inspect.getmembers(module, predicate=inspect.isclass)
         for (_, func) in inspect.getmembers(clazz, predicate=inspect.isfunction)
-
         # Ignore functions that are defined outside the specified module.
         if module.__name__ == func.__module__
     }
@@ -97,7 +96,6 @@ def import_databricks_modules(root):
     return [
         # Generated code.
         importlib.import_module(".sdk.service", root),
-
         # Functionality under the API package is used as an SDK by some.
         importlib.import_module(".cluster_policies.api", root),
         importlib.import_module(".clusters.api", root),
@@ -150,10 +148,7 @@ def test_compatibility():
 
 
 if __name__ == '__main__':
-    """
-    If run directly, instead of through pytest, dump a copy
-    of the argspecs in this repository.
-    """
+    # If run directly, write the argspecs in this repository to stdout.
     json.dump(
         obj=collect_argspecs(import_databricks_modules("databricks_cli")),
         fp=sys.stdout,

From bcf13f62015386ef2b768b26f05c100af32d78fc Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Tue, 5 Jul 2022 06:57:08 +0000
Subject: [PATCH 10/13] Comment

---
 tests/test_compat.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tests/test_compat.py b/tests/test_compat.py
index 8ec2f972..5b5133c9 100644
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -133,6 +133,13 @@ def can_perform_compatibility_check():
 
 @unittest.skipIf(six.PY2 or not can_perform_compatibility_check(), reason=None)
 def test_compatibility():
+    """
+    To run this test, checkout a reference copy of this repository and set
+    the DATABRICKS_CLI_MAIN_CHECKOUT environment variable to its path.
+
+    See `.github/workflows/` for the configuration of the GitHub action that runs it.
+    """
+
     # Make the specified path importable by symlinking its `databricks_cli`
     # directory
     tmpdir = tempfile.mkdtemp()

From d0c582ebc7ee958e48ec2d88f429bcb4a588e115 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Tue, 5 Jul 2022 06:57:20 +0000
Subject: [PATCH 11/13] Make the compat test fail

---
 databricks_cli/sdk/service.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/databricks_cli/sdk/service.py b/databricks_cli/sdk/service.py
index 9c2b890f..692b42b4 100755
--- a/databricks_cli/sdk/service.py
+++ b/databricks_cli/sdk/service.py
@@ -762,7 +762,7 @@ def put_secret(self, scope, key, string_value=None, bytes_value=None, headers=No
             _data['bytes_value'] = bytes_value
         return self.client.perform_query('POST', '/secrets/put', data=_data, headers=headers)
 
-    def delete_secret(self, scope, key, headers=None):
+    def delete_secret(self, scope, key, foo, headers=None):
         _data = {}
         if scope is not None:
             _data['scope'] = scope

From 3c671f8ccca254f2ff76e7b34a18305acaac6196 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Tue, 5 Jul 2022 07:00:06 +0000
Subject: [PATCH 12/13] Revert "Make the compat test fail"

This reverts commit d0c582ebc7ee958e48ec2d88f429bcb4a588e115.
---
 databricks_cli/sdk/service.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/databricks_cli/sdk/service.py b/databricks_cli/sdk/service.py
index 692b42b4..9c2b890f 100755
--- a/databricks_cli/sdk/service.py
+++ b/databricks_cli/sdk/service.py
@@ -762,7 +762,7 @@ def put_secret(self, scope, key, string_value=None, bytes_value=None, headers=No
             _data['bytes_value'] = bytes_value
         return self.client.perform_query('POST', '/secrets/put', data=_data, headers=headers)
 
-    def delete_secret(self, scope, key, foo, headers=None):
+    def delete_secret(self, scope, key, headers=None):
         _data = {}
         if scope is not None:
             _data['scope'] = scope

From 6556415a7be6cb889a61c8c41de562f497e6b805 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Date: Tue, 5 Jul 2022 09:22:00 +0000
Subject: [PATCH 13/13] Add script to run compatibility test

---
 scripts/test_compatibility.sh | 42 +++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100755 scripts/test_compatibility.sh

diff --git a/scripts/test_compatibility.sh b/scripts/test_compatibility.sh
new file mode 100755
index 00000000..2ccf523d
--- /dev/null
+++ b/scripts/test_compatibility.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+# Databricks CLI
+# Copyright 2017 Databricks, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"), except
+# that the use of services to which certain application programming
+# interfaces (each, an "API") connect requires that the user first obtain
+# a license for the use of the APIs from Databricks, Inc. ("Databricks"),
+# by creating an account at www.databricks.com and agreeing to either (a)
+# the Community Edition Terms of Service, (b) the Databricks Terms of
+# Service, or (c) another written agreement between Licensee and Databricks
+# for the use of the APIs.
+#
+# You may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -e
+
+# Make sure /tmp holds an up to date checkout of this repository.
+databricks_cli_repo=https://github.com/databricks/databricks-cli
+databricks_cli_path=/tmp/databricks_cli_main
+echo "Updating $databricks_cli_repo in $databricks_cli_path..."
+if [ ! -d $databricks_cli_path ]; then
+    git clone $databricks_cli_repo $databricks_cli_path
+else
+    (
+        cd $databricks_cli_path
+        git pull --ff origin
+    )
+fi
+
+# Run compatibility test given the reference checkout.
+export DATABRICKS_CLI_MAIN_CHECKOUT=$databricks_cli_path
+exec python3 -m pytest tests/test_compat.py
