python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / tools / admin / pgadmin / default.nix
blob46f212bee52414a69130dbd226bfc8123622a959
1 { lib
2 , python3
3 , fetchurl
4 , zlib
5 , mkYarnModules
6 , sphinx
7 , nixosTests
8 , pkgs
9 }:
11 let
12   pname = "pgadmin";
13   version = "6.15";
15   src = fetchurl {
16     url = "https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v${version}/source/pgadmin4-${version}.tar.gz";
17     sha256 = "sha256-S//Rfi8IiBo+lL0BCFVBw+hy2Tw37B349Gcpq2knqSM=";
18   };
20   yarnDeps = mkYarnModules {
21     pname = "${pname}-yarn-deps";
22     inherit version;
23     packageJSON = ./package.json;
24     yarnLock = ./yarn.lock;
25     yarnNix = ./yarn.nix;
26   };
28   # move buildDeps here to easily pass to test suite
29   buildDeps = with pythonPackages; [
30     flask
31     flask-gravatar
32     flask-login
33     flask_mail
34     flask_migrate
35     flask-sqlalchemy
36     flask-wtf
37     flask-compress
38     passlib
39     pytz
40     simplejson
41     sqlparse
42     wtforms
43     flask-paranoid
44     psutil
45     psycopg2
46     python-dateutil
47     sqlalchemy
48     itsdangerous
49     flask-security-too
50     bcrypt
51     cryptography
52     sshtunnel
53     ldap3
54     flask-babelex
55     flask-babel
56     gssapi
57     flask-socketio
58     eventlet
59     httpagentparser
60     user-agents
61     wheel
62     authlib
63     qrcode
64     pillow
65     pyotp
66     botocore
67     boto3
68     azure-mgmt-subscription
69     azure-mgmt-rdbms
70     azure-mgmt-resource
71     azure-identity
72   ];
74   # keep the scope, as it is used throughout the derivation and tests
75   # this also makes potential future overrides easier
76   pythonPackages = python3.pkgs.overrideScope (final: prev: rec {
77     # flask 2.2 is incompatible with pgadmin 6.15
78     # https://redmine.postgresql.org/issues/7651
79     flask = prev.flask.overridePythonAttrs (oldAttrs: rec {
80       version = "2.1.3";
81       src = oldAttrs.src.override {
82         inherit version;
83         sha256 = "sha256-FZcuUBffBXXD1sCQuhaLbbkCWeYgrI1+qBOjlrrVtss=";
84       };
85     });
86     # pgadmin 6.15 is incompatible with the major flask-security-too update to 5.0.x
87     flask-security-too = prev.flask-security-too.overridePythonAttrs (oldAttrs: rec {
88       version = "4.1.5";
89       src = oldAttrs.src.override {
90         inherit version;
91         sha256 = "sha256-98jKcHDv/+mls7QVWeGvGcmoYOGCspxM7w5/2RjJxoM=";
92       };
93       propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [
94         final.pythonPackages.flask_mail
95         final.pythonPackages.pyqrcode
96       ];
97     });
98   });
102 pythonPackages.buildPythonApplication rec {
103   inherit pname version src;
105   # from Dockerfile
106   CPPFLAGS = "-DPNG_ARM_NEON_OPT=0";
108   format = "setuptools";
110   patches = [
111     # Expose setup.py for later use
112     ./expose-setup.py.patch
113   ];
115   postPatch = ''
116     # patching Makefile, so it doesn't try to build sphinx documentation here
117     # (will do so later)
118     substituteInPlace Makefile \
119       --replace 'LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html' "true"
121     # fix document which refers a non-existing document and fails
122     substituteInPlace docs/en_US/contributions.rst \
123       --replace "code_snippets" ""
124     patchShebangs .
126     # relax dependencies
127     sed 's|==|>=|g' -i requirements.txt
128     # don't use Server Mode (can be overridden later)
129     substituteInPlace pkg/pip/setup_pip.py \
130       --replace "req = req.replace('psycopg2', 'psycopg2-binary')" "req = req" \
131       --replace "builtins.SERVER_MODE = None" "builtins.SERVER_MODE = False"
132   '';
134   preBuild = ''
135     # Adapted from pkg/pip/build.sh
136     echo Creating required directories...
137     mkdir -p pip-build/pgadmin4/docs
139     # build the documentation
140     cd docs/en_US
141     sphinx-build -W -b html -d _build/doctrees . _build/html
143     # Build the clean tree
144     cd ../../web
145     cp -r * ../pip-build/pgadmin4
146     cd ../docs
147     cp -r * ../pip-build/pgadmin4/docs
148     for DIR in `ls -d ??_??/`
149     do
150       if [ -d ''${DIR}_build/html ]; then
151           mkdir -p ../pip-build/pgadmin4/docs/''${DIR}_build
152           cp -Rv ''${DIR}_build/html ../pip-build/pgadmin4/docs/''${DIR}_build
153       fi
154     done
155     cd ../
157     cp -r ${yarnDeps}/* pip-build/pgadmin4
159     echo Creating distro config...
160     echo HELP_PATH = \'../../docs/en_US/_build/html/\' > pip-build/pgadmin4/config_distro.py
161     echo MINIFY_HTML = False >> pip-build/pgadmin4/config_distro.py
163     echo Creating manifest...
164     echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
166     echo Building wheel...
167     cd pip-build
168     # copy non-standard setup.py to local directory
169     # so setuptools-build-hook can call it
170     cp -v ../pkg/pip/setup_pip.py setup.py
171   '';
173   nativeBuildInputs = with pythonPackages; [ cython pip sphinx ];
174   buildInputs = [
175     zlib
176     pythonPackages.wheel
177   ];
179   # tests need an own data, log directory
180   # and a working and correctly setup postgres database
181   # checks will be run through nixos/tests
182   doCheck = false;
184   # speaklater3 is seperate because when passing buildDeps
185   # to the test, it fails there due to a collision with speaklater
186   propagatedBuildInputs = buildDeps ++ [ pythonPackages.speaklater3 ];
188   passthru.tests = {
189     standalone = nixosTests.pgadmin4-standalone;
190     # regression and function tests of the package itself
191     package = import ../../../../nixos/tests/pgadmin4.nix { inherit pkgs buildDeps; pythonEnv = pythonPackages; };
192   };
194   meta = with lib; {
195     description = "Administration and development platform for PostgreSQL";
196     homepage = "https://www.pgadmin.org/";
197     license = licenses.mit;
198     changelog = "https://www.pgadmin.org/docs/pgadmin4/latest/release_notes_${lib.versions.major version}_${lib.versions.minor version}.html";
199     maintainers = with maintainers; [ gador ];
200     mainProgram = "pgadmin4";
201   };