diff options
author | Iliya Ivanov | 2021-04-26 16:56:41 +0300 |
---|---|---|
committer | Iliya Ivanov | 2021-04-26 16:56:41 +0300 |
commit | 521ecb58e52974f619124a4fcd68cc3b2481f782 (patch) | |
tree | 628a57b353175ed75992beb0b2aa5e92efe0cd28 | |
download | aur-521ecb58e52974f619124a4fcd68cc3b2481f782.tar.gz |
pgAdmin4 v5.2
-rw-r--r-- | .SRCINFO | 57 | ||||
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | PKGBUILD | 123 | ||||
-rw-r--r-- | arch_additions.py | 31 | ||||
-rw-r--r-- | config_distro.py | 2 | ||||
-rw-r--r-- | config_local.py | 0 | ||||
-rw-r--r-- | pgAdmin4.desktop | 11 | ||||
-rw-r--r-- | pgAdmin4.py.patch | 28 |
8 files changed, 259 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..90d405a1a731 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,57 @@ +pkgbase = pgadmin4 + pkgdesc = Comprehensive design and management interface for PostgreSQL + pkgver = 5.2 + pkgrel = 1 + url = https://www.pgadmin.org/ + arch = x86_64 + license = custom + makedepends = python-html5lib + makedepends = python-sphinx + makedepends = python-testtools + depends = postgresql-libs + depends = hicolor-icon-theme + depends = python + depends = python-cheroot + depends = python-flask + depends = python-flask-gravatar + depends = python-flask-login + depends = python-flask-mail + depends = python-flask-migrate + depends = python-flask-sqlalchemy + depends = python-flask-wtf + depends = python-flask-compress + depends = python-passlib + depends = python-pytz + depends = python-simplejson + depends = python-six + depends = python-speaklater + depends = python-sqlparse + depends = python-wtforms + depends = python-flask-paranoid + depends = python-psutil + depends = python-psycopg2 + depends = python-dateutil + depends = python-sqlalchemy + depends = python-flask-security-too + depends = python-bcrypt + depends = python-cryptography + depends = python-sshtunnel + depends = python-ldap3 + depends = python-flask-babelex + depends = python-gssapi + source = https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v5.2/source/pgadmin4-5.2.tar.gz + source = https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v5.2/source/pgadmin4-5.2.tar.gz.asc + source = pgAdmin4.desktop + source = config_distro.py + source = config_local.py + source = arch_additions.py + validpgpkeys = E8697E2EEF76C02D3A6332778881B2A8210976F2 + sha512sums = ad68c41d91ce37ca3e2c959eab814ebf6e58947abef8afae5556de39026638f52f9b586151f82f7d7bc641b7e332c3a0d9aafe84b08fca4fb6c3ebfbd9f78f03 + sha512sums = SKIP + sha512sums = 642d538fe7eb26748ed9d9933f668b48234e0b7a5baccd198674a79cb9e3f5d8b31754bf05fb6af05e7e89374c05aec8b1e5eb98891ae1e87e4c226ee5d6f9ab + sha512sums = 16d00dc2095904a6b12da7039458f632873829ad98d4d7653eac5804032ba92097ccae4488d56467d0ea9bd64e2654a3dead73eb7924c947ff1737ff6e3b4745 + sha512sums = cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e + sha512sums = c8bcf9a38f2111b03032034e2cbe4942c07f9a76067c49ca3046da8a02c70c85e342297c3b864a5fa3d12fb2a276d6973bd81b4ef7576bd6aaa2e29ca983810f + +pkgname = pgadmin4 + diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..a370cf23371e --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +src/ +pkg/ +*.pkg.tar.xz +*.tar.gz +*.tar.gz.asc +.project +.settings diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..33cfcc604f7b --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,123 @@ +# Maintainer: Iliya Ivanov <i.ivanov@proforge.org> + +pkgname=pgadmin4 +pkgver=5.2 +pkgrel=1 +pkgdesc='Comprehensive design and management interface for PostgreSQL' +url='https://www.pgadmin.org/' +arch=('x86_64') +license=('custom') +depends=('postgresql-libs' 'hicolor-icon-theme' 'python' 'python-cheroot' + 'python-flask' 'python-flask-gravatar' 'python-flask-login' + 'python-flask-mail' 'python-flask-migrate' 'python-flask-sqlalchemy' + 'python-flask-wtf' 'python-flask-compress' 'python-passlib' 'python-pytz' + 'python-simplejson' 'python-six' 'python-speaklater' 'python-sqlparse' + 'python-wtforms' 'python-flask-paranoid' 'python-psutil' 'python-psycopg2' + 'python-dateutil' 'python-sqlalchemy' 'python-flask-security-too' + 'python-bcrypt' 'python-cryptography' 'python-sshtunnel' 'python-ldap3' + 'python-flask-babelex' 'python-gssapi') +makedepends=('python-html5lib' 'python-sphinx' 'python-testtools') +source=(https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v${pkgver}/source/${pkgname}-${pkgver}.tar.gz{,.asc} + pgAdmin4.desktop + config_distro.py + config_local.py + arch_additions.py) +validpgpkeys=('E8697E2EEF76C02D3A6332778881B2A8210976F2') # Package Manager (Package Signing Key) <packages@pgadmin.org> +sha512sums=('ad68c41d91ce37ca3e2c959eab814ebf6e58947abef8afae5556de39026638f52f9b586151f82f7d7bc641b7e332c3a0d9aafe84b08fca4fb6c3ebfbd9f78f03' + 'SKIP' + '642d538fe7eb26748ed9d9933f668b48234e0b7a5baccd198674a79cb9e3f5d8b31754bf05fb6af05e7e89374c05aec8b1e5eb98891ae1e87e4c226ee5d6f9ab' + '16d00dc2095904a6b12da7039458f632873829ad98d4d7653eac5804032ba92097ccae4488d56467d0ea9bd64e2654a3dead73eb7924c947ff1737ff6e3b4745' + 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e' + 'c8bcf9a38f2111b03032034e2cbe4942c07f9a76067c49ca3046da8a02c70c85e342297c3b864a5fa3d12fb2a276d6973bd81b4ef7576bd6aaa2e29ca983810f') + +prepare() { + cd ${pkgname}-${pkgver} + + patch -Np1 < ../../pgAdmin4.py.patch + + local PYTHONVERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" + + sed -E -i requirements.txt \ + -e '/cheroot>?=/d' \ + -e '/Flask>?=/d' \ + -e '/Flask-Gravatar>?=/d' \ + -e '/Flask-Login>?=/d' \ + -e '/Flask-Mail>?=/d' \ + -e '/Flask-Migrate>?=/d' \ + -e '/Flask-SQLAlchemy>?=/d' \ + -e '/Flask-WTF>?=/d' \ + -e '/Flask-Compress>?=/d' \ + -e '/passlib>?=/d' \ + -e '/pytz>?=/d' \ + -e '/simplejson>?=/d' \ + -e '/six>?=/d' \ + -e '/speaklater3>?=/d' \ + -e '/sqlparse>?=/d' \ + -e '/WTForms>?=/d' \ + -e '/Flask-Paranoid>?=/d' \ + -e '/psutil>?=/d' \ + -e '/psycopg2>?=/d' \ + -e '/python-dateutil>?=/d' \ + -e '/SQLAlchemy>?=/d' \ + -e '/Flask-Security-Too>?=/d' \ + -e '/bcrypt>?<?=/d' \ + -e '/cryptography>?<?=/d' \ + -e '/sshtunnel>?=/d' \ + -e '/ldap3>?=/d' \ + -e '/Flask-BabelEx>?<?=/d' \ + -e '/gssapi>?<?=/d' \ + -e '/^#.*/d' \ + -e '/^$/d' + + if [[ -s requirements.txt ]]; then + echo "ERROR: requirements.txt must be empty:" + cat requirements.txt + exit 1 + fi +} + +build() { + export LANG=en_US.UTF-8 + export LC_ALL=en_US.UTF-8 + export PGADMIN_PYTHON_DIR=/usr + + cd ${pkgname}-${pkgver} + # override doctree directory + make docs SPHINXOPTS='-d /tmp/' + + cd runtime +# yarn install +} + +package() { + cd ${pkgname}-${pkgver} + + install -dm 755 "${pkgdir}/usr/lib/pgadmin4" + cp -a docs web runtime "${pkgdir}/usr/lib/pgadmin4" + install -Dm 644 "${srcdir}"/config_{distro,local}.py -t "${pkgdir}/usr/lib/pgadmin4/web" + install -Dm 644 "${srcdir}"/arch_additions.py -t "${pkgdir}/usr/lib/pgadmin4/web" + + install -dm 755 "${pkgdir}/usr/share/icons/hicolor/"{'256x256/apps','48x48/apps','32x32/apps','16x16/apps'} + convert runtime/assets/pgAdmin4.png -resize 256x265 "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pgAdmin4.png" + convert runtime/assets/pgAdmin4.png -resize 48x48 "${pkgdir}/usr/share/icons/hicolor/48x48/apps/pgAdmin4.png" + convert runtime/assets/pgAdmin4.png -resize 32x32 "${pkgdir}/usr/share/icons/hicolor/32x32/apps/pgAdmin4.png" + convert runtime/assets/pgAdmin4.png -resize 16x16 "${pkgdir}/usr/share/icons/hicolor/16x16/apps/pgAdmin4.png" + install -Dm 644 "${srcdir}/pgAdmin4.desktop" -t "${pkgdir}/usr/share/applications" + +# install -D /dev/stdin "${pkgdir}/usr/bin/pgadmin4" <<END +#!/bin/sh +#cd /usr/lib/pgadmin4 +#exec runtime/pgAdmin4 "\$@" +#END + install -D /dev/stdin "${pkgdir}/usr/bin/pgadmin4" <<END +#!/bin/sh +cd /usr/lib/pgadmin4 +export PGADMIN_INT_PORT=\$(python -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'); +export PGADMIN_SERVER_MODE='OFF' +python web/pgAdmin4.py "\$@" +END + + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim: ts=2 sw=2 et: diff --git a/arch_additions.py b/arch_additions.py new file mode 100644 index 000000000000..bfcd407b17e4 --- /dev/null +++ b/arch_additions.py @@ -0,0 +1,31 @@ +import sys +import os +import psutil +import subprocess +from PyQt5 import QtCore, QtGui, QtWidgets + +class SystemTrayIcon(QtWidgets.QSystemTrayIcon): + + def __init__(self, icon, parent=None): + QtWidgets.QSystemTrayIcon.__init__(self, icon, parent) + self.menu = QtWidgets.QMenu(parent) + self.setContextMenu(self.menu) + +def setupTrayIcon(url): + qApp = QtWidgets.QApplication(sys.argv) + w = QtWidgets.QWidget() + trayIcon = SystemTrayIcon(QtGui.QIcon("/usr/lib/pgadmin4/web/pgAdmin4.png"), w) + trayIcon.menu.addAction("New pgAdmin4 window", lambda: subprocess.run(["xdg-open", url])) + trayIcon.menu.addAction("Exit server process", qApp.exit) + trayIcon.show() + print("Setup tray icon...") + qApp.exec() + +def checkRunning(): + for proc in psutil.process_iter(): + try: + if "pgadmin4.py" in " ".join(proc.cmdline()).lower() and os.getpid() != proc.pid: + print("pgAdmin4 server is already running...") + sys.exit() + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + pass diff --git a/config_distro.py b/config_distro.py new file mode 100644 index 000000000000..f5e13619c760 --- /dev/null +++ b/config_distro.py @@ -0,0 +1,2 @@ +SERVER_MODE = False +HELP_PATH = "/usr/lib/pgadmin4/docs/en_US/_build/html/" diff --git a/config_local.py b/config_local.py new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/config_local.py diff --git a/pgAdmin4.desktop b/pgAdmin4.desktop new file mode 100644 index 000000000000..361f5d7d2559 --- /dev/null +++ b/pgAdmin4.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=pgAdmin 4 +Exec=/usr/bin/pgadmin4 +Icon=pgAdmin4 +Type=Application +Categories=Application;Development;Database; +MimeType=text/html +DocPath=/usr/lib/pgadmin4/docs/en_US/_build/html/index.html +Comment=PostgreSQL Tools +Keywords=database;db;sql;query;administration;development; diff --git a/pgAdmin4.py.patch b/pgAdmin4.py.patch new file mode 100644 index 000000000000..2046f269f5a3 --- /dev/null +++ b/pgAdmin4.py.patch @@ -0,0 +1,28 @@ +--- a/web/pgAdmin4.py ++++ b/web/pgAdmin4.py + +@@ -140,7 +140,10 @@ + ########################################################################## + # The entry point + ########################################################################## ++import threading ++from arch_additions import setupTrayIcon, checkRunning + def main(): ++ checkRunning(); + # Set null device file path to stdout, stdin, stderr if they are None + for _name in ('stdin', 'stdout', 'stderr'): + if getattr(sys, _name) is None: +@@ -214,8 +217,11 @@ + server_name=config.APP_NAME) + try: + print("Using production server...") +- prod_server.start() +- except KeyboardInterrupt: ++ prod_server.prepare() ++ threading.Thread(target=prod_server.serve).start() ++ ++ setupTrayIcon("http://{}:{}".format(config.DEFAULT_SERVER, config.EFFECTIVE_SERVER_PORT)) ++ finally: + prod_server.stop() + + except IOError: |