summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorIliya Ivanov2021-04-26 16:56:41 +0300
committerIliya Ivanov2021-04-26 16:56:41 +0300
commit521ecb58e52974f619124a4fcd68cc3b2481f782 (patch)
tree628a57b353175ed75992beb0b2aa5e92efe0cd28
downloadaur-521ecb58e52974f619124a4fcd68cc3b2481f782.tar.gz
pgAdmin4 v5.2
-rw-r--r--.SRCINFO57
-rw-r--r--.gitignore7
-rw-r--r--PKGBUILD123
-rw-r--r--arch_additions.py31
-rw-r--r--config_distro.py2
-rw-r--r--config_local.py0
-rw-r--r--pgAdmin4.desktop11
-rw-r--r--pgAdmin4.py.patch28
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: