Files
nixpkgs/pkgs/development/python-modules/frictionless/default.nix
T
2026-01-23 00:42:32 +01:00

231 lines
4.8 KiB
Nix

{
lib,
buildPythonPackage,
fetchFromGitHub,
hatchling,
attrs,
chardet,
humanize,
isodate,
jinja2,
jsonschema,
marko,
petl,
pydantic,
python-dateutil,
python-slugify,
pyyaml,
requests,
rfc3986,
simpleeval,
tabulate,
typer,
typing-extensions,
validators,
# Optional formats
boto3,
google-api-python-client,
datasette,
duckdb,
duckdb-engine,
sqlalchemy,
pygithub,
pyquery,
ijson,
jsonlines,
pymysql,
ezodf,
lxml,
pandas,
pyarrow,
fastparquet,
psycopg,
psycopg2,
visidata,
tatsu,
# Tests
pytestCheckHook,
pytest-lazy-fixtures,
pytest-mock,
pytest-timeout,
pytest-vcr,
moto,
requests-mock,
# Tests depending on excel
openpyxl,
xlrd,
}:
buildPythonPackage rec {
pname = "frictionless";
version = "5.18.1";
pyproject = true;
src = fetchFromGitHub {
owner = "frictionlessdata";
repo = "frictionless-py";
tag = "v${version}";
hash = "sha256-svspEHcEw994pEjnuzWf0FFaYeFZuqriK96yFAB6/gI=";
};
postPatch = ''
substituteInPlace frictionless/conftest.py \
--replace-fail "from pytest_cov.embed import cleanup_on_sigterm" "" \
--replace-fail "cleanup_on_sigterm()" ""
'';
build-system = [
hatchling
];
dependencies = [
attrs
chardet
humanize
isodate
jinja2
jsonschema
marko
petl
pydantic
python-dateutil
python-slugify
pyyaml
requests
rfc3986
simpleeval
tabulate
typer
typing-extensions
validators
];
optional-dependencies = {
# The commented-out formats require dependencies that have not been packaged
# They are intentionally left in for reference - Please do not remove them
aws = [
boto3
];
bigquery = [
google-api-python-client
];
#ckan = [
# frictionless-ckan-mapper # not packaged
#];
datasette = [
datasette
];
duckdb = [
duckdb
duckdb-engine
sqlalchemy
];
#excel = [
# openpyxl
# tableschema-to-template # not packaged
# xlrd
# xlwt
#];
github = [
pygithub
];
#gsheets = [
# pygsheets # not packaged
#];
html = [
pyquery
];
json = [
ijson
jsonlines
];
mysql = [
pymysql
sqlalchemy
];
ods = [
ezodf
lxml
];
pandas = [
pandas
pyarrow
];
parquet = [
fastparquet
];
postgresql = [
psycopg
psycopg2
sqlalchemy
];
#spss = [
# savreaderwriter # not packaged
#];
sql = [
sqlalchemy
];
visidata = [
# Not ideal: This is actually outside pythonPackages set and depends on whatever
# Python version the top-level python3Packages set refers to
visidata
];
wkt = [
tatsu
];
#zenodo = [
# pyzenodo3 # not packaged
#];
};
nativeCheckInputs = [
pytestCheckHook
pytest-lazy-fixtures
pytest-mock
pytest-timeout
pytest-vcr
moto
requests-mock
# We do not have all packages for the `excel` format to fully function,
# but it's required for some of the tests.
openpyxl
xlrd
]
++ lib.concatAttrValues optional-dependencies;
disabledTestPaths = [
# Requires optional dependencies that have not been packaged (commented out above)
# The tests of other unavailable formats are auto-skipped
"frictionless/formats/excel"
"frictionless/formats/spss"
# Console CLI tests fail due to typer/Click CliRunner output capture issues
# result.stdout is empty when error messages are expected
"frictionless/console/__spec__/test_console.py"
"frictionless/console/commands/__spec__/test_summary.py"
# We're well-ahead of requirements for duckdb and sqlalchemy
# https://github.com/frictionlessdata/frictionless-py/blob/be08dcf491781a565d230f47e08707e703292d85/pyproject.toml#L84
"frictionless/formats/sql/__spec__/duckdb/test_adapter.py"
"frictionless/formats/sql/__spec__/duckdb/test_parser.py"
"frictionless/indexer/__spec__/test_resource.py::test_resource_index_sqlite[duckdb_url]"
"frictionless/indexer/__spec__/test_resource.py::test_resource_index_sqlite_with_metadata[duckdb_url]"
"frictionless/indexer/__spec__/test_resource.py::test_resource_index_sqlite_on_progress[duckdb_url]"
];
pythonImportsCheck = [
"frictionless"
];
meta = {
description = "Data management framework for Python that provides functionality to describe, extract, validate, and transform tabular data";
homepage = "https://github.com/frictionlessdata/frictionless-py";
changelog = "https://github.com/frictionlessdata/frictionless-py/blob/${src.rev}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ zhaofengli ];
mainProgram = "frictionless";
};
}