1{ buildPythonPackage
2, lib
3, isPy27
4, nixosTests
5, fetchPypi
6, alembic
7, aniso8601
8, Babel
9, blinker
10, cachetools
11, click
12, dnspython
13, email_validator
14, flask
15, flask-babel
16, flask-cors
17, flask_mail
18, flask_migrate
19, flask-restful
20, flask_sqlalchemy
21, flask-talisman
22, flask_wtf
23, debts
24, idna
25, itsdangerous
26, jinja2
27, Mako
28, markupsafe
29, python-dateutil
30, pytz
31, requests
32, six
33, sqlalchemy
34, sqlalchemy-utils
35, sqlalchemy-continuum
36, sqlalchemy-i18n
37, werkzeug
38, wtforms
39, psycopg2 # optional, for postgresql support
40, flask_testing
41, pytestCheckHook
42}:
43
44# ihatemoney is not really a library. It will only ever be imported
45# by the interpreter of uwsgi. So overrides for its depencies are fine.
46let
47 # sqlalchemy-continuum requires sqlalchemy < 1.4
48 pinned_sqlalchemy = sqlalchemy.overridePythonAttrs (
49 old: rec {
50 pname = "SQLAlchemy";
51 version = "1.3.24";
52
53 src = fetchPypi {
54 inherit pname version;
55 sha256 = "06bmxzssc66cblk1hamskyv5q3xf1nh1py3vi6dka4lkpxy7gfzb";
56 };
57 }
58 );
59in
60
61buildPythonPackage rec {
62 pname = "ihatemoney";
63 version = "5.1.1";
64
65 src = fetchPypi {
66 inherit pname version;
67 sha256 = "0gsqba9qbs1dpmfys8qpiahy4pbn4khcc6mgmdnhssmkjsb94sx6";
68 };
69
70 disabled = isPy27;
71
72 propagatedBuildInputs = [
73 aniso8601
74 Babel
75 blinker
76 cachetools
77 click
78 dnspython
79 email_validator
80 flask
81 flask-babel
82 flask-cors
83 flask_mail
84 (
85 flask_migrate.override {
86 flask_sqlalchemy = flask_sqlalchemy.override {
87 sqlalchemy = pinned_sqlalchemy;
88 };
89 alembic = alembic.override {
90 sqlalchemy = pinned_sqlalchemy;
91 };
92 }
93 )
94 flask-restful
95 flask-talisman
96 flask_wtf
97 idna
98 itsdangerous
99 jinja2
100 Mako
101 markupsafe
102 python-dateutil
103 pytz
104 requests
105 six
106 (
107 (
108 sqlalchemy-continuum.override {
109 sqlalchemy = pinned_sqlalchemy;
110 sqlalchemy-utils = sqlalchemy-utils.override {
111 sqlalchemy = pinned_sqlalchemy;
112 };
113 sqlalchemy-i18n = sqlalchemy-i18n.override {
114 sqlalchemy = pinned_sqlalchemy;
115 sqlalchemy-utils = sqlalchemy-utils.override {
116 sqlalchemy = pinned_sqlalchemy;
117 };
118 };
119 flask_sqlalchemy = flask_sqlalchemy.override {
120 sqlalchemy = pinned_sqlalchemy;
121 };
122 }
123 ).overridePythonAttrs (
124 old: {
125 doCheck = false;
126 }
127 )
128 )
129 werkzeug
130 wtforms
131 psycopg2
132 debts
133 ];
134
135 # upstream performed the update without needing to patch the code
136 # the original patch does not apply, sadly
137 # https://github.com/spiral-project/ihatemoney/pull/912
138 postPatch = ''
139 substituteInPlace setup.cfg --replace "Flask-WTF>=0.14.3,<1" "Flask-WTF>=0.14.3,<2"
140 '';
141
142 checkInputs = [
143 flask_testing
144 pytestCheckHook
145 ];
146
147 disabledTests = [
148 "test_notifications" # requires running service.
149 "test_invite" # requires running service.
150 "test_invitation_email_failure" # requires dns resolution
151 ];
152
153 passthru.tests = {
154 inherit (nixosTests.ihatemoney) ihatemoney-postgresql ihatemoney-sqlite;
155 };
156
157 meta = with lib; {
158 homepage = "https://ihatemoney.org";
159 description = "A simple shared budget manager web application";
160 license = licenses.beerware;
161 maintainers = [ maintainers.symphorien ];
162 };
163}