Files
nixpkgs/pkgs/by-name/db/dbx/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

163 lines
3.9 KiB
Nix

{
lib,
stdenv,
python3,
fetchFromGitHub,
# tests
addBinToPathHook,
gitMinimal,
versionCheckHook,
writableTmpDirAsHomeHook,
}:
let
python = python3.override {
self = python;
packageOverrides = self: super: {
pydantic = super.pydantic_1;
# python-on-whales is the only aiohttp dependency that is incompatible with pydantic_1
# Override aiohttp to remove this dependency
aiohttp = super.aiohttp.overridePythonAttrs (old: {
# Remove python-on-whales from nativeCheckInputs
nativeCheckInputs = lib.filter (p: (p.pname or "") != "python-on-whales") old.nativeCheckInputs;
disabledTestPaths = [
# Requires python-on-whales
"tests/autobahn/test_autobahn.py"
]
++ (old.disabledTestPaths or [ ]);
});
databricks-sdk = super.databricks-sdk.overridePythonAttrs (old: {
# Tests require langchain-openai which is incompatible with pydantic_1
doCheck = false;
});
versioningit = super.versioningit.overridePythonAttrs (old: {
# Tests fail with pydantic_1
# AttributeError: type object 'CaseDetails' has no attribute 'model_validate_...
doCheck = false;
});
};
};
in
python.pkgs.buildPythonApplication rec {
pname = "dbx";
version = "0.8.19";
pyproject = true;
src = fetchFromGitHub {
owner = "databrickslabs";
repo = "dbx";
tag = "v${version}";
hash = "sha256-DNVJcCDHyWCorTxNN6RR6TWNF2MrysXT44UbwegROTU=";
};
postPatch = ''
# Probably a typo
substituteInPlace src/dbx/custom.py \
--replace-fail "_make_rich_rext" "_make_rich_text"
# dbx pins an old version of typer.
# In newer versions of typer, `callback` does not accept the 'name' argument anymore.
substituteInPlace src/dbx/cli.py \
--replace-fail 'name="dbx",' ""
# Fixes: TypeError: 'NoneType' object is not iterable
substituteInPlace src/dbx/utils/common.py \
--replace-fail \
'[t.split("=") for t in multiple_argument]' \
'[t.split("=") for t in multiple_argument] if multiple_argument else []'
'';
pythonRelaxDeps = [
"cryptography"
"databricks-cli"
"pydantic"
"rich"
"tenacity"
"typer"
];
pythonRemoveDeps = [ "mlflow-skinny" ];
build-system = with python.pkgs; [
hatch-vcs
hatchling
];
dependencies = with python.pkgs; [
aiohttp
click
cookiecutter
cryptography
databricks-cli
jinja2
mlflow
pathspec
pydantic
pyyaml
requests
retry
rich
setuptools
tenacity
typer
watchdog
];
optional-dependencies = with python.pkgs; {
aws = [ boto3 ];
azure = [
azure-storage-blob
azure-identity
];
gcp = [ google-cloud-storage ];
};
nativeCheckInputs = [
addBinToPathHook
gitMinimal
versionCheckHook
writableTmpDirAsHomeHook
]
++ (with python.pkgs; [
pytest-asyncio
pytest-mock
pytest-timeout
pytest-xdist
pytestCheckHook
]);
versionCheckProgramArg = "--version";
disabledTests = [
# Fails because of dbfs CLI wrong call
"test_dbfs_unknown_user"
"test_dbfs_no_root"
# Requires pylint, prospector, pydocstyle
"test_python_basic_sanity_check"
# FileNotFoundError: [Errno 2] No such file or directory: '/build/tmph3veuluv...
"test_load_file"
"test_storage_serde"
];
disabledTestPaths = lib.optionals stdenv.hostPlatform.isDarwin [
# ERROR fsevents:fsevents.py:310 Unhandled exception in FSEventsEmitter
# SystemError: Cannot start fsevents stream. Use a kqueue or polling observer instead.
"tests/unit/sync/test_event_handler.py"
];
pythonImportsCheck = [ "dbx" ];
meta = {
description = "CLI tool for advanced Databricks jobs management";
homepage = "https://github.com/databrickslabs/dbx";
changelog = "https://github.com/databrickslabs/dbx/blob/v${version}/CHANGELOG.md";
license = lib.licenses.databricks-dbx;
maintainers = [ ];
};
}