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.7";
22 pyproject = true;
23
24 src = fetchFromGitHub {
25 owner = "tefra";
26 repo = "xsdata";
27 tag = "v${version}";
28 hash = "sha256-npwJlyUYjoYzvwaZZK4PIqhJmTeYGDDfc4T4/ODcx4c=";
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 pytestCheckHook
60 ]
61 ++ optional-dependencies.cli
62 ++ optional-dependencies.lxml
63 ++ optional-dependencies.soap;
64
65 disabledTestPaths = [ "tests/integration/benchmarks" ];
66
67 pythonImportsCheck = [
68 "xsdata.formats.dataclass.context"
69 "xsdata.formats.dataclass.models.elements"
70 "xsdata.formats.dataclass.models.generics"
71 "xsdata.formats.dataclass.parsers"
72 "xsdata.formats.dataclass.parsers.handlers"
73 "xsdata.formats.dataclass.parsers.nodes"
74 "xsdata.formats.dataclass.serializers"
75 "xsdata.formats.dataclass.serializers.config"
76 "xsdata.formats.dataclass.serializers.mixins"
77 "xsdata.formats.dataclass.serializers.writers"
78 "xsdata.models.config"
79 "xsdata.utils.text"
80 ];
81
82 meta = {
83 description = "Naive XML & JSON bindings for Python";
84 mainProgram = "xsdata";
85 homepage = "https://github.com/tefra/xsdata";
86 changelog = "https://github.com/tefra/xsdata/blob/${src.tag}/CHANGES.md";
87 license = lib.licenses.mit;
88 maintainers = with lib.maintainers; [ dotlambda ];
89 };
90}