ob-databricks 2.1.0__tar.gz → 2.36.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ob_databricks-2.36.0/.gitignore +67 -0
- ob_databricks-2.36.0/CLAUDE.md +1 -0
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/LICENSE +2 -2
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/PKG-INFO +6 -6
- ob_databricks-2.36.0/README.md +15 -0
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/pyproject.toml +15 -3
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/src/ob_databricks/cursor.py +8 -1
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/src/ob_databricks/type_codes.py +1 -1
- ob_databricks-2.1.0/.gitignore +0 -37
- ob_databricks-2.1.0/README.md +0 -15
- ob_databricks-2.1.0/CLAUDE.md → ob_databricks-2.36.0/AGENTS.md +0 -0
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/src/ob_databricks/__init__.py +10 -10
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/src/ob_databricks/compiler.py +0 -0
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/src/ob_databricks/connection.py +0 -0
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/src/ob_databricks/exceptions.py +6 -6
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/tests/test_driver.py +0 -0
- {ob_databricks-2.1.0 → ob_databricks-2.36.0}/tests/test_yaml_detection.py +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.so
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
*.egg
|
|
9
|
+
.eggs/
|
|
10
|
+
.venv/
|
|
11
|
+
venv/
|
|
12
|
+
.env
|
|
13
|
+
*.db
|
|
14
|
+
*.duckdb
|
|
15
|
+
# Generated FOCUS export (20 MB); rebuilt by scripts/build_finops_duckdb.py.
|
|
16
|
+
# The committed excerpt is examples/finops_charges_sample.json.
|
|
17
|
+
examples/finops_data/
|
|
18
|
+
*.sqlite3
|
|
19
|
+
.mypy_cache/
|
|
20
|
+
.ruff_cache/
|
|
21
|
+
.pytest_cache/
|
|
22
|
+
htmlcov/
|
|
23
|
+
.coverage
|
|
24
|
+
.coverage.*
|
|
25
|
+
*.log
|
|
26
|
+
.DS_Store
|
|
27
|
+
.claude/
|
|
28
|
+
# Playwright MCP scratch output: accessibility snapshots and console logs
|
|
29
|
+
# written per browser session. The console logs were already caught by
|
|
30
|
+
# *.log above, which left only the .yml page dumps showing as untracked.
|
|
31
|
+
.playwright-mcp/
|
|
32
|
+
# Playwright writes screenshots to the working directory when the tool is
|
|
33
|
+
# given a bare filename, which is the repo root. Twice now one has been
|
|
34
|
+
# swept into a commit by ``git add -A``.
|
|
35
|
+
*.playwright.png
|
|
36
|
+
gradio*-production.png
|
|
37
|
+
ui-gradio*.png
|
|
38
|
+
/cache/
|
|
39
|
+
/usage/
|
|
40
|
+
security/
|
|
41
|
+
infra/
|
|
42
|
+
site/
|
|
43
|
+
scripts-infra
|
|
44
|
+
.mcpregistry_github_token
|
|
45
|
+
.mcpregistry_registry_token
|
|
46
|
+
_*/
|
|
47
|
+
blog/
|
|
48
|
+
review*
|
|
49
|
+
design/
|
|
50
|
+
examples/test*
|
|
51
|
+
# TPC-DS sweep harness. The queries, the runner and the compiled SQL are
|
|
52
|
+
# published so the coverage is auditable; the generated database, the working
|
|
53
|
+
# notes and the drafts that do not yet match the reference are not.
|
|
54
|
+
examples/tpcds_queries/*
|
|
55
|
+
!examples/tpcds_queries/README.md
|
|
56
|
+
!examples/tpcds_queries/sweep.py
|
|
57
|
+
!examples/tpcds_queries/Q*.yml
|
|
58
|
+
!examples/tpcds_queries/sql/
|
|
59
|
+
examples/tpcds_queries/*.duckdb
|
|
60
|
+
examples/tpcds_queries/REPORT.md
|
|
61
|
+
examples/tpcds_queries/tpcds_run.py
|
|
62
|
+
examples/tpcds_queries/drafts/
|
|
63
|
+
semantic-layer-spec.md
|
|
64
|
+
|
|
65
|
+
# Generated per-vendor seed scripts (backup of what the drift seed executed)
|
|
66
|
+
tests/integration/drift/vendor_exec/seed_sql/
|
|
67
|
+
examples/tpcds_queries/results/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -3,8 +3,8 @@ Business Source License 1.1
|
|
|
3
3
|
Parameters
|
|
4
4
|
|
|
5
5
|
Licensor: RALFORION d.o.o.
|
|
6
|
-
Licensed Work: OrionBelt Semantic Layer
|
|
7
|
-
The Licensed Work is (c) 2025 RALFORION d.o.o.
|
|
6
|
+
Licensed Work: OrionBelt Semantic Layer (all versions)
|
|
7
|
+
The Licensed Work is (c) 2025-2026 RALFORION d.o.o.
|
|
8
8
|
Additional Use Grant: You may use the Licensed Work for any purpose,
|
|
9
9
|
including production use, PROVIDED THAT you may
|
|
10
10
|
not embed OrionBelt in a commercial product or
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: ob-databricks
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.36.0
|
|
4
4
|
Summary: OrionBelt Semantic Layer driver for Databricks (DB-API 2.0)
|
|
5
5
|
Author-email: Ralf Becher <info@orionbelt.ai>
|
|
6
|
-
License:
|
|
6
|
+
License-Expression: BUSL-1.1
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Keywords: databricks,db-api,obml,orionbelt,semantic-layer
|
|
9
9
|
Requires-Python: >=3.12
|
|
10
10
|
Requires-Dist: databricks-sql-connector>=3.0
|
|
11
|
-
Requires-Dist: ob-driver-core>=0
|
|
11
|
+
Requires-Dist: ob-driver-core>=2.36.0
|
|
12
12
|
Provides-Extra: dev
|
|
13
13
|
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
14
14
|
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
@@ -23,7 +23,7 @@ Description-Content-Type: text/markdown
|
|
|
23
23
|
|
|
24
24
|
OrionBelt Semantic Layer driver for Databricks (DB-API 2.0)
|
|
25
25
|
|
|
26
|
-
Part of the [OrionBelt Semantic Layer](https://github.com/
|
|
26
|
+
Part of the [OrionBelt Semantic Layer](https://github.com/ralforion/orionbelt-semantic-layer) project.
|
|
27
27
|
|
|
28
28
|
## Installation
|
|
29
29
|
|
|
@@ -33,4 +33,4 @@ pip install ob-databricks
|
|
|
33
33
|
|
|
34
34
|
## License
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
BUSL-1.1 — see [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ob-databricks
|
|
2
|
+
|
|
3
|
+
OrionBelt Semantic Layer driver for Databricks (DB-API 2.0)
|
|
4
|
+
|
|
5
|
+
Part of the [OrionBelt Semantic Layer](https://github.com/ralforion/orionbelt-semantic-layer) project.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pip install ob-databricks
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## License
|
|
14
|
+
|
|
15
|
+
BUSL-1.1 — see [LICENSE](LICENSE) for details.
|
|
@@ -4,15 +4,16 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ob-databricks"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.36.0"
|
|
8
8
|
description = "OrionBelt Semantic Layer driver for Databricks (DB-API 2.0)"
|
|
9
|
-
license =
|
|
9
|
+
license = "BUSL-1.1"
|
|
10
|
+
license-files = ["LICENSE"]
|
|
10
11
|
readme = "README.md"
|
|
11
12
|
authors = [{ name = "Ralf Becher", email = "info@orionbelt.ai" }]
|
|
12
13
|
keywords = ["databricks", "semantic-layer", "obml", "db-api", "orionbelt"]
|
|
13
14
|
requires-python = ">=3.12"
|
|
14
15
|
dependencies = [
|
|
15
|
-
"ob-driver-core>=0
|
|
16
|
+
"ob-driver-core>=2.36.0",
|
|
16
17
|
"databricks-sql-connector>=3.0",
|
|
17
18
|
]
|
|
18
19
|
|
|
@@ -38,6 +39,17 @@ target-version = "py312"
|
|
|
38
39
|
|
|
39
40
|
[tool.ruff.lint]
|
|
40
41
|
select = ["E", "F", "I", "UP", "B", "SIM", "ANN"]
|
|
42
|
+
ignore = [
|
|
43
|
+
# PEP 249 is an untyped boundary by specification: ``execute()`` takes
|
|
44
|
+
# whatever the caller passes, and every cursor wraps a native object no
|
|
45
|
+
# vendor annotates. ``Any`` there is the honest signature, not a missing one.
|
|
46
|
+
"ANN401",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
[tool.ruff.lint.per-file-ignores]
|
|
50
|
+
# A test reads better with its patches nested, and its return type says nothing
|
|
51
|
+
# a reader needs.
|
|
52
|
+
"tests/**" = ["ANN001", "ANN201", "SIM117"]
|
|
41
53
|
|
|
42
54
|
[tool.mypy]
|
|
43
55
|
python_version = "3.12"
|
|
@@ -53,7 +53,14 @@ class Cursor:
|
|
|
53
53
|
|
|
54
54
|
@property
|
|
55
55
|
def rowcount(self) -> int:
|
|
56
|
-
|
|
56
|
+
"""Rows the last statement produced, or -1 where the driver says nothing.
|
|
57
|
+
|
|
58
|
+
``self._native`` is untyped, so the value arrives as ``Any``; PEP 249
|
|
59
|
+
promises an ``int`` and -1 is what it reserves for "unknown", which is
|
|
60
|
+
what a connector answering ``None`` means.
|
|
61
|
+
"""
|
|
62
|
+
count = self._native.rowcount
|
|
63
|
+
return int(count) if isinstance(count, int) else -1
|
|
57
64
|
|
|
58
65
|
def _check_open(self) -> None:
|
|
59
66
|
if self._closed:
|
|
@@ -8,7 +8,7 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
from ob_driver_core.type_codes import BINARY, DATETIME, NUMBER, ROWID, STRING
|
|
10
10
|
|
|
11
|
-
__all__ = ["
|
|
11
|
+
__all__ = ["BINARY", "DATETIME", "DBR_TYPE_MAP", "NUMBER", "ROWID", "STRING"]
|
|
12
12
|
|
|
13
13
|
# Databricks SQL connector type names from cursor.description
|
|
14
14
|
# https://docs.databricks.com/en/sql/language-manual/sql-ref-datatypes.html
|
ob_databricks-2.1.0/.gitignore
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
__pycache__/
|
|
2
|
-
*.py[cod]
|
|
3
|
-
*$py.class
|
|
4
|
-
*.so
|
|
5
|
-
dist/
|
|
6
|
-
build/
|
|
7
|
-
*.egg-info/
|
|
8
|
-
*.egg
|
|
9
|
-
.eggs/
|
|
10
|
-
.venv/
|
|
11
|
-
venv/
|
|
12
|
-
.env
|
|
13
|
-
*.db
|
|
14
|
-
*.duckdb
|
|
15
|
-
*.sqlite3
|
|
16
|
-
.mypy_cache/
|
|
17
|
-
.ruff_cache/
|
|
18
|
-
.pytest_cache/
|
|
19
|
-
htmlcov/
|
|
20
|
-
.coverage
|
|
21
|
-
.coverage.*
|
|
22
|
-
*.log
|
|
23
|
-
.DS_Store
|
|
24
|
-
.claude/
|
|
25
|
-
security/
|
|
26
|
-
infra/
|
|
27
|
-
site/
|
|
28
|
-
scripts/
|
|
29
|
-
.mcpregistry_github_token
|
|
30
|
-
.mcpregistry_registry_token
|
|
31
|
-
_*/
|
|
32
|
-
blog/
|
|
33
|
-
review*
|
|
34
|
-
design/
|
|
35
|
-
examples/test*
|
|
36
|
-
examples/tpcds_queries/
|
|
37
|
-
semantic-layer-spec.md
|
ob_databricks-2.1.0/README.md
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# ob-databricks
|
|
2
|
-
|
|
3
|
-
OrionBelt Semantic Layer driver for Databricks (DB-API 2.0)
|
|
4
|
-
|
|
5
|
-
Part of the [OrionBelt Semantic Layer](https://github.com/ralfbecher/orionbelt-semantic-layer) project.
|
|
6
|
-
|
|
7
|
-
## Installation
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
pip install ob-databricks
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## License
|
|
14
|
-
|
|
15
|
-
BSL-1.1 — see [LICENSE](LICENSE) for details.
|
|
File without changes
|
|
@@ -95,19 +95,19 @@ def connect(
|
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
__all__ = [
|
|
98
|
-
"apilevel",
|
|
99
|
-
"threadsafety",
|
|
100
|
-
"paramstyle",
|
|
101
|
-
"connect",
|
|
102
98
|
"Connection",
|
|
103
|
-
"Warning",
|
|
104
|
-
"Error",
|
|
105
|
-
"InterfaceError",
|
|
106
|
-
"DatabaseError",
|
|
107
99
|
"DataError",
|
|
108
|
-
"
|
|
100
|
+
"DatabaseError",
|
|
101
|
+
"Error",
|
|
109
102
|
"IntegrityError",
|
|
103
|
+
"InterfaceError",
|
|
110
104
|
"InternalError",
|
|
111
|
-
"ProgrammingError",
|
|
112
105
|
"NotSupportedError",
|
|
106
|
+
"OperationalError",
|
|
107
|
+
"ProgrammingError",
|
|
108
|
+
"Warning",
|
|
109
|
+
"apilevel",
|
|
110
|
+
"connect",
|
|
111
|
+
"paramstyle",
|
|
112
|
+
"threadsafety",
|
|
113
113
|
]
|
|
File without changes
|
|
File without changes
|
|
@@ -19,14 +19,14 @@ from ob_driver_core.exceptions import (
|
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
__all__ = [
|
|
22
|
-
"Warning",
|
|
23
|
-
"Error",
|
|
24
|
-
"InterfaceError",
|
|
25
|
-
"DatabaseError",
|
|
26
22
|
"DataError",
|
|
27
|
-
"
|
|
23
|
+
"DatabaseError",
|
|
24
|
+
"Error",
|
|
28
25
|
"IntegrityError",
|
|
26
|
+
"InterfaceError",
|
|
29
27
|
"InternalError",
|
|
30
|
-
"ProgrammingError",
|
|
31
28
|
"NotSupportedError",
|
|
29
|
+
"OperationalError",
|
|
30
|
+
"ProgrammingError",
|
|
31
|
+
"Warning",
|
|
32
32
|
]
|
|
File without changes
|
|
File without changes
|