summaryrefslogtreecommitdiff
path: root/pkgs/development/python-modules/flask-admin/default.nix
blob: d0912717ab72d7f6a95a8600b63d229defc946af (plain)
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
157
158
{
  buildPythonPackage,
  fetchFromGitHub,
  flit-core,
  lib,
  pythonOlder,
  # dependencies
  flask,
  jinja2,
  markupsafe,
  werkzeug,
  wtforms,
  typing-extensions,
  # optional dependencies
  # sqlalchemy
  flask-sqlalchemy,
  sqlalchemy,
  # sqlalchemy-with-utils
  arrow,
  colour,
  email-validator,
  sqlalchemy-citext,
  sqlalchemy-utils,
  # geoalchemy
  geoalchemy2,
  shapely,
  # pymongo
  pymongo,
  # mongoengine
  mongoengine,
  # peewee
  peewee,
  wtf-peewee,
  # s3
  boto3,
  # azure-blob-storage
  azure-storage-blob,
  # images
  pillow,
  # export
  tablib,
  # rediscli
  redis,
  # translation
  flask-babel,
  # checks
  beautifulsoup4,
  moto,
  psycopg2,
  pytestCheckHook,
}:

buildPythonPackage rec {
  pname = "flask-admin";
  version = "2.0.2";
  pyproject = true;

  src = fetchFromGitHub {
    owner = "flask-admin";
    repo = "flask-admin";
    tag = "v${version}";
    hash = "sha256-HjK+ddMtT8QJ/KSFj9v28jflf2f6M+Gx1rJjCdWUUFM=";
  };

  build-system = [ flit-core ];

  dependencies = [
    flask
    jinja2
    markupsafe
    werkzeug
    wtforms
  ]
  ++ lib.optionals (pythonOlder "3.11") [
    typing-extensions
  ];

  optional-dependencies = {
    sqlalchemy = [
      flask-sqlalchemy
      sqlalchemy
    ];
    sqlalchemy-with-utils = optional-dependencies.sqlalchemy ++ [
      arrow
      colour
      email-validator
      sqlalchemy-citext
      sqlalchemy-utils
    ];
    geoalchemy = optional-dependencies.sqlalchemy ++ [
      geoalchemy2
      shapely
    ];
    pymongo = [ pymongo ];
    mongoengine = [ mongoengine ];
    peewee = [
      peewee
      wtf-peewee
    ];
    s3 = [ boto3 ];
    azure-blob-storage = [ azure-storage-blob ];
    images = [ pillow ];
    export = [ tablib ];
    rediscli = [ redis ];
    translation = [ flask-babel ];
    all = lib.flatten [
      optional-dependencies.sqlalchemy
      optional-dependencies.sqlalchemy-with-utils
      optional-dependencies.geoalchemy
      optional-dependencies.pymongo
      optional-dependencies.mongoengine
      optional-dependencies.peewee
      optional-dependencies.s3
      optional-dependencies.azure-blob-storage
      optional-dependencies.images
      optional-dependencies.export
      optional-dependencies.rediscli
      optional-dependencies.translation
    ];
  };

  nativeCheckInputs = [
    beautifulsoup4
    moto
    psycopg2
    pytestCheckHook
  ]
  ++ lib.flatten [
    optional-dependencies.sqlalchemy-with-utils
    optional-dependencies.mongoengine
    optional-dependencies.peewee
    optional-dependencies.images
    optional-dependencies.export
    optional-dependencies.translation
    flask.optional-dependencies.async
  ];

  disabledTestPaths = [
    # requires database
    "flask_admin/tests/geoa/test_basic.py"
    "flask_admin/tests/pymongo/test_basic.py"
    "flask_admin/tests/mongoengine/test_basic.py"
    "flask_admin/tests/peeweemodel/test_basic.py"
    "flask_admin/tests/sqla/test_postgres.py"
    # requires internet
    "flask_admin/tests/fileadmin/test_fileadmin_azure.py"
  ];

  pythonImportsCheck = [ "flask_admin" ];

  meta = {
    description = "Admin interface framework for Flask";
    homepage = "https://github.com/flask-admin/flask-admin/";
    changelog = "https://github.com/flask-admin/flask-admin/releases/tag/v${version}";
    license = lib.licenses.bsd3;
    maintainers = with lib.maintainers; [ nickcao ];
  };
}