Skip to content

Commit e727547

Browse files
authored
Work around DATABRICKS_HOST normalisation issue during install and uninstall (#2052)
## Changes This PR introduces a workaround for a `DATABRICKS_HOST` normalisation issue in the underlying Python SDK (databricks/databricks-sdk-py#996). We fixed this for the CLI entry points in #1706 but missed the `install` and `uninstall` hooks, which this PR addresses. ### Relevant implementation details The actual workaround is implemented in Blueprint, but a bit hard to get to… the easiest way to get to it without modifying Blueprint is to introduce the `App` subclass. ### Linked issues Resolves #2037 ### Functionality - modified existing commands: - `databricks labs install lakebridge` - `databricks labs uninstall lakebridge` ### Tests Manually tested, see logs below: - Normal situation, with `host=` set to just a host: - [`databricks labs install lakebridge --debug`](https://github.com/user-attachments/files/22517659/install-normal.log) - [`databricks labs uninstall lakebridge --debug`](https://github.com/user-attachments/files/22517616/uninstall-normal.log) - Situation with `host=` set to a login URL: - [`databricks labs install lakebridge --debug`](https://github.com/user-attachments/files/22517675/install-with-workaround.log) - [`databricks labs uninstall lakebridge --debug`](https://github.com/user-attachments/files/22517697/uninstall-with-workaround.log)
1 parent 8ae887a commit e727547

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

src/databricks/labs/lakebridge/base_install.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
from databricks.labs.blueprint.logger import install_logger
44
from databricks.labs.blueprint.entrypoint import get_logger
5-
from databricks.sdk import WorkspaceClient
65
from databricks.sdk.core import with_user_agent_extra
76

8-
from databricks.labs.lakebridge import __version__
7+
from databricks.labs.lakebridge.cli import lakebridge
98
from databricks.labs.lakebridge.install import installer as _installer
109
from databricks.labs.lakebridge.transpiler.repository import TranspilerRepository
1110

@@ -18,7 +17,7 @@ def main() -> None:
1817
logger.setLevel("INFO")
1918

2019
installer = _installer(
21-
WorkspaceClient(product="lakebridge", product_version=__version__),
20+
ws=lakebridge.create_workspace_client(),
2221
transpiler_repository=TranspilerRepository.user_home(),
2322
is_interactive=sys.stdin.isatty(),
2423
)

src/databricks/labs/lakebridge/cli.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,19 @@
4242

4343
from databricks.labs.lakebridge.transpiler.transpile_status import ErrorSeverity
4444

45-
lakebridge = App(__file__)
45+
46+
# Subclass to allow controlled access to protected methods.
47+
class Lakebridge(App):
48+
def create_workspace_client(self) -> WorkspaceClient:
49+
"""Create a workspace client, with the appropriate product and version information.
50+
51+
This is intended only for use by the install/uninstall hooks.
52+
"""
53+
self._patch_databricks_host()
54+
return self._workspace_client()
55+
56+
57+
lakebridge = Lakebridge(__file__)
4658
logger = get_logger(__file__)
4759

4860

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import logging
22

33
from databricks.labs.blueprint.entrypoint import is_in_debug
4-
from databricks.sdk import WorkspaceClient
54

6-
from databricks.labs.lakebridge.__about__ import __version__
5+
from databricks.labs.lakebridge.cli import lakebridge
76
from databricks.labs.lakebridge.contexts.application import ApplicationContext
87

98
logger = logging.getLogger("databricks.labs.lakebridge.install")
@@ -18,11 +17,4 @@ def run(context: ApplicationContext):
1817
if is_in_debug():
1918
logging.getLogger("databricks").setLevel(logging.DEBUG)
2019

21-
run(
22-
ApplicationContext(
23-
WorkspaceClient(
24-
product="lakebridge",
25-
product_version=__version__,
26-
)
27-
)
28-
)
20+
run(ApplicationContext(ws=lakebridge.create_workspace_client()))

0 commit comments

Comments
 (0)