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