1{ lib
2, buildPythonPackage
3, pythonOlder
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-talisman
21, flask-wtf
22, debts
23, idna
24, itsdangerous
25, jinja2
26, Mako
27, markupsafe
28, python-dateutil
29, pytz
30, requests
31, sqlalchemy
32, sqlalchemy-utils
33, sqlalchemy-continuum
34, sqlalchemy-i18n
35, werkzeug
36, wtforms
37, psycopg2 # optional, for postgresql support
38, flask-testing
39, pytestCheckHook
40}:
41
42buildPythonPackage rec {
43 pname = "ihatemoney";
44 version = "5.2.0";
45 format = "setuptools";
46
47 disabled = pythonOlder "3.7";
48
49 src = fetchPypi {
50 inherit pname version;
51 sha256 = "sha256-uQgZBbpqqbZYHpR+GwHWX0c7di2rVvEz0jPRY6+BkkQ=";
52 };
53
54 propagatedBuildInputs = [
55 aniso8601
56 babel
57 blinker
58 cachetools
59 click
60 debts
61 dnspython
62 email-validator
63 flask
64 flask_mail
65 flask_migrate
66 flask-wtf
67 flask-babel
68 flask-cors
69 flask-restful
70 flask-talisman
71 idna
72 itsdangerous
73 jinja2
74 Mako
75 markupsafe
76 psycopg2
77 python-dateutil
78 pytz
79 requests
80 sqlalchemy
81 sqlalchemy-continuum
82 werkzeug
83 wtforms
84 ];
85
86 postPatch = ''
87 substituteInPlace setup.cfg \
88 --replace "cachetools>=4.1,<5" "cachetools>=4.1" \
89 --replace "SQLAlchemy>=1.3.0,<1.4" "SQLAlchemy>=1.3.0,<1.5" \
90 --replace "WTForms>=2.3.1,<3.1" "WTForms"
91 '';
92
93 checkInputs = [
94 flask-testing
95 pytestCheckHook
96 ];
97
98 pythonImportsCheck = [
99 "ihatemoney"
100 ];
101
102 disabledTests = [
103 # Requires running service
104 "test_notifications"
105 "test_invite"
106 "test_access_other_projects"
107 "test_authentication"
108 "test_manage_bills"
109 "test_member_delete_method"
110 "test_membership"
111 "test_bill_add_remove_add"
112 "test_clear_ip_records"
113 "test_disable_clear_no_new_records"
114 "test_logs_for_common_actions"
115 # Requires DNS resolution
116 "test_invitation_email_failure"
117 ];
118
119 passthru.tests = {
120 inherit (nixosTests.ihatemoney) ihatemoney-postgresql ihatemoney-sqlite;
121 };
122
123 meta = with lib; {
124 description = "Shared budget manager web application";
125 homepage = "https://ihatemoney.org";
126 license = licenses.beerware;
127 maintainers = with maintainers; [ symphorien ];
128 };
129}