1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 pythonOlder,
6 rustPlatform,
7 cargo,
8 rustc,
9 libiconv,
10 buildPythonPackage,
11 setuptools,
12 setuptools-rust,
13 pytestCheckHook,
14 pytest-mypy-plugins,
15 hypothesis,
16 freezegun,
17 time-machine,
18 nix-update-script,
19}:
20
21buildPythonPackage rec {
22 pname = "whenever";
23 version = "0.6.15";
24 pyproject = true;
25
26 disabled = pythonOlder "3.9";
27
28 src = fetchFromGitHub {
29 owner = "ariebovenberg";
30 repo = "whenever";
31 rev = "refs/tags/${version}";
32 hash = "sha256-zCtHvgAQ05zmT6U7CAspG65fE4tPyS/+/gId048DbeA=";
33 };
34
35 cargoDeps = rustPlatform.fetchCargoTarball {
36 inherit src;
37 hash = "sha256-sCwjo3KU4u+2FsWz8CJiqXKSaIKX6DFe1eCkIzRXF3s=";
38 };
39
40 build-system = [
41 setuptools
42 setuptools-rust
43 rustPlatform.cargoSetupHook
44 cargo
45 rustc
46 ];
47
48 buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
49 libiconv
50 ];
51
52 nativeCheckInputs = [
53 pytestCheckHook
54 pytest-mypy-plugins
55 # pytest-benchmark # developer sanity check, should not block distribution
56 hypothesis
57 freezegun
58 time-machine
59 ];
60
61 disabledTestPaths = [
62 # benchmarks
63 "benchmarks/python/test_date.py"
64 "benchmarks/python/test_instant.py"
65 "benchmarks/python/test_local_datetime.py"
66 "benchmarks/python/test_zoned_datetime.py"
67 ];
68
69 pythonImportsCheck = [ "whenever" ];
70
71 # a bunch of failures, including an assumption of what the timezone on the host is
72 # TODO: try enabling on bump
73 doCheck = false;
74
75 passthru.updateScript = nix-update-script { };
76
77 meta = with lib; {
78 description = "Strict, predictable, and typed datetimes";
79 homepage = "https://github.com/ariebovenberg/whenever";
80 changelog = "https://github.com/ariebovenberg/whenever/blob/${src.rev}/CHANGELOG.rst";
81 license = licenses.mit;
82 maintainers = with maintainers; [ pbsds ];
83 };
84}