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}