1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 cargo,
6 libiconv,
7 fetchFromGitHub,
8 json-stream,
9 json-stream-rs-tokenizer,
10 pythonOlder,
11 rustc,
12 rustPlatform,
13 setuptools,
14 setuptools-rust,
15 wheel,
16}:
17
18buildPythonPackage rec {
19 pname = "json-stream-rs-tokenizer";
20 version = "0.4.30";
21 pyproject = true;
22
23 disabled = pythonOlder "3.7";
24
25 src = fetchFromGitHub {
26 owner = "smheidrich";
27 repo = "py-json-stream-rs-tokenizer";
28 tag = "v${version}";
29 hash = "sha256-kzeEG42KcmczIC69aJe1dkqeBpMYn5uBBj1Ni+/+sTM=";
30 };
31
32 cargoDeps = rustPlatform.fetchCargoVendor {
33 inherit pname version src;
34 hash = "sha256-Zvtu7pH50hPPuLKVn7itcuO+BeSJKRQmZCWtQkMIZI8=";
35 };
36
37 nativeBuildInputs = [
38 cargo
39 rustPlatform.cargoSetupHook
40 rustc
41 setuptools
42 setuptools-rust
43 wheel
44 ];
45
46 buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ];
47
48 # Tests depend on json-stream, which depends on this package.
49 # To avoid infinite recursion, we only enable tests when building passthru.tests.
50 doCheck = false;
51
52 checkInputs = [ json-stream ];
53
54 pythonImportsCheck = [ "json_stream_rs_tokenizer" ];
55
56 passthru.tests = {
57 runTests = json-stream-rs-tokenizer.overrideAttrs (_: {
58 doCheck = true;
59 });
60 };
61
62 meta = with lib; {
63 description = "Faster tokenizer for the json-stream Python library";
64 homepage = "https://github.com/smheidrich/py-json-stream-rs-tokenizer";
65 license = licenses.mit;
66 maintainers = with maintainers; [ winter ];
67 };
68}