semblance-databricks 0.1.2__tar.gz → 0.2.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.
- {semblance_databricks-0.1.2/src/semblance_databricks.egg-info → semblance_databricks-0.2.0}/PKG-INFO +16 -8
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/README.md +6 -3
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/pyproject.toml +11 -5
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/app.py +9 -6
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/compatibility.yaml +1 -1
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/http.py +1 -1
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/dbfs/routes.py +43 -2
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/testing.py +15 -5
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0/src/semblance_databricks.egg-info}/PKG-INFO +16 -8
- semblance_databricks-0.2.0/src/semblance_databricks.egg-info/requires.txt +20 -0
- semblance_databricks-0.1.2/src/semblance_databricks.egg-info/requires.txt +0 -13
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/LICENSE.md +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/setup.cfg +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/auth.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/cli.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/compatibility.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/config.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/errors.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/fixtures/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/fixtures/defaults/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/fixtures/defaults/acme.yaml +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/fixtures/loaders.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/ids.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/models/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/pagination.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/py.typed +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/registry.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/clusters/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/clusters/routes.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/dbfs/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/dbsql/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/dbsql/routes.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/deps.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/jobs/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/jobs/routes.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/permissions/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/permissions/routes.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/secrets/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/secrets/routes.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/workspace/__init__.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/workspace/routes.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/state.py +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks.egg-info/SOURCES.txt +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks.egg-info/dependency_links.txt +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks.egg-info/entry_points.txt +0 -0
- {semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks.egg-info/top_level.txt +0 -0
{semblance_databricks-0.1.2/src/semblance_databricks.egg-info → semblance_databricks-0.2.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: semblance-databricks
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Unofficial local HTTP simulation of selected Databricks workspace REST operations
|
|
5
5
|
Author: Semblance Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,19 +11,24 @@ Keywords: databricks,mock,simulation,testing,fastapi
|
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
16
|
Classifier: Topic :: Software Development :: Testing
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.11
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
20
19
|
License-File: LICENSE.md
|
|
21
|
-
Requires-Dist: semblance<1.0,>=0.
|
|
20
|
+
Requires-Dist: semblance<1.0,>=0.10.0
|
|
22
21
|
Requires-Dist: pydantic>=2.0.0
|
|
23
22
|
Requires-Dist: pyyaml>=6.0
|
|
23
|
+
Provides-Extra: test
|
|
24
|
+
Requires-Dist: fastapi>=0.133.0; extra == "test"
|
|
25
|
+
Requires-Dist: starlette>=1.3.1; extra == "test"
|
|
26
|
+
Requires-Dist: httpx2>=2.13; extra == "test"
|
|
24
27
|
Provides-Extra: dev
|
|
25
28
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
26
|
-
Requires-Dist:
|
|
29
|
+
Requires-Dist: fastapi>=0.133.0; extra == "dev"
|
|
30
|
+
Requires-Dist: starlette>=1.3.1; extra == "dev"
|
|
31
|
+
Requires-Dist: httpx2>=2.13; extra == "dev"
|
|
27
32
|
Requires-Dist: ruff>=0.16.0; extra == "dev"
|
|
28
33
|
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
29
34
|
Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
|
|
@@ -39,14 +44,17 @@ This package is **not affiliated with, endorsed by, or equivalent to Databricks*
|
|
|
39
44
|
|
|
40
45
|
Verified against public workspace REST documentation dated **2026-08-19**. See `compatibility.yaml` (also served at `/.well-known/semblance-databricks-compat.json`).
|
|
41
46
|
|
|
42
|
-
Requires `semblance` 0.
|
|
47
|
+
Requires Python 3.11+ and `semblance` 0.10.x (`>=0.10.0,<1.0`). Python 3.10 users can use Databricks 0.1.x with `semblance<0.10`.
|
|
43
48
|
|
|
44
49
|
## Install
|
|
45
50
|
|
|
46
51
|
```bash
|
|
47
|
-
pip install semblance-databricks
|
|
52
|
+
pip install "semblance-databricks[test]"
|
|
48
53
|
```
|
|
49
54
|
|
|
55
|
+
The `[test]` extra installs the in-process HTTP client used in the quick start.
|
|
56
|
+
For CLI-only use, `pip install semblance-databricks` is enough.
|
|
57
|
+
|
|
50
58
|
From a clone of this repository:
|
|
51
59
|
|
|
52
60
|
```bash
|
|
@@ -107,7 +115,7 @@ YAML/JSON version 1. Extra fields are rejected. Fixtures are **data only**. Secr
|
|
|
107
115
|
|
|
108
116
|
List endpoints use `page_size` or `limit` plus `page_token` / `next_page_token`. Tokens are opaque and checksummed. Tampering returns 400 `INVALID_PARAMETER_VALUE`.
|
|
109
117
|
|
|
110
|
-
## Known unsupported (0.
|
|
118
|
+
## Known unsupported (0.2.0)
|
|
111
119
|
|
|
112
120
|
- Unity Catalog, Model Serving, DLT / Spark Declarative Pipelines
|
|
113
121
|
- Jobs API 2.0 as primary (optional 2.1 aliases are representative)
|
|
@@ -6,14 +6,17 @@ This package is **not affiliated with, endorsed by, or equivalent to Databricks*
|
|
|
6
6
|
|
|
7
7
|
Verified against public workspace REST documentation dated **2026-08-19**. See `compatibility.yaml` (also served at `/.well-known/semblance-databricks-compat.json`).
|
|
8
8
|
|
|
9
|
-
Requires `semblance` 0.
|
|
9
|
+
Requires Python 3.11+ and `semblance` 0.10.x (`>=0.10.0,<1.0`). Python 3.10 users can use Databricks 0.1.x with `semblance<0.10`.
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
pip install semblance-databricks
|
|
14
|
+
pip install "semblance-databricks[test]"
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
The `[test]` extra installs the in-process HTTP client used in the quick start.
|
|
18
|
+
For CLI-only use, `pip install semblance-databricks` is enough.
|
|
19
|
+
|
|
17
20
|
From a clone of this repository:
|
|
18
21
|
|
|
19
22
|
```bash
|
|
@@ -74,7 +77,7 @@ YAML/JSON version 1. Extra fields are rejected. Fixtures are **data only**. Secr
|
|
|
74
77
|
|
|
75
78
|
List endpoints use `page_size` or `limit` plus `page_token` / `next_page_token`. Tokens are opaque and checksummed. Tampering returns 400 `INVALID_PARAMETER_VALUE`.
|
|
76
79
|
|
|
77
|
-
## Known unsupported (0.
|
|
80
|
+
## Known unsupported (0.2.0)
|
|
78
81
|
|
|
79
82
|
- Unity Catalog, Model Serving, DLT / Spark Declarative Pipelines
|
|
80
83
|
- Jobs API 2.0 as primary (optional 2.1 aliases are representative)
|
|
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "semblance-databricks"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "Unofficial local HTTP simulation of selected Databricks workspace REST operations"
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
11
|
license = "MIT"
|
|
12
12
|
license-files = ["LICENSE.md"]
|
|
13
13
|
authors = [{name = "Semblance Contributors"}]
|
|
@@ -16,21 +16,27 @@ classifiers = [
|
|
|
16
16
|
"Development Status :: 3 - Alpha",
|
|
17
17
|
"Intended Audience :: Developers",
|
|
18
18
|
"Programming Language :: Python :: 3",
|
|
19
|
-
"Programming Language :: Python :: 3.10",
|
|
20
19
|
"Programming Language :: Python :: 3.11",
|
|
21
20
|
"Programming Language :: Python :: 3.12",
|
|
22
21
|
"Topic :: Software Development :: Testing",
|
|
23
22
|
]
|
|
24
23
|
dependencies = [
|
|
25
|
-
"semblance>=0.
|
|
24
|
+
"semblance>=0.10.0,<1.0",
|
|
26
25
|
"pydantic>=2.0.0",
|
|
27
26
|
"pyyaml>=6.0",
|
|
28
27
|
]
|
|
29
28
|
|
|
30
29
|
[project.optional-dependencies]
|
|
30
|
+
test = [
|
|
31
|
+
"fastapi>=0.133.0",
|
|
32
|
+
"starlette>=1.3.1",
|
|
33
|
+
"httpx2>=2.13",
|
|
34
|
+
]
|
|
31
35
|
dev = [
|
|
32
36
|
"pytest>=7.0.0",
|
|
33
|
-
"
|
|
37
|
+
"fastapi>=0.133.0",
|
|
38
|
+
"starlette>=1.3.1",
|
|
39
|
+
"httpx2>=2.13",
|
|
34
40
|
"ruff>=0.16.0",
|
|
35
41
|
"mypy>=1.0.0",
|
|
36
42
|
"types-PyYAML>=6.0.0",
|
|
@@ -7,7 +7,7 @@ from collections.abc import Callable
|
|
|
7
7
|
from importlib.metadata import PackageNotFoundError
|
|
8
8
|
from importlib.metadata import version as pkg_version
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import Any
|
|
10
|
+
from typing import Any, Self
|
|
11
11
|
|
|
12
12
|
from fastapi import FastAPI
|
|
13
13
|
|
|
@@ -37,7 +37,7 @@ def _distribution_version() -> str:
|
|
|
37
37
|
try:
|
|
38
38
|
return pkg_version("semblance-databricks")
|
|
39
39
|
except PackageNotFoundError:
|
|
40
|
-
return "0.
|
|
40
|
+
return "0.2.0"
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class DatabricksMock:
|
|
@@ -49,13 +49,16 @@ class DatabricksMock:
|
|
|
49
49
|
self.page_token_codec = PageTokenCodec(token_secret(self.config.seed))
|
|
50
50
|
self._rng = random.Random(self.config.seed)
|
|
51
51
|
|
|
52
|
-
def load_fixture(self, path: str | Path) ->
|
|
53
|
-
self.state.clear()
|
|
52
|
+
def load_fixture(self, path: str | Path) -> Self:
|
|
54
53
|
doc = load_fixture_file(path)
|
|
55
|
-
|
|
54
|
+
staged_state = DatabricksState(seed=self.config.seed)
|
|
55
|
+
staged_state.statement_callbacks.update(self.state.statement_callbacks)
|
|
56
|
+
staged_state.user = dict(self.state.user)
|
|
57
|
+
apply_fixture(doc, staged_state)
|
|
58
|
+
self.state = staged_state
|
|
56
59
|
return self
|
|
57
60
|
|
|
58
|
-
def load_bundled_fixture(self, name: str = "acme") ->
|
|
61
|
+
def load_bundled_fixture(self, name: str = "acme") -> Self:
|
|
59
62
|
"""Load a fixture shipped with the package (currently ``acme``)."""
|
|
60
63
|
loader = _BUNDLED_FIXTURES.get(name)
|
|
61
64
|
if loader is None:
|
|
@@ -16,7 +16,7 @@ async def json_object(request: Request) -> dict[str, Any]:
|
|
|
16
16
|
return {}
|
|
17
17
|
try:
|
|
18
18
|
body = json.loads(raw)
|
|
19
|
-
except json.JSONDecodeError as exc:
|
|
19
|
+
except (json.JSONDecodeError, UnicodeDecodeError) as exc:
|
|
20
20
|
raise DatabricksError(400, "INVALID_PARAMETER_VALUE", "Invalid JSON") from exc
|
|
21
21
|
if not isinstance(body, dict):
|
|
22
22
|
raise DatabricksError(400, "INVALID_PARAMETER_VALUE", "JSON object required")
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import base64
|
|
6
|
+
import os
|
|
7
|
+
import secrets
|
|
8
|
+
import stat
|
|
6
9
|
from pathlib import Path
|
|
7
10
|
from typing import Any
|
|
8
11
|
|
|
@@ -45,7 +48,45 @@ def _write_temp(root: str, dbfs_path: str, data: bytes) -> None:
|
|
|
45
48
|
except ValueError as exc:
|
|
46
49
|
raise DatabricksError(400, "INVALID_PARAMETER_VALUE", "Invalid path") from exc
|
|
47
50
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
48
|
-
|
|
51
|
+
temp_path: Path | None = None
|
|
52
|
+
temp_fd: int | None = None
|
|
53
|
+
try:
|
|
54
|
+
try:
|
|
55
|
+
dest_mode = stat.S_IMODE(dest.stat().st_mode)
|
|
56
|
+
except FileNotFoundError:
|
|
57
|
+
dest_mode = None
|
|
58
|
+
|
|
59
|
+
for _ in range(100):
|
|
60
|
+
candidate = dest.parent / f".dbfs-{secrets.token_hex(8)}.tmp"
|
|
61
|
+
try:
|
|
62
|
+
temp_fd = os.open(
|
|
63
|
+
candidate, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600
|
|
64
|
+
)
|
|
65
|
+
except FileExistsError:
|
|
66
|
+
continue
|
|
67
|
+
temp_path = candidate
|
|
68
|
+
break
|
|
69
|
+
if temp_fd is None or temp_path is None:
|
|
70
|
+
raise FileExistsError("Unable to create a temporary DBFS file")
|
|
71
|
+
|
|
72
|
+
try:
|
|
73
|
+
temp_file = os.fdopen(temp_fd, "wb")
|
|
74
|
+
except Exception:
|
|
75
|
+
os.close(temp_fd)
|
|
76
|
+
temp_fd = None
|
|
77
|
+
raise
|
|
78
|
+
temp_fd = None
|
|
79
|
+
with temp_file:
|
|
80
|
+
temp_file.write(data)
|
|
81
|
+
if dest_mode is not None:
|
|
82
|
+
os.chmod(temp_path, dest_mode)
|
|
83
|
+
os.replace(temp_path, dest)
|
|
84
|
+
temp_path = None
|
|
85
|
+
finally:
|
|
86
|
+
if temp_fd is not None:
|
|
87
|
+
os.close(temp_fd)
|
|
88
|
+
if temp_path is not None:
|
|
89
|
+
temp_path.unlink(missing_ok=True)
|
|
49
90
|
|
|
50
91
|
|
|
51
92
|
def create_dbfs_router() -> APIRouter:
|
|
@@ -126,9 +167,9 @@ def create_dbfs_router() -> APIRouter:
|
|
|
126
167
|
)
|
|
127
168
|
if total > mock.config.dbfs_max_bytes:
|
|
128
169
|
raise DatabricksError(400, "MAX_BLOCK_SIZE_EXCEEDED", "DBFS size cap")
|
|
129
|
-
mock.state.dbfs[path] = DbfsNode(path=path, is_dir=False, data=content)
|
|
130
170
|
if mock.config.dbfs_temp_dir:
|
|
131
171
|
_write_temp(mock.config.dbfs_temp_dir, path, content)
|
|
172
|
+
mock.state.dbfs[path] = DbfsNode(path=path, is_dir=False, data=content)
|
|
132
173
|
mock.state.bump()
|
|
133
174
|
return {}
|
|
134
175
|
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/testing.py
RENAMED
|
@@ -4,14 +4,24 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from collections.abc import Iterator
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import TYPE_CHECKING, Any
|
|
8
8
|
|
|
9
|
-
from fastapi
|
|
9
|
+
from fastapi import FastAPI
|
|
10
10
|
|
|
11
11
|
from semblance_databricks.app import DatabricksMock
|
|
12
12
|
from semblance_databricks.config import DatabricksMockConfig
|
|
13
13
|
from semblance_databricks.fixtures.loaders import bundled_acme_path
|
|
14
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from fastapi.testclient import TestClient
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _make_test_client(app: FastAPI) -> TestClient:
|
|
20
|
+
"""Load the optional test client backend only when a helper is used."""
|
|
21
|
+
from fastapi.testclient import TestClient
|
|
22
|
+
|
|
23
|
+
return TestClient(app)
|
|
24
|
+
|
|
15
25
|
|
|
16
26
|
class DatabricksMockContext:
|
|
17
27
|
"""Load a fixture, yield a TestClient, reset state on exit."""
|
|
@@ -31,7 +41,7 @@ class DatabricksMockContext:
|
|
|
31
41
|
self._client: TestClient | None = None
|
|
32
42
|
|
|
33
43
|
def __enter__(self) -> TestClient:
|
|
34
|
-
self._client =
|
|
44
|
+
self._client = _make_test_client(self.mock.as_fastapi())
|
|
35
45
|
return self._client
|
|
36
46
|
|
|
37
47
|
def __exit__(self, *exc: Any) -> None:
|
|
@@ -50,7 +60,7 @@ def databricks_test_client(
|
|
|
50
60
|
if mock is None:
|
|
51
61
|
mock = DatabricksMock(config or DatabricksMockConfig())
|
|
52
62
|
mock.load_fixture(fixture if fixture is not None else bundled_acme_path())
|
|
53
|
-
return
|
|
63
|
+
return _make_test_client(mock.as_fastapi())
|
|
54
64
|
|
|
55
65
|
|
|
56
66
|
def acme_client_iter(
|
|
@@ -58,7 +68,7 @@ def acme_client_iter(
|
|
|
58
68
|
) -> Iterator[tuple[DatabricksMock, TestClient]]:
|
|
59
69
|
mock = DatabricksMock(config or DatabricksMockConfig(seed=42))
|
|
60
70
|
mock.load_fixture(bundled_acme_path())
|
|
61
|
-
client =
|
|
71
|
+
client = _make_test_client(mock.as_fastapi())
|
|
62
72
|
try:
|
|
63
73
|
yield mock, client
|
|
64
74
|
finally:
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0/src/semblance_databricks.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: semblance-databricks
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Unofficial local HTTP simulation of selected Databricks workspace REST operations
|
|
5
5
|
Author: Semblance Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,19 +11,24 @@ Keywords: databricks,mock,simulation,testing,fastapi
|
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
16
|
Classifier: Topic :: Software Development :: Testing
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.11
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
20
19
|
License-File: LICENSE.md
|
|
21
|
-
Requires-Dist: semblance<1.0,>=0.
|
|
20
|
+
Requires-Dist: semblance<1.0,>=0.10.0
|
|
22
21
|
Requires-Dist: pydantic>=2.0.0
|
|
23
22
|
Requires-Dist: pyyaml>=6.0
|
|
23
|
+
Provides-Extra: test
|
|
24
|
+
Requires-Dist: fastapi>=0.133.0; extra == "test"
|
|
25
|
+
Requires-Dist: starlette>=1.3.1; extra == "test"
|
|
26
|
+
Requires-Dist: httpx2>=2.13; extra == "test"
|
|
24
27
|
Provides-Extra: dev
|
|
25
28
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
26
|
-
Requires-Dist:
|
|
29
|
+
Requires-Dist: fastapi>=0.133.0; extra == "dev"
|
|
30
|
+
Requires-Dist: starlette>=1.3.1; extra == "dev"
|
|
31
|
+
Requires-Dist: httpx2>=2.13; extra == "dev"
|
|
27
32
|
Requires-Dist: ruff>=0.16.0; extra == "dev"
|
|
28
33
|
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
29
34
|
Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
|
|
@@ -39,14 +44,17 @@ This package is **not affiliated with, endorsed by, or equivalent to Databricks*
|
|
|
39
44
|
|
|
40
45
|
Verified against public workspace REST documentation dated **2026-08-19**. See `compatibility.yaml` (also served at `/.well-known/semblance-databricks-compat.json`).
|
|
41
46
|
|
|
42
|
-
Requires `semblance` 0.
|
|
47
|
+
Requires Python 3.11+ and `semblance` 0.10.x (`>=0.10.0,<1.0`). Python 3.10 users can use Databricks 0.1.x with `semblance<0.10`.
|
|
43
48
|
|
|
44
49
|
## Install
|
|
45
50
|
|
|
46
51
|
```bash
|
|
47
|
-
pip install semblance-databricks
|
|
52
|
+
pip install "semblance-databricks[test]"
|
|
48
53
|
```
|
|
49
54
|
|
|
55
|
+
The `[test]` extra installs the in-process HTTP client used in the quick start.
|
|
56
|
+
For CLI-only use, `pip install semblance-databricks` is enough.
|
|
57
|
+
|
|
50
58
|
From a clone of this repository:
|
|
51
59
|
|
|
52
60
|
```bash
|
|
@@ -107,7 +115,7 @@ YAML/JSON version 1. Extra fields are rejected. Fixtures are **data only**. Secr
|
|
|
107
115
|
|
|
108
116
|
List endpoints use `page_size` or `limit` plus `page_token` / `next_page_token`. Tokens are opaque and checksummed. Tampering returns 400 `INVALID_PARAMETER_VALUE`.
|
|
109
117
|
|
|
110
|
-
## Known unsupported (0.
|
|
118
|
+
## Known unsupported (0.2.0)
|
|
111
119
|
|
|
112
120
|
- Unity Catalog, Model Serving, DLT / Spark Declarative Pipelines
|
|
113
121
|
- Jobs API 2.0 as primary (optional 2.1 aliases are representative)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
semblance<1.0,>=0.10.0
|
|
2
|
+
pydantic>=2.0.0
|
|
3
|
+
pyyaml>=6.0
|
|
4
|
+
|
|
5
|
+
[dev]
|
|
6
|
+
pytest>=7.0.0
|
|
7
|
+
fastapi>=0.133.0
|
|
8
|
+
starlette>=1.3.1
|
|
9
|
+
httpx2>=2.13
|
|
10
|
+
ruff>=0.16.0
|
|
11
|
+
mypy>=1.0.0
|
|
12
|
+
types-PyYAML>=6.0.0
|
|
13
|
+
|
|
14
|
+
[sdk]
|
|
15
|
+
databricks-sdk==0.57.0
|
|
16
|
+
|
|
17
|
+
[test]
|
|
18
|
+
fastapi>=0.133.0
|
|
19
|
+
starlette>=1.3.1
|
|
20
|
+
httpx2>=2.13
|
|
File without changes
|
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/compatibility.py
RENAMED
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/config.py
RENAMED
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/pagination.py
RENAMED
|
File without changes
|
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{semblance_databricks-0.1.2 → semblance_databricks-0.2.0}/src/semblance_databricks/services/deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|