Skip to content

Explicitly test/support python 3.13 and 3.14#490

Open
asnare wants to merge 21 commits intomainfrom
refresh
Open

Explicitly test/support python 3.13 and 3.14#490
asnare wants to merge 21 commits intomainfrom
refresh

Conversation

@asnare
Copy link
Contributor

@asnare asnare commented Mar 3, 2026

The primary purpose of this PR is to extend the CI/CD and project metadata to cover Python 3.13 and 3.14.

Changes include:

  • Switching to Hatch-controlled python versions, defaulting to 3.10, with support for 3.11 thru 3.14.
  • Updating CI/CD to also cover 3.13 and 3.14.

Some incidental changes include:

  • Upgrading actions/checkout: 4.2.2 → 6.x
  • Upgrading actions/setup-python: 5.x → 6.x
  • Upgrading Hatch: 1.9.4 → 1.16.5

@asnare asnare added this to UCX Mar 3, 2026
@asnare asnare added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels Mar 3, 2026
@asnare asnare self-assigned this Mar 3, 2026
@asnare asnare moved this to Ready for Review in UCX Mar 3, 2026
@github-actions
Copy link

github-actions bot commented Mar 3, 2026

❌ 33/36 passed, 3 failed, 4 skipped, 25m54s total

❌ test_dashboards_creates_exported_dashboard_definition: assert {'datasets': ...: 'queries'}]} == {'datasets': ...: 'queries'}]} (2.145s)
assert {'datasets': ...: 'queries'}]} == {'datasets': ...: 'queries'}]}
  
  Omitting 1 identical items, use -vv to show
  Differing items:
  {'datasets': [{'displayName': 'counter', 'name': 'counter', 'query': 'SELECT 6217 AS count'}, {'displayName': 'office_...0 University Ave, Suite 722', 'Berkeley', 'CA', '94704', 'USA') AS tab(Address, City, State, `Zip Code`, Country)\n"}]} != {'datasets': [{'displayName': 'counter', 'name': 'counter'}, {'displayName': 'office_locations', 'name': 'office_locations'}]}
  
  Full diff:
    {
        'datasets': [
            {
                'displayName': 'counter',
                'name': 'counter',
  +             'query': 'SELECT 6217 AS count',
            },
            {
                'displayName': 'office_locations',
                'name': 'office_locations',
  +             'query': 'SELECT\n'
  +             '  Address,\n'
  +             '  City,\n'
  +             '  State,\n'
  +             '  `Zip Code`,\n'
  +             '  Country\n'
  +             'FROM\n'
  +             'VALUES\n'
  +             "  ('160 Spear St 15th Floor', 'San Francisco', 'CA', '94105', "
  +             "'USA'),\n"
  +             "  ('756 W Peachtree St NW, Suite 03W114', 'Atlanta', 'GA', "
  +             "'30308', 'USA'),\n"
  +             "  ('500 108th Ave NE, Suite 1820', 'Bellevue', 'WA', '98004', "
  +             "'USA'),\n"
  +             "  ('125 High St, Suite 220', 'Boston', 'MA', '02110', 'USA'),\n"
  +             "  ('2120 University Ave, Suite 722', 'Berkeley', 'CA', '94704', "
  +             "'USA') AS tab(Address, City, State, `Zip Code`, Country)\n",
            },
        ],
        'pages': [
            {
                'displayName': 'queries',
                'layout': [
                    {
                        'position': {
                            'height': 3,
                            'width': 1,
                            'x': 0,
                            'y': 0,
                        },
                        'widget': {
                            'name': 'counter',
                            'queries': [
                                {
                                    'name': 'main_query',
                                    'query': {
                                        'datasetName': 'counter',
                                        'disaggregated': True,
                                        'fields': [
                                            {
                                                'expression': '`count`',
                                                'name': 'count',
                                            },
                                        ],
                                    },
                                },
                            ],
                            'spec': {
                                'encodings': {
                                    'value': {
                                        'displayName': 'count',
                                        'fieldName': 'count',
                                    },
                                },
                                'version': 2,
                                'widgetType': 'counter',
                            },
                        },
                    },
                    {
                        'position': {
                            'height': 5,
                            'width': 3,
                            'x': 1,
                            'y': 0,
                        },
                        'widget': {
                            'name': 'table',
                            'queries': [
                                {
                                    'name': 'main_query',
                                    'query': {
                                        'datasetName': 'office_locations',
                                        'disaggregated': True,
                                        'fields': [
                                            {
                                                'expression': '`Address`',
                                                'name': 'Address',
                                            },
                                            {
                                                'expression': '`City`',
                                                'name': 'City',
                                            },
                                            {
                                                'expression': '`State`',
                                                'name': 'State',
                                            },
                                            {
                                                'expression': '`Zip Code`',
                                                'name': 'Zip Code',
                                            },
                                            {
                                                'expression': '`Country`',
                                                'name': 'Country',
                                            },
                                        ],
                                    },
                                },
                            ],
                            'spec': {
                                'allowHTMLByDefault': False,
                                'condensed': True,
                                'encodings': {
                                    'columns': [
                                        {
                                            'alignContent': 'left',
                                            'allowHTML': False,
                                            'allowSearch': False,
                                            'booleanValues': [
                                                'false',
                                                'true',
                                            ],
                                            'displayAs': 'string',
                                            'displayName': 'Address',
                                            'fieldName': 'Address',
                                            'highlightLinks': False,
                                            'imageHeight': '',
                                            'imageTitleTemplate': '{{ @ }}',
                                            'imageUrlTemplate': '{{ @ }}',
                                            'imageWidth': '',
                                            'linkOpenInNewTab': True,
                                            'linkTextTemplate': '{{ @ }}',
                                            'linkTitleTemplate': '{{ @ }}',
                                            'linkUrlTemplate': '{{ @ }}',
                                            'order': 100000,
                                            'preserveWhitespace': False,
                                            'title': 'Address',
                                            'type': 'string',
                                            'useMonospaceFont': False,
                                            'visible': True,
                                        },
                                        {
                                            'alignContent': 'left',
                                            'allowHTML': False,
                                            'allowSearch': False,
                                            'booleanValues': [
                                                'false',
                                                'true',
                                            ],
                                            'displayAs': 'string',
                                            'displayName': 'City',
                                            'fieldName': 'City',
                                            'highlightLinks': False,
                                            'imageHeight': '',
                                            'imageTitleTemplate': '{{ @ }}',
                                            'imageUrlTemplate': '{{ @ }}',
                                            'imageWidth': '',
                                            'linkOpenInNewTab': True,
                                            'linkTextTemplate': '{{ @ }}',
                                            'linkTitleTemplate': '{{ @ }}',
                                            'linkUrlTemplate': '{{ @ }}',
                                            'order': 100001,
                                            'preserveWhitespace': False,
                                            'title': 'City',
                                            'type': 'string',
                                            'useMonospaceFont': False,
                                            'visible': True,
                                        },
                                        {
                                            'alignContent': 'left',
                                            'allowHTML': False,
                                            'allowSearch': False,
                                            'booleanValues': [
                                                'false',
                                                'true',
                                            ],
                                            'displayAs': 'string',
                                            'displayName': 'State',
                                            'fieldName': 'State',
                                            'highlightLinks': False,
                                            'imageHeight': '',
                                            'imageTitleTemplate': '{{ @ }}',
                                            'imageUrlTemplate': '{{ @ }}',
                                            'imageWidth': '',
                                            'linkOpenInNewTab': True,
                                            'linkTextTemplate': '{{ @ }}',
                                            'linkTitleTemplate': '{{ @ }}',
                                            'linkUrlTemplate': '{{ @ }}',
                                            'order': 100002,
                                            'preserveWhitespace': False,
                                            'title': 'State',
                                            'type': 'string',
                                            'useMonospaceFont': False,
                                            'visible': True,
                                        },
                                        {
                                            'alignContent': 'left',
                                            'allowHTML': False,
                                            'allowSearch': False,
                                            'booleanValues': [
                                                'false',
                                                'true',
                                            ],
                                            'displayAs': 'string',
                                            'displayName': 'Zip Code',
                                            'fieldName': 'Zip Code',
                                            'highlightLinks': False,
                                            'imageHeight': '',
                                            'imageTitleTemplate': '{{ @ }}',
                                            'imageUrlTemplate': '{{ @ }}',
                                            'imageWidth': '',
                                            'linkOpenInNewTab': True,
                                            'linkTextTemplate': '{{ @ }}',
                                            'linkTitleTemplate': '{{ @ }}',
                                            'linkUrlTemplate': '{{ @ }}',
                                            'order': 100003,
                                            'preserveWhitespace': False,
                                            'title': 'Zip Code',
                                            'type': 'string',
                                            'useMonospaceFont': False,
                                            'visible': True,
                                        },
                                        {
                                            'alignContent': 'left',
                                            'allowHTML': False,
                                            'allowSearch': False,
                                            'booleanValues': [
                                                'false',
                                                'true',
                                            ],
                                            'displayAs': 'string',
                                            'displayName': 'Country',
                                            'fieldName': 'Country',
                                            'highlightLinks': False,
                                            'imageHeight': '',
                                            'imageTitleTemplate': '{{ @ }}',
                                            'imageUrlTemplate': '{{ @ }}',
                                            'imageWidth': '',
                                            'linkOpenInNewTab': True,
                                            'linkTextTemplate': '{{ @ }}',
                                            'linkTitleTemplate': '{{ @ }}',
                                            'linkUrlTemplate': '{{ @ }}',
                                            'order': 100004,
                                            'preserveWhitespace': False,
                                            'title': 'Country',
                                            'type': 'string',
                                            'useMonospaceFont': False,
                                            'visible': True,
                                        },
                                    ],
                                },
                                'invisibleColumns': [],
                                'itemsPerPage': 25,
                                'paginationSize': 'TEST_SCHEMA',
                                'version': 1,
                                'widgetType': 'table',
                                'withRowNumber': False,
                            },
                        },
                    },
                ],
                'name': 'queries',
            },
        ],
    }
19:14 DEBUG [databricks.sdk] Loaded from environment
19:14 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw7] linux -- Python 3.10.19 /home/runner/work/lsql/lsql/.venv/bin/python
19:14 DEBUG [databricks.sdk] Loaded from environment
19:14 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
19:14 DEBUG [databricks.sdk] POST /api/2.0/lakeview/dashboards
> {
>   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.258Z",
<   "dashboard_id": "01f11cb5568f1f62ac2a2408be0a1965",
<   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz",
<   "etag": "366538604",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json",
<   "serialized_dashboard": "{}\n",
<   "update_time": "2026-03-10T19:14:19.314Z"
< }
19:14 DEBUG [databricks.sdk] PATCH /api/2.0/lakeview/dashboards/01f11cb5568f1f62ac2a2408be0a1965
> {
>   "create_time": "2026-03-10T19:14:19.258Z",
>   "dashboard_id": "01f11cb5568f1f62ac2a2408be0a1965",
>   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz",
>   "etag": "366538604",
>   "lifecycle_state": "ACTIVE",
>   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
>   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json",
>   "serialized_dashboard": "{\n  \"datasets\": [\n    {\n      \"name\": \"6e3ba8d4\",\n      \"displayName\": \"counter\",\n      \"query\":... (8678 more bytes)",
>   "update_time": "2026-03-10T19:14:19.314Z"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.258Z",
<   "dashboard_id": "01f11cb5568f1f62ac2a2408be0a1965",
<   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz",
<   "etag": "-1061205499",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json",
<   "serialized_dashboard": "{\n  \"datasets\": [\n    {\n      \"name\": \"6e3ba8d4\",\n      \"displayName\": \"counter\",\n      \"queryLi... (8907 more bytes)",
<   "update_time": "2026-03-10T19:14:19.573Z"
< }
19:14 DEBUG [databricks.sdk] GET /api/2.0/workspace/export?path=/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json&direct_download=true&format=SOURCE
< 200 OK
< [raw stream]
19:14 DEBUG [databricks.sdk] Loaded from environment
19:14 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
19:14 DEBUG [databricks.sdk] POST /api/2.0/lakeview/dashboards
> {
>   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.258Z",
<   "dashboard_id": "01f11cb5568f1f62ac2a2408be0a1965",
<   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz",
<   "etag": "366538604",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json",
<   "serialized_dashboard": "{}\n",
<   "update_time": "2026-03-10T19:14:19.314Z"
< }
19:14 DEBUG [databricks.sdk] PATCH /api/2.0/lakeview/dashboards/01f11cb5568f1f62ac2a2408be0a1965
> {
>   "create_time": "2026-03-10T19:14:19.258Z",
>   "dashboard_id": "01f11cb5568f1f62ac2a2408be0a1965",
>   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz",
>   "etag": "366538604",
>   "lifecycle_state": "ACTIVE",
>   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
>   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json",
>   "serialized_dashboard": "{\n  \"datasets\": [\n    {\n      \"name\": \"6e3ba8d4\",\n      \"displayName\": \"counter\",\n      \"query\":... (8678 more bytes)",
>   "update_time": "2026-03-10T19:14:19.314Z"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.258Z",
<   "dashboard_id": "01f11cb5568f1f62ac2a2408be0a1965",
<   "display_name": "created_by_lsql_lkkIasf4f4zqe1sz",
<   "etag": "-1061205499",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json",
<   "serialized_dashboard": "{\n  \"datasets\": [\n    {\n      \"name\": \"6e3ba8d4\",\n      \"displayName\": \"counter\",\n      \"queryLi... (8907 more bytes)",
<   "update_time": "2026-03-10T19:14:19.573Z"
< }
19:14 DEBUG [databricks.sdk] GET /api/2.0/workspace/export?path=/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_lkkIasf4f4zqe1sz.lvdash.json&direct_download=true&format=SOURCE
< 200 OK
< [raw stream]
19:14 DEBUG [databricks.sdk] DELETE /api/2.0/lakeview/dashboards/01f11cb5568f1f62ac2a2408be0a1965
< 200 OK
< {}
[gw7] linux -- Python 3.10.19 /home/runner/work/lsql/lsql/.venv/bin/python
❌ test_dashboard_deploys_dashboard_the_same_as_created_dashboard: AssertionError: assert {'datasets': ...BYVSRgmXjF'}]} == {'datasets': ...BYVSRgmXjF'}]} (2.35s)
AssertionError: assert {'datasets': ...BYVSRgmXjF'}]} == {'datasets': ...BYVSRgmXjF'}]}
  
  Omitting 1 identical items, use -vv to show
  Differing items:
  {'datasets': [{'displayName': 'counter', 'name': 'counter', 'query': 'SELECT 10 AS count'}]} != {'datasets': [{'displayName': 'counter', 'name': 'counter'}]}
  
  Full diff:
    {
        'datasets': [
            {
                'displayName': 'counter',
                'name': 'counter',
  +             'query': 'SELECT 10 AS count',
            },
        ],
        'pages': [
            {
                'displayName': 'created_by_lsql_j3p4QNBYVSRgmXjF',
                'layout': [
                    {
                        'position': {
                            'height': 3,
                            'width': 1,
                            'x': 0,
                            'y': 0,
                        },
                        'widget': {
                            'name': 'counter',
                            'queries': [
                                {
                                    'name': 'main_query',
                                    'query': {
                                        'datasetName': 'counter',
                                        'disaggregated': True,
                                        'fields': [
                                            {
                                                'expression': '`count`',
                                                'name': 'count',
                                            },
                                        ],
                                    },
                                },
                            ],
                            'spec': {
                                'encodings': {
                                    'value': {
                                        'displayName': 'count',
                                        'fieldName': 'count',
                                    },
                                },
                                'frame': {
                                    'description': '',
                                    'showDescription': False,
                                    'showTitle': False,
                                    'title': '',
                                },
                                'version': 2,
                                'widgetType': 'counter',
                            },
                        },
                    },
                ],
                'name': 'created_by_lsql_j3p4QNBYVSRgmXjF',
            },
        ],
    }
19:14 DEBUG [databricks.sdk] Loaded from environment
19:14 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw9] linux -- Python 3.10.19 /home/runner/work/lsql/lsql/.venv/bin/python
19:14 DEBUG [databricks.sdk] Loaded from environment
19:14 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
19:14 DEBUG [databricks.sdk] POST /api/2.0/lakeview/dashboards
> {
>   "display_name": "created_by_lsql_oKYcIGyticx8Wsr9"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.910Z",
<   "dashboard_id": "01f11cb556f51dfa8dcedcbd9615aaa4",
<   "display_name": "created_by_lsql_oKYcIGyticx8Wsr9",
<   "etag": "366538604",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_oKYcIGyticx8Wsr9.lvdash.json",
<   "serialized_dashboard": "{}\n",
<   "update_time": "2026-03-10T19:14:19.939Z"
< }
19:14 DEBUG [databricks.sdk] PATCH /api/2.0/lakeview/dashboards/01f11cb556f51dfa8dcedcbd9615aaa4
> {
>   "dashboard_id": "01f11cb556f51dfa8dcedcbd9615aaa4",
>   "display_name": "created_by_lsql_j3p4QNBYVSRgmXjF",
>   "serialized_dashboard": "{\"datasets\": [{\"displayName\": \"counter\", \"name\": \"counter\", \"query\": \"SELECT 10 AS count\"}], \"pa... (574 more bytes)"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.910Z",
<   "dashboard_id": "01f11cb556f51dfa8dcedcbd9615aaa4",
<   "display_name": "created_by_lsql_j3p4QNBYVSRgmXjF",
<   "etag": "-4687778963",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_j3p4QNBYVSRgmXjF.lvdash.json",
<   "serialized_dashboard": "{\n  \"datasets\": [\n    {\n      \"name\": \"counter\",\n      \"displayName\": \"counter\",\n      \"queryLin... (1350 more bytes)",
<   "update_time": "2026-03-10T19:14:20.210Z"
< }
19:14 DEBUG [databricks.sdk] GET /api/2.0/workspace/export?path=/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_j3p4QNBYVSRgmXjF.lvdash.json&direct_download=true&format=SOURCE
< 200 OK
< [raw stream]
19:14 DEBUG [databricks.sdk] Loaded from environment
19:14 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:14 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:14 INFO [databricks.sdk] Using Databricks Metadata Service authentication
19:14 DEBUG [databricks.sdk] POST /api/2.0/lakeview/dashboards
> {
>   "display_name": "created_by_lsql_oKYcIGyticx8Wsr9"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.910Z",
<   "dashboard_id": "01f11cb556f51dfa8dcedcbd9615aaa4",
<   "display_name": "created_by_lsql_oKYcIGyticx8Wsr9",
<   "etag": "366538604",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_oKYcIGyticx8Wsr9.lvdash.json",
<   "serialized_dashboard": "{}\n",
<   "update_time": "2026-03-10T19:14:19.939Z"
< }
19:14 DEBUG [databricks.sdk] PATCH /api/2.0/lakeview/dashboards/01f11cb556f51dfa8dcedcbd9615aaa4
> {
>   "dashboard_id": "01f11cb556f51dfa8dcedcbd9615aaa4",
>   "display_name": "created_by_lsql_j3p4QNBYVSRgmXjF",
>   "serialized_dashboard": "{\"datasets\": [{\"displayName\": \"counter\", \"name\": \"counter\", \"query\": \"SELECT 10 AS count\"}], \"pa... (574 more bytes)"
> }
< 200 OK
< {
<   "create_time": "2026-03-10T19:14:19.910Z",
<   "dashboard_id": "01f11cb556f51dfa8dcedcbd9615aaa4",
<   "display_name": "created_by_lsql_j3p4QNBYVSRgmXjF",
<   "etag": "-4687778963",
<   "lifecycle_state": "ACTIVE",
<   "parent_path": "/Users/4106dc97-a963-48f0-a079-a578238959a6",
<   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_j3p4QNBYVSRgmXjF.lvdash.json",
<   "serialized_dashboard": "{\n  \"datasets\": [\n    {\n      \"name\": \"counter\",\n      \"displayName\": \"counter\",\n      \"queryLin... (1350 more bytes)",
<   "update_time": "2026-03-10T19:14:20.210Z"
< }
19:14 DEBUG [databricks.sdk] GET /api/2.0/workspace/export?path=/Users/4106dc97-a963-48f0-a079-a578238959a6/created_by_lsql_j3p4QNBYVSRgmXjF.lvdash.json&direct_download=true&format=SOURCE
< 200 OK
< [raw stream]
19:14 DEBUG [databricks.sdk] DELETE /api/2.0/lakeview/dashboards/01f11cb556f51dfa8dcedcbd9615aaa4
< 200 OK
< {}
[gw9] linux -- Python 3.10.19 /home/runner/work/lsql/lsql/.venv/bin/python
❌ test_runtime_backend_errors_handled[\nfrom databricks.labs.lsql.backends import RuntimeBackend\nfrom databricks.sdk.errors import Unknown\nbackend = RuntimeBackend()\ntry:\n grants = backend.fetch("SHOW GRANTS ON METASTORE")\n print("FAILED")\nexcept Unknown:\n print("PASSED")\n]: AssertionError: assert 'FAILED' == 'PASSED' (24.253s)
AssertionError: assert 'FAILED' == 'PASSED'
  
  - PASSED
  + FAILED
19:18 DEBUG [databricks.sdk] Loaded from environment
19:18 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:18 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:18 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:18 INFO [databricks.sdk] Using Databricks Metadata Service authentication
[gw5] linux -- Python 3.10.19 /home/runner/work/lsql/lsql/.venv/bin/python
19:18 DEBUG [databricks.sdk] Loaded from environment
19:18 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:18 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:18 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:18 INFO [databricks.sdk] Using Databricks Metadata Service authentication
19:18 DEBUG [databricks.sdk] GET /api/2.0/preview/scim/v2/Me
< 200 OK
< {
<   "active": true,
<   "displayName": "labs-runtime-identity",
<   "emails": [
<     {
<       "primary": true,
<       "type": "work",
<       "value": "**REDACTED**"
<     }
<   ],
<   "externalId": "d0f9bd2c-5651-45fd-b648-12a3fc6375c4",
<   "groups": [
<     {
<       "$ref": "Groups/153383108335587",
<       "display": "users",
<       "type": "direct",
<       "value": "**REDACTED**"
<     },
<     "... (1 additional elements)"
<   ],
<   "id": "4643477475987733",
<   "name": {
<     "givenName": "labs-runtime-identity"
<   },
<   "schemas": [
<     "urn:ietf:params:scim:schemas:core:2.0:User",
<     "... (1 additional elements)"
<   ],
<   "userName": "4106dc97-a963-48f0-a079-a578238959a6"
< }
19:18 DEBUG [databricks.labs.blueprint.wheels] Building wheel for /tmp/tmpgq_75xve/working-copy in /tmp/tmpgq_75xve
19:18 DEBUG [databricks.labs.blueprint.installation] Uploading: /Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels/databricks_labs_lsql-0.16.1+2520260310191846-py3-none-any.whl
19:18 DEBUG [databricks.sdk] Retry disabled for non-seekable stream: type=<class 'dict'>
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/import
> [raw stream]
< 404 Not Found
< {
<   "error_code": "RESOURCE_DOES_NOT_EXIST",
<   "message": "The parent folder (/Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels) does not exist."
< }
19:18 DEBUG [databricks.labs.blueprint.installation] Creating missing folders: /Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/mkdirs
> {
>   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels"
> }
< 200 OK
< {}
19:18 DEBUG [databricks.sdk] Retry disabled for non-seekable stream: type=<class 'dict'>
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/import
> [raw stream]
< 200 OK
< {
<   "object_id": 3430712866043736
< }
19:18 DEBUG [databricks.labs.blueprint.installation] Converting Version into JSON format
19:18 DEBUG [databricks.labs.blueprint.installation] Uploading: /Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/version.json
19:18 DEBUG [databricks.sdk] Retry disabled for non-seekable stream: type=<class 'dict'>
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/import
> [raw stream]
< 200 OK
< {
<   "object_id": 3430712866043737
< }
19:18 DEBUG [databricks.sdk] GET /api/2.1/clusters/get?cluster_id=DATABRICKS_CLUSTER_ID
< 200 OK
< {
<   "autotermination_minutes": 60,
<   "CLOUD_ENV_attributes": {
<     "availability": "ON_DEMAND_AZURE",
<     "first_on_demand": 2147483647,
<     "spot_bid_max_price": -1.0
<   },
<   "cluster_cores": 8.0,
<   "cluster_id": "DATABRICKS_CLUSTER_ID",
<   "cluster_memory_mb": 32768,
<   "cluster_name": "Scoped MSI Cluster: runtime (Single Node, Single User)",
<   "cluster_source": "UI",
<   "creator_user_name": "liran.bareket@databricks.com",
<   "custom_tags": {
<     "ResourceClass": "SingleNode"
<   },
<   "data_security_mode": "SINGLE_USER",
<   "TEST_SCHEMA_tags": {
<     "Budget": "opex.sales.labs",
<     "ClusterId": "DATABRICKS_CLUSTER_ID",
<     "ClusterName": "Scoped MSI Cluster: runtime (Single Node, Single User)",
<     "Creator": "liran.bareket@databricks.com",
<     "DatabricksInstanceGroupId": "-7571316921879686317",
<     "DatabricksInstancePoolCreatorId": "6779888502363704",
<     "DatabricksInstancePoolId": "TEST_INSTANCE_POOL_ID",
<     "Owner": "labs-oss@databricks.com",
<     "Vendor": "Databricks"
<   },
<   "disk_spec": {},
<   "driver": {
<     "host_private_ip": "10.179.12.11",
<     "instance_id": "369831dcb12b466bb8084d27851a4ae3",
<     "ngrok_endpoint_base_domain": "green.mux.ngrok-dataplane.wildcard",
<     "node_attributes": {
<       "is_spot": false
<     },
<     "node_id": "968e827eb8d14210b95bdfeb283eafc3",
<     "node_type_id": "Standard_D8ads_v6",
<     "private_ip": "10.179.14.10",
<     "public_dns": "",
<     "start_timestamp": 1773170239801
<   },
<   "driver_healthy": true,
<   "driver_instance_pool_id": "TEST_INSTANCE_POOL_ID",
<   "driver_instance_source": {
<     "instance_pool_id": "TEST_INSTANCE_POOL_ID"
<   },
<   "driver_node_type_id": "Standard_D8ads_v6",
<   "effective_spark_version": "16.4.x-scala2.12",
<   "enable_elastic_disk": true,
<   "enable_local_disk_encryption": false,
<   "init_scripts_safe_mode": false,
<   "instance_pool_id": "TEST_INSTANCE_POOL_ID",
<   "instance_source": {
<     "instance_pool_id": "TEST_INSTANCE_POOL_ID"
<   },
<   "jdbc_port": 10000,
<   "last_activity_time": 1773170262695,
<   "last_restarted_time": 1773170291648,
<   "last_state_loss_time": 1773170291575,
<   "node_type_id": "Standard_D8ads_v6",
<   "num_workers": 0,
<   "pinned_by_user_name": "6779888502363704",
<   "release_version": "16.4.19",
<   "single_user_name": "4106dc97-a963-48f0-a079-a578238959a6",
<   "spark_conf": {
<     "spark.databricks.cluster.profile": "singleNode",
<     "spark.master": "local[*]"
<   },
<   "spark_context_id": 3053145590192803493,
<   "spark_version": "16.4.x-scala2.12",
<   "spec": {
<     "autotermination_minutes": 60,
<     "cluster_name": "Scoped MSI Cluster: runtime (Single Node, Single User)",
<     "custom_tags": {
<       "ResourceClass": "SingleNode"
<     },
<     "data_security_mode": "SINGLE_USER",
<     "instance_pool_id": "TEST_INSTANCE_POOL_ID",
<     "num_workers": 0,
<     "single_user_name": "4106dc97-a963-48f0-a079-a578238959a6",
<     "spark_conf": {
<       "spark.databricks.cluster.profile": "singleNode",
<       "spark.master": "local[*]"
<     },
<     "spark_version": "16.4.x-scala2.12"
<   },
<   "start_time": 1759339672984,
<   "state": "RUNNING",
<   "state_message": ""
< }
19:18 DEBUG [databricks.sdk] POST /api/1.2/contexts/create
> {
>   "clusterId": "DATABRICKS_CLUSTER_ID",
>   "language": "python"
> }
< 200 OK
< {
<   "id": "1528931447038085749"
< }
19:18 DEBUG [databricks.sdk] GET /api/1.2/contexts/status?clusterId=DATABRICKS_CLUSTER_ID&contextId=1528931447038085749
< 200 OK
< {
<   "id": "1528931447038085749",
<   "status": "Pending"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, context_id=1528931447038085749: (ContextStatus.PENDING) current status: ContextStatus.PENDING (sleeping ~1s)
19:18 DEBUG [databricks.sdk] GET /api/1.2/contexts/status?clusterId=DATABRICKS_CLUSTER_ID&contextId=1528931447038085749
< 200 OK
< {
<   "id": "1528931447038085749",
<   "status": "Pending"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, context_id=1528931447038085749: (ContextStatus.PENDING) current status: ContextStatus.PENDING (sleeping ~2s)
19:18 DEBUG [databricks.sdk] GET /api/1.2/contexts/status?clusterId=DATABRICKS_CLUSTER_ID&contextId=1528931447038085749
< 200 OK
< {
<   "id": "1528931447038085749",
<   "status": "Running"
< }
19:18 DEBUG [databricks.sdk] POST /api/1.2/commands/execute
> {
>   "clusterId": "DATABRICKS_CLUSTER_ID",
>   "command": "get_ipython().run_line_magic('pip', 'install /Workspace/Users/4106dc97-a963-48f0-a079-a578238959... (111 more bytes)",
>   "contextId": "1528931447038085749",
>   "language": "python"
> }
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f"
< }
19:18 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~1s)
19:18 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~2s)
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:19 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~3s)
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:19 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~4s)
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": {
<     "data": "Processing /Workspace/Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels/databricks_labs_ls... (5309 more bytes)",
<     "resultType": "text"
<   },
<   "status": "Finished"
< }
19:19 DEBUG [databricks.sdk] POST /api/1.2/commands/execute
> {
>   "clusterId": "DATABRICKS_CLUSTER_ID",
>   "command": "from databricks.labs.lsql.backends import RuntimeBackend\nfrom databricks.sdk.errors import Unkno... (145 more bytes)",
>   "contextId": "1528931447038085749",
>   "language": "python"
> }
< 200 OK
< {
<   "id": "783080e6439c4fb1b6b38bdb8727cd08"
< }
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=783080e6439c4fb1b6b38bdb8727cd08&contextId=1528931447038085749
< 200 OK
< {
<   "id": "783080e6439c4fb1b6b38bdb8727cd08",
<   "results": {
<     "data": "FAILED",
<     "resultType": "text"
<   },
<   "status": "Finished"
< }
19:18 DEBUG [databricks.sdk] Loaded from environment
19:18 DEBUG [databricks.sdk] Ignoring pat auth, because metadata-service is preferred
19:18 DEBUG [databricks.sdk] Ignoring basic auth, because metadata-service is preferred
19:18 DEBUG [databricks.sdk] Attempting to configure auth: metadata-service
19:18 INFO [databricks.sdk] Using Databricks Metadata Service authentication
19:18 DEBUG [databricks.sdk] GET /api/2.0/preview/scim/v2/Me
< 200 OK
< {
<   "active": true,
<   "displayName": "labs-runtime-identity",
<   "emails": [
<     {
<       "primary": true,
<       "type": "work",
<       "value": "**REDACTED**"
<     }
<   ],
<   "externalId": "d0f9bd2c-5651-45fd-b648-12a3fc6375c4",
<   "groups": [
<     {
<       "$ref": "Groups/153383108335587",
<       "display": "users",
<       "type": "direct",
<       "value": "**REDACTED**"
<     },
<     "... (1 additional elements)"
<   ],
<   "id": "4643477475987733",
<   "name": {
<     "givenName": "labs-runtime-identity"
<   },
<   "schemas": [
<     "urn:ietf:params:scim:schemas:core:2.0:User",
<     "... (1 additional elements)"
<   ],
<   "userName": "4106dc97-a963-48f0-a079-a578238959a6"
< }
19:18 DEBUG [databricks.labs.blueprint.wheels] Building wheel for /tmp/tmpgq_75xve/working-copy in /tmp/tmpgq_75xve
19:18 DEBUG [databricks.labs.blueprint.installation] Uploading: /Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels/databricks_labs_lsql-0.16.1+2520260310191846-py3-none-any.whl
19:18 DEBUG [databricks.sdk] Retry disabled for non-seekable stream: type=<class 'dict'>
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/import
> [raw stream]
< 404 Not Found
< {
<   "error_code": "RESOURCE_DOES_NOT_EXIST",
<   "message": "The parent folder (/Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels) does not exist."
< }
19:18 DEBUG [databricks.labs.blueprint.installation] Creating missing folders: /Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/mkdirs
> {
>   "path": "/Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels"
> }
< 200 OK
< {}
19:18 DEBUG [databricks.sdk] Retry disabled for non-seekable stream: type=<class 'dict'>
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/import
> [raw stream]
< 200 OK
< {
<   "object_id": 3430712866043736
< }
19:18 DEBUG [databricks.labs.blueprint.installation] Converting Version into JSON format
19:18 DEBUG [databricks.labs.blueprint.installation] Uploading: /Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/version.json
19:18 DEBUG [databricks.sdk] Retry disabled for non-seekable stream: type=<class 'dict'>
19:18 DEBUG [databricks.sdk] POST /api/2.0/workspace/import
> [raw stream]
< 200 OK
< {
<   "object_id": 3430712866043737
< }
19:18 DEBUG [databricks.sdk] GET /api/2.1/clusters/get?cluster_id=DATABRICKS_CLUSTER_ID
< 200 OK
< {
<   "autotermination_minutes": 60,
<   "CLOUD_ENV_attributes": {
<     "availability": "ON_DEMAND_AZURE",
<     "first_on_demand": 2147483647,
<     "spot_bid_max_price": -1.0
<   },
<   "cluster_cores": 8.0,
<   "cluster_id": "DATABRICKS_CLUSTER_ID",
<   "cluster_memory_mb": 32768,
<   "cluster_name": "Scoped MSI Cluster: runtime (Single Node, Single User)",
<   "cluster_source": "UI",
<   "creator_user_name": "liran.bareket@databricks.com",
<   "custom_tags": {
<     "ResourceClass": "SingleNode"
<   },
<   "data_security_mode": "SINGLE_USER",
<   "TEST_SCHEMA_tags": {
<     "Budget": "opex.sales.labs",
<     "ClusterId": "DATABRICKS_CLUSTER_ID",
<     "ClusterName": "Scoped MSI Cluster: runtime (Single Node, Single User)",
<     "Creator": "liran.bareket@databricks.com",
<     "DatabricksInstanceGroupId": "-7571316921879686317",
<     "DatabricksInstancePoolCreatorId": "6779888502363704",
<     "DatabricksInstancePoolId": "TEST_INSTANCE_POOL_ID",
<     "Owner": "labs-oss@databricks.com",
<     "Vendor": "Databricks"
<   },
<   "disk_spec": {},
<   "driver": {
<     "host_private_ip": "10.179.12.11",
<     "instance_id": "369831dcb12b466bb8084d27851a4ae3",
<     "ngrok_endpoint_base_domain": "green.mux.ngrok-dataplane.wildcard",
<     "node_attributes": {
<       "is_spot": false
<     },
<     "node_id": "968e827eb8d14210b95bdfeb283eafc3",
<     "node_type_id": "Standard_D8ads_v6",
<     "private_ip": "10.179.14.10",
<     "public_dns": "",
<     "start_timestamp": 1773170239801
<   },
<   "driver_healthy": true,
<   "driver_instance_pool_id": "TEST_INSTANCE_POOL_ID",
<   "driver_instance_source": {
<     "instance_pool_id": "TEST_INSTANCE_POOL_ID"
<   },
<   "driver_node_type_id": "Standard_D8ads_v6",
<   "effective_spark_version": "16.4.x-scala2.12",
<   "enable_elastic_disk": true,
<   "enable_local_disk_encryption": false,
<   "init_scripts_safe_mode": false,
<   "instance_pool_id": "TEST_INSTANCE_POOL_ID",
<   "instance_source": {
<     "instance_pool_id": "TEST_INSTANCE_POOL_ID"
<   },
<   "jdbc_port": 10000,
<   "last_activity_time": 1773170262695,
<   "last_restarted_time": 1773170291648,
<   "last_state_loss_time": 1773170291575,
<   "node_type_id": "Standard_D8ads_v6",
<   "num_workers": 0,
<   "pinned_by_user_name": "6779888502363704",
<   "release_version": "16.4.19",
<   "single_user_name": "4106dc97-a963-48f0-a079-a578238959a6",
<   "spark_conf": {
<     "spark.databricks.cluster.profile": "singleNode",
<     "spark.master": "local[*]"
<   },
<   "spark_context_id": 3053145590192803493,
<   "spark_version": "16.4.x-scala2.12",
<   "spec": {
<     "autotermination_minutes": 60,
<     "cluster_name": "Scoped MSI Cluster: runtime (Single Node, Single User)",
<     "custom_tags": {
<       "ResourceClass": "SingleNode"
<     },
<     "data_security_mode": "SINGLE_USER",
<     "instance_pool_id": "TEST_INSTANCE_POOL_ID",
<     "num_workers": 0,
<     "single_user_name": "4106dc97-a963-48f0-a079-a578238959a6",
<     "spark_conf": {
<       "spark.databricks.cluster.profile": "singleNode",
<       "spark.master": "local[*]"
<     },
<     "spark_version": "16.4.x-scala2.12"
<   },
<   "start_time": 1759339672984,
<   "state": "RUNNING",
<   "state_message": ""
< }
19:18 DEBUG [databricks.sdk] POST /api/1.2/contexts/create
> {
>   "clusterId": "DATABRICKS_CLUSTER_ID",
>   "language": "python"
> }
< 200 OK
< {
<   "id": "1528931447038085749"
< }
19:18 DEBUG [databricks.sdk] GET /api/1.2/contexts/status?clusterId=DATABRICKS_CLUSTER_ID&contextId=1528931447038085749
< 200 OK
< {
<   "id": "1528931447038085749",
<   "status": "Pending"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, context_id=1528931447038085749: (ContextStatus.PENDING) current status: ContextStatus.PENDING (sleeping ~1s)
19:18 DEBUG [databricks.sdk] GET /api/1.2/contexts/status?clusterId=DATABRICKS_CLUSTER_ID&contextId=1528931447038085749
< 200 OK
< {
<   "id": "1528931447038085749",
<   "status": "Pending"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, context_id=1528931447038085749: (ContextStatus.PENDING) current status: ContextStatus.PENDING (sleeping ~2s)
19:18 DEBUG [databricks.sdk] GET /api/1.2/contexts/status?clusterId=DATABRICKS_CLUSTER_ID&contextId=1528931447038085749
< 200 OK
< {
<   "id": "1528931447038085749",
<   "status": "Running"
< }
19:18 DEBUG [databricks.sdk] POST /api/1.2/commands/execute
> {
>   "clusterId": "DATABRICKS_CLUSTER_ID",
>   "command": "get_ipython().run_line_magic('pip', 'install /Workspace/Users/4106dc97-a963-48f0-a079-a578238959... (111 more bytes)",
>   "contextId": "1528931447038085749",
>   "language": "python"
> }
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f"
< }
19:18 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~1s)
19:18 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:18 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~2s)
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:19 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~3s)
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": null,
<   "status": "Running"
< }
19:19 DEBUG [databricks.sdk] cluster_id=DATABRICKS_CLUSTER_ID, command_id=ffaf150d6f964062a521e7f66c01733f, context_id=1528931447038085749: (CommandStatus.RUNNING) current status: CommandStatus.RUNNING (sleeping ~4s)
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=ffaf150d6f964062a521e7f66c01733f&contextId=1528931447038085749
< 200 OK
< {
<   "id": "ffaf150d6f964062a521e7f66c01733f",
<   "results": {
<     "data": "Processing /Workspace/Users/4106dc97-a963-48f0-a079-a578238959a6/.6IIo/wheels/databricks_labs_ls... (5309 more bytes)",
<     "resultType": "text"
<   },
<   "status": "Finished"
< }
19:19 DEBUG [databricks.sdk] POST /api/1.2/commands/execute
> {
>   "clusterId": "DATABRICKS_CLUSTER_ID",
>   "command": "from databricks.labs.lsql.backends import RuntimeBackend\nfrom databricks.sdk.errors import Unkno... (145 more bytes)",
>   "contextId": "1528931447038085749",
>   "language": "python"
> }
< 200 OK
< {
<   "id": "783080e6439c4fb1b6b38bdb8727cd08"
< }
19:19 DEBUG [databricks.sdk] GET /api/1.2/commands/status?clusterId=DATABRICKS_CLUSTER_ID&commandId=783080e6439c4fb1b6b38bdb8727cd08&contextId=1528931447038085749
< 200 OK
< {
<   "id": "783080e6439c4fb1b6b38bdb8727cd08",
<   "results": {
<     "data": "FAILED",
<     "resultType": "text"
<   },
<   "status": "Finished"
< }
[gw5] linux -- Python 3.10.19 /home/runner/work/lsql/lsql/.venv/bin/python

Running from acceptance #559

This hardcoded path is needed by the labs tool to locate the integration tests.
…ith the projects.

These don't currently control the version of python properly.
@asnare asnare marked this pull request as ready for review March 6, 2026 17:31
@asnare asnare requested a review from FastLee March 6, 2026 17:31
@asnare
Copy link
Contributor Author

asnare commented Mar 6, 2026

❌ 33/36 passed, 3 failed, 4 skipped, 4m45s total

❌ test_dashboard_deploys_dashboard_the_same_as_created_dashboard: AssertionError: assert {'datasets': ...3iiRWXaCE1'}]} == {'datasets': ...3iiRWXaCE1'}]} (2.018s)
❌ test_dashboards_creates_exported_dashboard_definition: assert {'datasets': ...: 'queries'}]} == {'datasets': ...: 'queries'}]} (2.592s)
❌ test_runtime_backend_errors_handled[\nfrom databricks.labs.lsql.backends import RuntimeBackend\nfrom databricks.sdk.errors import Unknown\nbackend = RuntimeBackend()\ntry:\n grants = backend.fetch("SHOW GRANTS ON METASTORE")\n print("FAILED")\nexcept Unknown:\n print("PASSED")\n]: AssertionError: assert 'FAILED' == 'PASSED' (18.263s)
Running from acceptance #555

These test failures are unrelated to changes on this branch. (They're addressed separately by #490 and #491.)

Comment on lines +90 to +98
[tool.hatch.envs.test.overrides]
matrix.python.path = [
# Sadly no way to interpolate this.
{ value = ".venv-py3.10", if = ["3.10" ]},
{ value = ".venv-py3.11", if = ["3.11" ]},
{ value = ".venv-py3.12", if = ["3.12" ]},
{ value = ".venv-py3.13", if = ["3.13" ]},
{ value = ".venv-py3.14", if = ["3.14" ]}
]

Choose a reason for hiding this comment

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

hatch can manage this and create a separate env per python version automatically

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@m-abulazm: I'd like to find a better way of doing this, can you elaborate?

Our criteria are:

  • Must be within the project directory itself and not elsewhere so that IDEs are easy to set up.
  • The ruff and pytest caches must be placed within the venv directories.

@asnare asnare changed the title Update to explicitly test/support python 3.13 and 3.14 Explicitly test/support python 3.13 and 3.14 Mar 9, 2026
The triggers have been updated so that integration tests also run for draft PRs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code

Projects

Status: Ready for Review

Development

Successfully merging this pull request may close these issues.

2 participants