summary refs log tree commit diff
path: root/pkgs/development/python-modules/ihatemoney/default.nix
blob: 5d768170d806cf15ba3c9bede44b69e77334cffd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{ buildPythonPackage
, lib
, isPy27
, nixosTests
, fetchPypi
, alembic
, aniso8601
, Babel
, blinker
, cachetools
, click
, dnspython
, email_validator
, flask
, flask-babel
, flask-cors
, flask_mail
, flask_migrate
, flask-restful
, flask_sqlalchemy
, flask-talisman
, flask_wtf
, debts
, idna
, itsdangerous
, jinja2
, Mako
, markupsafe
, python-dateutil
, pytz
, requests
, six
, sqlalchemy
, sqlalchemy-utils
, sqlalchemy-continuum
, sqlalchemy-i18n
, werkzeug
, wtforms
, psycopg2 # optional, for postgresql support
, flask_testing
, pytestCheckHook
}:

# ihatemoney is not really a library. It will only ever be imported
# by the interpreter of uwsgi. So overrides for its depencies are fine.
let
  # sqlalchemy-continuum requires sqlalchemy < 1.4
  pinned_sqlalchemy = sqlalchemy.overridePythonAttrs (
    old: rec {
      pname = "SQLAlchemy";
      version = "1.3.24";

      src = fetchPypi {
        inherit pname version;
        sha256 = "06bmxzssc66cblk1hamskyv5q3xf1nh1py3vi6dka4lkpxy7gfzb";
      };
    }
  );
in

buildPythonPackage rec {
  pname = "ihatemoney";
  version = "5.1.1";

  src = fetchPypi {
    inherit pname version;
    sha256 = "0gsqba9qbs1dpmfys8qpiahy4pbn4khcc6mgmdnhssmkjsb94sx6";
  };

  disabled = isPy27;

  propagatedBuildInputs = [
    aniso8601
    Babel
    blinker
    cachetools
    click
    dnspython
    email_validator
    flask
    flask-babel
    flask-cors
    flask_mail
    (
      flask_migrate.override {
        flask_sqlalchemy = flask_sqlalchemy.override {
          sqlalchemy = pinned_sqlalchemy;
        };
        alembic = alembic.override {
          sqlalchemy = pinned_sqlalchemy;
        };
      }
    )
    flask-restful
    flask-talisman
    flask_wtf
    idna
    itsdangerous
    jinja2
    Mako
    markupsafe
    python-dateutil
    pytz
    requests
    six
    (
      (
        sqlalchemy-continuum.override {
          sqlalchemy = pinned_sqlalchemy;
          sqlalchemy-utils = sqlalchemy-utils.override {
            sqlalchemy = pinned_sqlalchemy;
          };
          sqlalchemy-i18n = sqlalchemy-i18n.override {
            sqlalchemy = pinned_sqlalchemy;
            sqlalchemy-utils = sqlalchemy-utils.override {
              sqlalchemy = pinned_sqlalchemy;
            };
          };
          flask_sqlalchemy = flask_sqlalchemy.override {
            sqlalchemy = pinned_sqlalchemy;
          };
        }
      ).overridePythonAttrs (
        old: {
          doCheck = false;
        }
      )
    )
    werkzeug
    wtforms
    psycopg2
    debts
  ];

  checkInputs = [
    flask_testing
    pytestCheckHook
  ];

  disabledTests = [
    "test_notifications"  # requires running service.
    "test_invite"         # requires running service.
    "test_invitation_email_failure" # requires dns resolution
  ];

  passthru.tests = {
    inherit (nixosTests.ihatemoney) ihatemoney-postgresql ihatemoney-sqlite;
  };

  meta = with lib; {
    homepage = "https://ihatemoney.org";
    description = "A simple shared budget manager web application";
    license = licenses.beerware;
    maintainers = [ maintainers.symphorien ];
  };
}