1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 replaceVars,
6 ruff,
7 click,
8 click-default-group,
9 docformatter,
10 jinja2,
11 toposort,
12 typing-extensions,
13 lxml,
14 requests,
15 pytestCheckHook,
16 setuptools,
17}:
18
19buildPythonPackage rec {
20 pname = "xsdata";
21 version = "25.4";
22 pyproject = true;
23
24 src = fetchFromGitHub {
25 owner = "tefra";
26 repo = "xsdata";
27 tag = "v${version}";
28 hash = "sha256-2sHHDFv2p+O5ru9ajnmbk6ULm40h0hMyYiIAFh3PC8I=";
29 };
30
31 patches = [
32 (replaceVars ./paths.patch {
33 ruff = lib.getExe ruff;
34 })
35 ];
36
37 postPatch = ''
38 substituteInPlace pyproject.toml \
39 --replace-fail "--benchmark-skip" ""
40 '';
41
42 build-system = [ setuptools ];
43
44 dependencies = [ typing-extensions ];
45
46 optional-dependencies = {
47 cli = [
48 click
49 click-default-group
50 docformatter
51 jinja2
52 toposort
53 ];
54 lxml = [ lxml ];
55 soap = [ requests ];
56 };
57
58 nativeCheckInputs =
59 [
60 pytestCheckHook
61 ]
62 ++ optional-dependencies.cli
63 ++ optional-dependencies.lxml
64 ++ optional-dependencies.soap;
65
66 disabledTestPaths = [ "tests/integration/benchmarks" ];
67
68 pythonImportsCheck = [
69 "xsdata.formats.dataclass.context"
70 "xsdata.formats.dataclass.models.elements"
71 "xsdata.formats.dataclass.models.generics"
72 "xsdata.formats.dataclass.parsers"
73 "xsdata.formats.dataclass.parsers.handlers"
74 "xsdata.formats.dataclass.parsers.nodes"
75 "xsdata.formats.dataclass.serializers"
76 "xsdata.formats.dataclass.serializers.config"
77 "xsdata.formats.dataclass.serializers.mixins"
78 "xsdata.formats.dataclass.serializers.writers"
79 "xsdata.models.config"
80 "xsdata.utils.text"
81 ];
82
83 meta = {
84 description = "Naive XML & JSON bindings for Python";
85 mainProgram = "xsdata";
86 homepage = "https://github.com/tefra/xsdata";
87 changelog = "https://github.com/tefra/xsdata/blob/${src.rev}/CHANGES.md";
88 license = lib.licenses.mit;
89 maintainers = with lib.maintainers; [ dotlambda ];
90 };
91}