1{ 2 lib, 3 buildPythonPackage, 4 fetchFromGitHub, 5 pythonOlder, 6 flit-core, 7 8 # extras: babel 9 babel, 10 flask-babel, 11 12 # extras: common 13 argon2-cffi, 14 bcrypt, 15 bleach, 16 flask-mailman, 17 18 # extras: fsqla 19 flask-sqlalchemy, 20 sqlalchemy, 21 sqlalchemy-utils, 22 23 # extras: mfa 24 cryptography, 25 phonenumberslite, 26 webauthn, 27 qrcode, 28 29 # propagates 30 email-validator, 31 flask, 32 flask-login, 33 flask-principal, 34 flask-wtf, 35 libpass, 36 markupsafe, 37 passlib, 38 importlib-resources, 39 wtforms, 40 41 # tests 42 authlib, 43 flask-sqlalchemy-lite, 44 freezegun, 45 mongoengine, 46 mongomock, 47 peewee, 48 pytestCheckHook, 49 requests, 50 zxcvbn, 51}: 52 53buildPythonPackage rec { 54 pname = "flask-security"; 55 version = "5.6.2"; 56 pyproject = true; 57 58 disabled = pythonOlder "3.9"; 59 60 src = fetchFromGitHub { 61 owner = "pallets-eco"; 62 repo = "flask-security"; 63 tag = version; 64 hash = "sha256-mEl98Yp4USKu+z636yAb5p5qPBzcdQraZ/XaPbDoGWU="; 65 }; 66 67 build-system = [ flit-core ]; 68 69 dependencies = [ 70 email-validator 71 flask 72 flask-login 73 flask-principal 74 flask-wtf 75 markupsafe 76 (if pythonOlder "3.12" then passlib else libpass) 77 importlib-resources 78 wtforms 79 ]; 80 81 optional-dependencies = { 82 babel = [ 83 babel 84 flask-babel 85 ]; 86 common = [ 87 argon2-cffi 88 bcrypt 89 bleach 90 flask-mailman 91 ]; 92 fsqla = [ 93 flask-sqlalchemy 94 sqlalchemy 95 sqlalchemy-utils 96 ]; 97 mfa = [ 98 cryptography 99 phonenumberslite 100 webauthn 101 qrcode 102 ]; 103 }; 104 105 nativeCheckInputs = [ 106 authlib 107 flask-sqlalchemy-lite 108 freezegun 109 mongoengine 110 mongomock 111 peewee 112 pytestCheckHook 113 requests 114 zxcvbn 115 ] 116 ++ optional-dependencies.babel 117 ++ optional-dependencies.common 118 ++ optional-dependencies.fsqla 119 ++ optional-dependencies.mfa; 120 121 preCheck = '' 122 pybabel compile --domain flask_security -d flask_security/translations 123 ''; 124 125 disabledTests = [ 126 # needs /etc/resolv.conf 127 "test_login_email_whatever" 128 ]; 129 130 pythonImportsCheck = [ "flask_security" ]; 131 132 meta = { 133 changelog = "https://github.com/pallets-eco/flask-security/blob/${src.tag}/CHANGES.rst"; 134 homepage = "https://github.com/pallets-eco/flask-security"; 135 description = "Quickly add security features to your Flask application"; 136 license = lib.licenses.mit; 137 maintainers = with lib.maintainers; [ gador ]; 138 }; 139}