Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump python sdk version #827

Open
wants to merge 17 commits into
base: 1.10.latest
Choose a base branch
from
Open

Conversation

eric-wang-1990
Copy link
Collaborator

@eric-wang-1990 eric-wang-1990 commented Oct 14, 2024

Upgrade python sdk version from 0.17.0 to 0.36.0
Create DatabricksCredentialManager to managed credentials, under the hood use Config from databricks.sdk.core to manage the auth part which comes from the Python SDK.
For dbt we support 4 different auth mode:

  • token : When user explicitly passed in a token=xxxx
  • external_browser: When user pass in auth_type=oauth with clientid=xxx and no client secret
  • oauth-m2m: When user pass in clientid=xxx and clientsecret=yyy
  • azure-client-secret: When user pass in azure_client_id=xxx and azure_client_secret=yyy and your host is an azure host

For oauth-m2m and azure-client-secret we set a preferred auth sequence based on if the clientSecret starts with "dose", so we can reduce the number of false trying as much as possible.

Remove the set/get sharedPassword part, since the python sdk already handles that, but with one defect which I already raise a PR against: databricks/databricks-sdk-py#823

With this change one thing that will no longer work is if customer are using non-databricks OAuth client for U2M case it will not work, since the python sdk does not support modify redirectUrl/scopes.

Description

Checklist

  • I have run this code in development and it appears to resolve the stated issue
  • This PR includes tests, or tests are not required/relevant for this PR
  • I have updated the CHANGELOG.md and added information about my change to the "dbt-databricks next" section.


def set_sharded_password(self, service_name: str, username: str, password: str) -> None:
max_size = MAX_NT_PASSWORD_SIZE
Without this, a local .netrc file in the user's home directory
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it safe to remove it seems databricks cli will not use .netrc anymore? https://docs.databricks.com/en/dev-tools/cli/profiles.html @benc-db @jackyhu-db

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think .netrc is used by python requests which might be used by databricks-sdk code as well?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah you're right, seems dbt-databricks use requests library, even though databricks-sdk does not rely on .netrc, the local requests library made from dbt-databricks still read from .netrc without this fix. Will keep it as is.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, the .netrc thing bit us in the past.

self._lock.acquire()
try:
assert self._credentials_manager is not None, "Credentials manager is not set."
return self._credentials_manager
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am just honoring the existing behavior. If there are multiple connections using the same DatabricksCredentials instance, there is a shared resource _config which can have concurrent write. @benc-db I think you introduce the original lock, is it still needed?

@benc-db
Copy link
Collaborator

benc-db commented Nov 18, 2024

Looks like something is off in the python path, with those E2E tests failing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants