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.
@@ -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 1.0
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.4
1
+ Metadata-Version: 2.5
2
2
  Name: ob-databricks
3
- Version: 2.1.0
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: BSL-1.1
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.1
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/ralfbecher/orionbelt-semantic-layer) project.
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
- BSL-1.1 — see [LICENSE](LICENSE) for details.
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.1.0"
7
+ version = "2.36.0"
8
8
  description = "OrionBelt Semantic Layer driver for Databricks (DB-API 2.0)"
9
- license = { text = "BSL-1.1" }
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.1",
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
- return self._native.rowcount
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__ = ["STRING", "BINARY", "NUMBER", "DATETIME", "ROWID", "DBR_TYPE_MAP"]
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
@@ -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
@@ -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.
@@ -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
- "OperationalError",
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
  ]
@@ -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
- "OperationalError",
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
  ]