Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pgadmin4 for openSUSE:Factory 
checked in at 2023-10-30 22:10:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pgadmin4 (Old)
 and      /work/SRC/openSUSE:Factory/.pgadmin4.new.17445 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pgadmin4"

Mon Oct 30 22:10:11 2023 rev:23 rq:1121161 version:7.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/pgadmin4/pgadmin4.changes        2023-08-28 
17:14:16.858637868 +0200
+++ /work/SRC/openSUSE:Factory/.pgadmin4.new.17445/pgadmin4.changes     
2023-10-30 22:10:24.119368055 +0100
@@ -1,0 +2,127 @@
+Mon Oct 30 11:23:57 UTC 2023 - Antonio Larrosa <alarr...@suse.com>
+
+- Add obsoletes: pgadmin4-web
+
+-------------------------------------------------------------------
+Wed Oct 25 06:26:07 UTC 2023 - Antonio Larrosa <alarr...@suse.com>
+
+- Add a vendor.tar.xz source package with node modules that have to
+  be downloaded in the developer workstation since otherwise they
+  won't be able to get downloaded in the build service. 
+- Add an update-vendor.sh script that updates (actually, recreates)
+  the vendor.tar.xz package. This should be run manually with each
+  package update.
+- Remove obsoleted file pgadmin4.qt.conf.in which hasn't been used
+  at all for some time.
+- Add patch to set the environment variable EVENTLET_NO_GREENDNS
+  which fixes pgadmin4 to build successfully with eventlet 0.33.3,
+  httpcore 0.17.1 and httpx 0.24.0:
+  * fix-eventlet-select_epoll.patch
+- Merged pgadmin4-web subpackage into the main pgadmin4 package
+  which now installs the pgAdmin4 server.
+- Create new pgadmin4-desktop subpackage that includes a very small
+  python script I wrote that starts the pgadmin4 server in runtime
+  mode (as a regular user) and provides a system tray icon so users
+  can open new windows and quit the server with a UI since the
+  alternative (using the official pgAdmin4 runtime application
+  would require providing a full node.js modules tree and using
+  NW.js for the ui).
+- Fix .desktop file which was now moved to the pgadmin4-desktop
+  subpackage. The "Encoding" key is deprecated so it has been
+  removed, only one main category is now used in the Categories
+  key and the path to the icon was fixed.
+- Remove pgadmin4.qt.conf.in which is not used anymore
+
+-------------------------------------------------------------------
+Wed Oct 25 06:24:15 UTC 2023 - Antonio Larrosa <alarr...@suse.com>
+
+- Update to 7.8
+  * Supported Database Servers
+    - PostgreSQL: 12, 13, 14, 15, and 16
+    - EDB Advanced Server: 12, 13, 14 and 15
+  * Bundled PostgreSQL Utilities
+    - psql, pg_dump, pg_dumpall, pg_restore: 16.0
+  * New features
+    - Add support for foreign table's new functionality for PG 11
+      and above.
+    - Allow setting custom username for shared servers, with
+      default as username of server being shared.
+    - Add 'GENERATED ALWAYS AS..' option while creating column
+      constraints for Foreign Table.
+    - GUI representation of the system's activity using the
+      'system_stats' extension.
+    - Added 'load_balance_hosts' connection string parameter
+      for PG 16 and above.
+  * Housekeeping
+    - Use PG16 as the default PostgreSQL version.
+  * Bug fixes
+    - Fixed an issue in ERD tool where the downloaded images
+      have a few links cut.
+    - Fixed an issue where user was not able to assign new/old
+      columns as primary key once column with primary key is
+      deleted.
+    - Add support for setting prepare threshold in server
+      connection.
+    - Fixed an issue where the wrong message "Current database
+      has been moved or renamed" is displayed when debugging any
+      function.
+    - Fixed an issue where Processes tab displays wrong server
+      name in some scenario.
+    - Fix an issue where global/native keyboard shortcuts are
+      not working when any cell of data output grid has focus.
+    - Fixed query history slowness issue by storing query only for
+      those having certain threshold max length.
+    - Fix an issue where foreign table column name becomes "none"
+      if the user changes any column data type.
+    - Pin the cryptography version to fix PyO3 modules
+      initialisation error.
+    - Ensure that the backup works properly for PG 16 on the latest
+      docker image.
+    - Fixed an issue where the user is unable to select objects on
+      the backup dialog due to tree flickering.
+    - Fixed an issue where non-super PostgreSQL users are not able
+      to terminate their own connections from dashboard.
+    - Fix an issue where scale in columns is not allowed to have
+      value as 0 or below.
+    - Fix an issue in graphical explain plan where query tool
+      crashes when the plan has parallel workers details and sort
+      node is clicked for details.
+    - Fix an issue where user login is not working if
+      username/email contains single quote in server mode.
+
+- Update to 7.7 
+  * Supported Database Servers
+    - PostgreSQL: 11, 12, 13, 14 and 15
+    - EDB Advanced Server: 11, 12, 13, 14 and 15
+  * Bundled PostgreSQL Utilities
+    - psql, pg_dump, pg_dumpall, pg_restore: 15.4
+  * New features
+    - Added support to select/deselect objects in the Backup
+      dialog.
+    - Added all the new options of the 'WITH' clause in the
+      subscription dialog.
+    - Added USING method while creating the table.
+    - Added compression method option while creating a column.
+    - Added Strategy, Locale Provider, ICU Locale, ICU Rules,
+      and OID options while creating a database.
+    - Added USING method while creating the materialized view.
+    - Add support for additional ID token claim checks for
+      OAuth 2 authentication.
+  * Housekeeping
+    - Added the ‘data type’ column in the properties tab of
+      the Columns collection node.
+  * Bug fixes
+    - Fix an issue where user is not able to change the
+      password when SMTP is not configured.
+    - Ensure user is redirected to login page after failed login.
+    - Ensure that Materialized view size fields in "Statistics"
+      should be human-readable.
+    - Fix an issue where changing the password shows success but
+      the new password is not working.
+    - Fix an issue where login form doesn't appear if internal
+      auth source is removed.
+    - Fix a security related issue where an authenticated user can
+      run remote command using validate binary path API
+      (CVE-2023-5002, boo#1215603).
+
+-------------------------------------------------------------------

Old:
----
  pgadmin4-7.6.tar.gz
  pgadmin4-7.6.tar.gz.asc
  pgadmin4.desktop.in
  pgadmin4.qt.conf.in

New:
----
  fix-eventlet-select_epoll.patch
  pgadmin4-7.8.tar.gz
  pgadmin4-7.8.tar.gz.asc
  pgadmin4-desktop
  pgadmin4.desktop
  update-vendor.sh
  vendor.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pgadmin4.spec ++++++
--- /var/tmp/diff_new_pack.rr35xK/_old  2023-10-30 22:10:26.683462649 +0100
+++ /var/tmp/diff_new_pack.rr35xK/_new  2023-10-30 22:10:26.683462649 +0100
@@ -22,7 +22,9 @@
 %global python3_azure_mgmt_rdbms_min_version 10.1
 %global python3_azure_mgmt_resource_min_version 23.0
 %global python3_azure_mgmt_subscription_min_version 3.1
+%global python3_bcrypt_min_version 4.0
 %global python3_boto3_min_version 1.26
+%global python3_botocore_min_version 1.31
 %global python3_flask_babel_min_version 3.1.0
 %global python3_flask_compress_min_version 1.4.0
 %global python3_flask_gravatar_min_version 0.5.0
@@ -48,7 +50,6 @@
 %global python3_python_dateutil_min_version 2.8.0
 %global python3_pytz_min_version 2023.0
 %global python3_qrcode_min_version 7.0
-%global python3_speaklater_min_version 1.3
 %global python3_sqlalchemy_min_version 2.0
 %global python3_sqlparse_min_version 0.3.0
 %global python3_sshtunnel_min_version 0.1.5
@@ -57,34 +58,39 @@
 %global python3_wtforms_min_version 3.0
 
 %global        pgadmin4instdir %{_libdir}/pgadmin4-%{version}
-%global        pgadmin4homedir /var/lib/pgadmin
+%global        pgadmin4homedir %{_localstatedir}/lib/pgadmin
 %global user_group_name pgadmin
 
 Name:           pgadmin4
-Version:        7.6
+Version:        7.8
 Release:        0
 Summary:        Management tool for PostgreSQL
 License:        PostgreSQL
 Group:          Productivity/Databases/Tools
 URL:            http://www.pgadmin.org
 Source0:        
https://download.postgresql.org/pub/pgadmin/%{name}/v%{version}/source/%{name}-%{version}.tar.gz
-Source10:       
https://download.postgresql.org/pub/pgadmin/%{name}/v%{version}/source/%{name}-%{version}.tar.gz.asc
-# https://www.pgadmin.org/download/pgadmin-4-source-code/
-Source11:       %{name}.keyring
 Source1:        %{name}.conf.in
 Source2:        %{name}.service.in
 Source3:        %{name}.tmpfiles.d
-Source4:        %{name}.desktop.in
-Source6:        %{name}.qt.conf.in
+Source4:        %{name}.desktop
 Source7:        %{name}.uwsgi.in
 Source8:        README.SUSE
 Source9:        README.SUSE.uwsgi.in
+Source10:       
https://download.postgresql.org/pub/pgadmin/%{name}/v%{version}/source/%{name}-%{version}.tar.gz.asc
+# https://www.pgadmin.org/download/pgadmin-4-source-code/
+Source11:       %{name}.keyring
+Source12:       vendor.tar.xz
+Source13:       %{name}-desktop
+Source99:       update-vendor.sh
 Patch0:         use-os-makedirs.patch
 Patch1:         fix-python3-crypto-call.patch
 Patch2:         support-new-azure-mgmt-rdbms.patch
 Patch3:         support-new-werkzeug.patch
 Patch4:         support-new-flask.patch
+Patch5:         fix-eventlet-select_epoll.patch
 BuildRequires:  fdupes
+BuildRequires:  hicolor-icon-theme
+BuildRequires:  optipng
 BuildRequires:  python-rpm-macros
 BuildRequires:  python3-Authlib >= %{python3_authlib_min_version}
 BuildRequires:  python3-Flask >= %{python3_flask_min_version}
@@ -99,7 +105,6 @@
 BuildRequires:  python3-Flask-Security-Too >= 
%{python3_flask_security_too_min_version}
 BuildRequires:  python3-Flask-SocketIO >= %{python3_flask_socketio_min_version}
 BuildRequires:  python3-Flask-WTF >= %{python3_flask_wtf_min_version}
-BuildRequires:  python3-Pillow >= %{python3_pillow_min_version}
 BuildRequires:  python3-SQLAlchemy >= %{python3_sqlalchemy_min_version}
 BuildRequires:  python3-WTForms >= %{python3_wtforms_min_version}
 BuildRequires:  python3-Werkzeug >= %{python3_werkzeug_min_version}
@@ -107,7 +112,9 @@
 BuildRequires:  python3-azure-mgmt-rdbms >= 
%{python3_azure_mgmt_rdbms_min_version}
 BuildRequires:  python3-azure-mgmt-resource >= 
%{python3_azure_mgmt_resource_min_version}
 BuildRequires:  python3-azure-mgmt-subscription >= 
%{python3_azure_mgmt_subscription_min_version}
+BuildRequires:  python3-bcrypt >= %{python3_bcrypt_min_version}
 BuildRequires:  python3-boto3 >= %{python3_boto3_min_version}
+BuildRequires:  python3-botocore >= %{python3_botocore_min_version}
 BuildRequires:  python3-cryptography
 BuildRequires:  python3-eventlet
 BuildRequires:  python3-google-api-python-client >= 
%{python3_google_api_python_client_min_version}
@@ -123,8 +130,6 @@
 BuildRequires:  python3-python-dateutil >= 
%{python3_python_dateutil_min_version}
 BuildRequires:  python3-pytz >= %{python3_pytz_min_version}
 BuildRequires:  python3-qrcode >= %{python3_qrcode_min_version}
-BuildRequires:  python3-selenium
-BuildRequires:  python3-speaklater >= %{python3_speaklater_min_version}
 BuildRequires:  python3-sqlparse >= %{python3_sqlparse_min_version}
 BuildRequires:  python3-sshtunnel >= %{python3_sshtunnel_min_version}
 BuildRequires:  python3-testscenarios
@@ -132,26 +137,8 @@
 BuildRequires:  python3-user-agents >= %{python3_user_agents_min_version}
 BuildRequires:  python3-wheel
 BuildRequires:  systemd-rpm-macros
-Requires:       %{name}-web = %{version}
+BuildRequires:  yarn
 Requires:       python3 >= 3.7
-BuildArch:      noarch
-%{?systemd_requires}
-
-%description
-pgAdmin 4 is a rewrite of the pgAdmin3 management tool for the
-PostgreSQL database. It is written as a web application in Python,
-using jQuery and Bootstrap for the client side processing and UI. On
-the server side, Flask is being utilised.
-
-This variant is a Qt-based runtime application intended to allow the
-standalone use on a workstation - it is essentially a browser and
-Python interpretor in one package which will be capable of hosting
-the Python application and presenting it to the user as a desktop
-application.
-
-%package web
-Summary:        Web package for pgAdmin4
-Group:          Productivity/Databases/Tools
 Requires:       python3-Authlib >= %{python3_authlib_min_version}
 Requires:       python3-Flask >= %{python3_flask_min_version}
 Requires:       python3-Flask-Babel >= %{python3_flask_babel_min_version}
@@ -165,7 +152,6 @@
 Requires:       python3-Flask-Security-Too >= 
%{python3_flask_security_too_min_version}
 Requires:       python3-Flask-SocketIO >= %{python3_flask_socketio_min_version}
 Requires:       python3-Flask-WTF >= %{python3_flask_wtf_min_version}
-Requires:       python3-Pillow >= %{python3_pillow_min_version}
 Requires:       python3-SQLAlchemy >= %{python3_sqlalchemy_min_version}
 Requires:       python3-WTForms >= %{python3_wtforms_min_version}
 Requires:       python3-Werkzeug >= %{python3_werkzeug_min_version}
@@ -173,7 +159,9 @@
 Requires:       python3-azure-mgmt-rdbms >= 
%{python3_azure_mgmt_rdbms_min_version}
 Requires:       python3-azure-mgmt-resource >= 
%{python3_azure_mgmt_resource_min_version}
 Requires:       python3-azure-mgmt-subscription >= 
%{python3_azure_mgmt_subscription_min_version}
+Requires:       python3-bcrypt >= %{python3_bcrypt_min_version}
 Requires:       python3-boto3 >= %{python3_boto3_min_version}
+Requires:       python3-botocore >= %{python3_botocore_min_version}
 Requires:       python3-cryptography
 Requires:       python3-eventlet
 Requires:       python3-google-api-python-client >= 
%{python3_google_api_python_client_min_version}
@@ -188,17 +176,22 @@
 Requires:       python3-python-dateutil >= 
%{python3_python_dateutil_min_version}
 Requires:       python3-pytz >= %{python3_pytz_min_version}
 Requires:       python3-qrcode >= %{python3_qrcode_min_version}
-Requires:       python3-speaklater >= %{python3_speaklater_min_version}
 Requires:       python3-sqlparse >= %{python3_sqlparse_min_version}
 Requires:       python3-sshtunnel >= %{python3_sshtunnel_min_version}
 Requires:       python3-urllib3 < 2
 Requires:       python3-user-agents >= %{python3_user_agents_min_version}
-Recommends:     python3-mod_wsgi
+Suggests:       python3-mod_wsgi
 Suggests:       %{name}-doc
+Recommends:     %{name}-desktop
+Obsoletes:      %{name}-web < %{version}
+%{?systemd_requires}
+BuildArch:      noarch
 
-%description web
+%description
 pgAdmin 4 is a rewrite of the pgAdmin3 management tool for the
-PostgreSQL database.
+PostgreSQL database. It is written as a web application in Python,
+using jQuery and Bootstrap for the client side processing and UI. On
+the server side, Flask is being utilised.
 
 This package contains the required files to run pgAdmin4 as a web application
 
@@ -215,7 +208,7 @@
 %package web-uwsgi
 Summary:        Pgamdin4 - uwsgi configuration
 Group:          Productivity/Networking/Web/Utilities
-Requires:       pgadmin4-web
+Requires:       pgadmin4
 Requires:       uwsgi
 
 %description web-uwsgi
@@ -223,23 +216,62 @@
 
 This package holds the uwsgi configuration.
 
+%package desktop
+Summary:        Desktop application for pgAdmin4
+Group:          Documentation/HTML
+Requires:       %{name}
+Requires:       python3-PyQt6
+
+%description desktop
+pgAdmin 4 is a rewrite of the pgAdmin3 management tool for the
+PostgreSQL database.
+
+This package provides a small python script that can be used
+to start pgAdmin4 as a regular user and provides a simple ui
+as a system tray icon to open more windows or quit.
+
+Note that his script is not related to the official pgAdmin4
+runtime application and is NOT supported by the pgAdmin project
+but only provided for convenience.
+
 %prep
 %autosetup -p1
 
 sed -e 's@PYTHONSITELIB@%{python3_sitelib}@g' <%{SOURCE1} > %{name}.conf
 sed -e 's@PYTHONDIR@%{_bindir}/python3@g' -e 
's@PYTHONSITELIB@%{python3_sitelib}@g' < %{SOURCE2} > %{name}.service
 sed -e 's@PYTHONDIR@%{_bindir}/python3@g' -e 
's@PYTHONSITELIB@%{python3_sitelib}@g' < %{SOURCE4} > %{name}.desktop
-sed -e 's@PYTHONSITELIB64@%{python3_sitearch}@g' -e 
's@PYTHONSITELIB@%{python3_sitelib}@g' <%{SOURCE6} > %{name}.qt.conf
 sed -e 's@PYTHONSITELIB@%{python3_sitelib}@g' <%{SOURCE7} > %{name}.uwsgi
 sed -e 's@PYTHONSITELIB@%{python3_sitelib}@g' <%{SOURCE9} > README.SUSE.uwsgi
 
+# speaklater isn't really used
+sed -i -e 's/^speaklater.*//' requirements.txt
+
 cp %{SOURCE8} .
 cp %{SOURCE9} .
+
 # rpmlint
 chmod -x docs/en_US/theme/pgadmin4/static/style.css
 chmod -x docs/en_US/theme/pgadmin4/theme.conf
+# This package is run using the interpreter so it doesn't need the executable 
bit set
+chmod -x web/pgadmin/misc/bgprocess/process_executor.py
+chmod -x web/pgadmin/static/fonts/*.ttf
+
+# Uncompress the vendor sources
+tar xvfJ %{SOURCE12}
+# Use the system optipng, not the one built when creating the vendor package 
in the developer workstation
+ln -s %{_bindir}/optipng web/node_modules/optipng-bin/vendor/optipng
+
+# Do not use env as script interpreter
+find web/node_modules -type f -executable -exec sed -i -e '1{s,^#! 
*/usr/bin/env \(node\|python3|bash\),#!%{_bindir}/\1,}' "{}" \;
+find web/pgacloud -type f -executable -exec sed -i -e '1{s,^#! */usr/bin/env 
\(node\|python3\),#!%{_bindir}/\1,}' "{}" \;
+
+rm web/regression/.gitignore
 
 %build
+make bundle
+rm -Rf web/node_modules web/yarn.lock
+
+export EVENTLET_NO_GREENDNS='yes'
 mkdir -p pip-build/pgadmin4
 cp -a web/* pip-build/pgadmin4
 echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
@@ -278,11 +310,6 @@
 install -d -m 0755 %{buildroot}%{_sysconfdir}/pgadmin/
 echo "# SERVER_MODE = True" > 
%{buildroot}%{_sysconfdir}/pgadmin/config_system.py
 
-# Install QT conf file
-# This directory will/may change in future releases.
-install -d "%{buildroot}%{_sysconfdir}/xdg/pgadmin/"
-install -m 0644 -p %{name}.qt.conf 
%{buildroot}%{_sysconfdir}/xdg/pgadmin/pgadmin4.conf
-
 # Install unit file/init script
 # This is only for systemd supported distros:
 install -d %{buildroot}%{_unitdir}
@@ -295,32 +322,42 @@
 chmod -x %{buildroot}%{_docdir}/%{name}-docs/en_US/images/*
 mkdir -p %{buildroot}%{_sbindir}
 ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcpgadmin4
-%fdupes %{buildroot}%{_prefix}
 
 install -d -m 0755 %{buildroot}%{pgadmin4homedir}
 install -d -m 0755 %{buildroot}%{pgadmin4homedir}/storage
 install -d -m 0700 %{buildroot}%{pgadmin4homedir}/sessions
+install -d -m 0755 %{buildroot}%{_localstatedir}/log/pgadmin
 
 install -d -m 0755 %{buildroot}%{_sysconfdir}/uwsgi/vassals
 install -m 0644 %{name}.uwsgi 
%{buildroot}%{_sysconfdir}/uwsgi/vassals/pgadmin4.ini
 
-##%check
+install -d -m 0755 %{buildroot}%{_datadir}/icons/hicolor/256x256/apps
+install -m 0644 web/pgadmin/static/img/logo-256.png 
%{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pgadmin4.png
+
+install -d -m 0755 %{buildroot}%{python3_sitelib}/%{name}/assets
+install -m 0644 ./runtime/assets/welcome_logo.svg 
%{buildroot}%{python3_sitelib}/%{name}/assets/welcome_logo.svg
+
+install -m 0755 %{SOURCE13} %{buildroot}%{_bindir}
+
+%fdupes %{buildroot}%{python3_sitelib}
+
+##%% check
 ## Requires Postgres running
-##PYTHONPATH=%{buildroot}%{python3_sitelib} python3 -B 
web/regression/runtests.py --exclude feature_tests
+##PYTHONPATH=%%{buildroot}%%{python3_sitelib} python3 -B 
web/regression/runtests.py --exclude feature_tests
 
-%pre web
+%pre
 /usr/sbin/groupadd -r %{user_group_name} &>/dev/null || :
 /usr/sbin/useradd  -g %{user_group_name} -s /bin/false -r -c "%{name}" -d 
%{pgadmin4homedir} %{user_group_name} &>/dev/null || :
 %service_add_pre %{name}.service
 
-%post web
+%post
 %service_add_post %{name}.service
 %tmpfiles_create %{_tmpfilesdir}/%{name}.conf
 
-%preun web
+%preun
 %service_del_preun %{name}.service
 
-%postun web
+%postun
 chown -R %{user_group_name}:%{user_group_name} %{pgadmin4homedir}
 %service_del_postun %{name}.service
 
@@ -329,12 +366,7 @@
 %doc README.md README.SUSE
 %license LICENSE
 %{_bindir}/pgadmin4
-%{_datadir}/applications/%{name}.desktop
-%dir %{_sysconfdir}/xdg/pgadmin
-%config %{_sysconfdir}/xdg/pgadmin/pgadmin4.conf
 
-%files web
-%defattr(-,root,root,-)
 %dir %{_sysconfdir}/apache2
 %dir %{_sysconfdir}/apache2/conf.d
 %config(noreplace) %{_sysconfdir}/apache2/conf.d/%{name}.conf
@@ -355,6 +387,7 @@
 %dir %{pgadmin4homedir}
 %dir %{pgadmin4homedir}/storage
 %attr(700,%{user_group_name},%{user_group_name}) %dir 
%{pgadmin4homedir}/sessions
+%dir %{_localstatedir}/log/pgadmin
 
 %files doc
 %defattr(-,root,root,-)
@@ -368,3 +401,9 @@
 %dir %{_sysconfdir}/uwsgi/vassals
 %config (noreplace) %{_sysconfdir}/uwsgi/vassals/pgadmin4.ini
 
+%files desktop
+%defattr(-,root,root,-)
+%{_bindir}/pgadmin4-desktop
+%{_datadir}/applications/%{name}.desktop
+%{_datadir}/icons/hicolor/256x256/apps/pgadmin4.png
+

++++++ README.SUSE.uwsgi.in ++++++
--- /var/tmp/diff_new_pack.rr35xK/_old  2023-10-30 22:10:26.735464567 +0100
+++ /var/tmp/diff_new_pack.rr35xK/_new  2023-10-30 22:10:26.739464715 +0100
@@ -1,13 +1,13 @@
 To configure pgadmin with Apache and uwsgi, just add the follwing lines to a 
vhost:
 
     ProxyPass /pgadmin unix:/run/uwsgi/uwsgi-pgadmin.sock|uwsgi://localhost/
-    <Directory PYTHONSITELIB/pgadmin4-web/>
+    <Directory PYTHONSITELIB/pgadmin4/>
         Require all granted
     </Directory>
 
 Note that you have to run once `pgadmin4` from the command line to set the 
master password
 by executing:
 
-    /usr/bin/python3 PYTHONSITELIB/pgadmin4-web/pgAdmin4.py
+    /usr/bin/python3 PYTHONSITELIB/pgadmin4/pgAdmin4.py
 
 

++++++ fix-eventlet-select_epoll.patch ++++++
pgAdmin4 fails to build with eventlet 0.33.3, httpcore 0.17.1 and httpx 0.24.0
with the error:

[   12s] + python3 ../pkg/pip/setup_pip.py bdist_wheel
[   13s] Traceback (most recent call last):
[   13s]   File 
"/home/abuild/rpmbuild/BUILD/pgadmin4-7.6/pip-build/../pkg/pip/setup_pip.py", 
line 56, in <module>
[   13s]     import config
[   13s]   File 
"/home/abuild/rpmbuild/BUILD/pgadmin4-7.6/pip-build/../web/config.py", line 32, 
in <module>
[   13s]     from pgadmin.utils import env, IS_WIN, fs_short_path
[   13s]   File 
"/home/abuild/rpmbuild/BUILD/pgadmin4-7.6/web/pgadmin/__init__.py", line 25, in 
<module>
[   13s]     from flask_socketio import SocketIO
[   13s]   File "/usr/lib/python3.11/site-packages/flask_socketio/__init__.py", 
line 9, in <module>
[   13s]     from socketio import socketio_manage  # noqa: F401
[   13s]     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[   13s]   File "/usr/lib/python3.11/site-packages/socketio/__init__.py", line 
9, in <module>
[   13s]     from .zmq_manager import ZmqManager
[   13s]   File "/usr/lib/python3.11/site-packages/socketio/zmq_manager.py", 
line 5, in <module>
[   13s]     import eventlet.green.zmq as zmq
[   13s]   File "/usr/lib/python3.11/site-packages/eventlet/__init__.py", line 
17, in <module>
[   13s]     from eventlet import convenience
[   13s]   File "/usr/lib/python3.11/site-packages/eventlet/convenience.py", 
line 7, in <module>
[   13s]     from eventlet.green import socket
[   13s]   File "/usr/lib/python3.11/site-packages/eventlet/green/socket.py", 
line 21, in <module>
[   13s]     from eventlet.support import greendns
[   13s]   File 
"/usr/lib/python3.11/site-packages/eventlet/support/greendns.py", line 79, in 
<module>
[   13s]     setattr(dns, pkg, import_patched('dns.' + pkg))
[   13s]                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[   13s]   File 
"/usr/lib/python3.11/site-packages/eventlet/support/greendns.py", line 61, in 
import_patched
[   13s]     return patcher.import_patched(module_name, **modules)
[   13s]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[   13s]   File "/usr/lib/python3.11/site-packages/eventlet/patcher.py", line 
132, in import_patched
[   13s]     return inject(
[   13s]            ^^^^^^^
[   13s]   File "/usr/lib/python3.11/site-packages/eventlet/patcher.py", line 
109, in inject
[   13s]     module = __import__(module_name, {}, {}, 
module_name.split('.')[:-1])
[   13s]              
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[   13s]   File "/usr/lib/python3.11/site-packages/dns/asyncquery.py", line 38, 
in <module>
[   13s]     from dns.query import (
[   13s]   File "/usr/lib/python3.11/site-packages/dns/query.py", line 63, in 
<module>
[   13s]     import httpcore
[   13s]   File "/usr/lib/python3.11/site-packages/httpcore/__init__.py", line 
1, in <module>
[   13s]     from ._api import request, stream
[   13s]   File "/usr/lib/python3.11/site-packages/httpcore/_api.py", line 5, 
in <module>
[   13s]     from ._sync.connection_pool import ConnectionPool
[   13s]   File "/usr/lib/python3.11/site-packages/httpcore/_sync/__init__.py", 
line 1, in <module>
[   13s]     from .connection import HTTPConnection
[   13s]   File 
"/usr/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 12, in 
<module>
[   13s]     from .._synchronization import Lock
[   13s]   File 
"/usr/lib/python3.11/site-packages/httpcore/_synchronization.py", line 13, in 
<module>
[   13s]     import trio
[   13s]   File "/usr/lib/python3.11/site-packages/trio/__init__.py", line 18, 
in <module>
[   13s]     from ._core import (
[   13s]   File "/usr/lib/python3.11/site-packages/trio/_core/__init__.py", 
line 27, in <module>
[   13s]     from ._run import (
[   13s]   File "/usr/lib/python3.11/site-packages/trio/_core/_run.py", line 
2452, in <module>
[   13s]     from ._io_epoll import EpollIOManager as TheIOManager
[   13s]   File "/usr/lib/python3.11/site-packages/trio/_core/_io_epoll.py", 
line 188, in <module>
[   13s]     class EpollIOManager:
[   13s]   File "/usr/lib/python3.11/site-packages/trio/_core/_io_epoll.py", 
line 189, in EpollIOManager
[   13s]     _epoll = attr.ib(factory=select.epoll)
[   13s]                              ^^^^^^^^^^^^
[   13s] AttributeError: module 'eventlet.green.select' has no attribute 'epoll'
[   13s] error: Bad exit status from /var/tmp/rpm-tmp.ElnKCg (%build)

Setting the environment variable EVENTLET_NO_GREENDNS works around
this while the upstream issue is fixed:

https://github.com/eventlet/eventlet/issues/805

Index: pgadmin4-7.8/web/pgAdmin4.py
===================================================================
--- pgadmin4-7.8.orig/web/pgAdmin4.py
+++ pgadmin4-7.8/web/pgAdmin4.py
@@ -20,6 +20,7 @@ if sys.version_info < (3, 4):
                        'or later.')
 import builtins
 import os
+os.environ['EVENTLET_NO_GREENDNS'] = 'yes'
 
 # We need to include the root directory in sys.path to ensure that we can
 # find everything we need when running in the standalone runtime.

++++++ pgadmin4-7.6.tar.gz -> pgadmin4-7.8.tar.gz ++++++
/work/SRC/openSUSE:Factory/pgadmin4/pgadmin4-7.6.tar.gz 
/work/SRC/openSUSE:Factory/.pgadmin4.new.17445/pgadmin4-7.8.tar.gz differ: char 
18, line 1

++++++ pgadmin4-desktop ++++++
#!/usr/bin/python3
#
# This is a small script that tries to replace pgadmin4-runtime as
# a desktop version of pgadmin4.

# pgadmin4-runtime uses NW.js (which is based on Chromium and Node.js) which
# makes it hard to package in a standard way.
# pgadmin4-desktop tries to be a simple replacement which just runs pgadmin4
# in runtime mode but uses Qt6 for the GUI in order to show an icon in the
# system tray and provide two options: open a new browser window with pgAdmin
# and quit the application.
#
# This script is released under the PostgreSQL License.
# (C) 2023 Antonio Larrosa <alarr...@suse.com>

import subprocess
import os
import os.path
import uuid
import socket
import time
import sys
import fcntl
from threading import Thread, Timer
from PyQt6.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QSplashScreen
from PyQt6.QtGui import QIcon, QAction, QPixmap, QImage, QPalette, QPainter
from PyQt6.QtCore import QTimer, Qt


class PGAdminDesktop(QApplication):
    def __init__(self):
        super().__init__(sys.argv)
        self.environ = os.environ
        self.pgadmin_process = None
        self.url = None

        self.setQuitOnLastWindowClosed(False)
        self.aboutToQuit.connect(self.cleanup)
        self.create_ui()

        pixmap = self.load_splash_pixmap()
        if pixmap:
            self.splash = QSplashScreen(pixmap)
            self.splash.showMessage("Starting pgAdmin.", 
Qt.AlignmentFlag.AlignBottom)
            self.splash.show()
        else:
            self.splash = None

        self.run_pgadmin_server()
        QTimer.singleShot(500, self.open_pgadmin)

    def load_splash_pixmap(self):
        paths = [path + '/pgadmin4/assets/welcome_logo.svg' for path in 
sys.path]
        paths = [path for path in paths if os.path.exists(path)]
        if not paths:
            return None
        return QPixmap(paths[0])

    def run_pgadmin_server(self):
        if 'PGADMIN_INT_KEY' not in self.environ:
            self.environ['PGADMIN_INT_KEY'] = str(uuid.uuid4())

        if 'PGADMIN_INT_PORT' not in self.environ:
            self.environ['PGADMIN_INT_PORT'] = '5051'
 
        self.environ['PGADMIN_SERVER_MODE'] = 'OFF'
        self.pgadmin_process = subprocess.Popen(['pgadmin4'],
                                                env=self.environ, shell=True)

    def create_ui(self):
        icon = QIcon.fromTheme("pgadmin4")
        self.tray = QSystemTrayIcon()
        self.tray.setIcon(icon)
        self.tray.setVisible(True)

        menu = QMenu()

        self.title = QAction("pgAdmin")
        self.title.setEnabled(False)
        menu.addAction(self.title)
        menu.addSeparator()

        self.openPGAdminAction = QAction("New Window")
        menu.addAction(self.openPGAdminAction)
        self.openPGAdminAction.triggered.connect(self.open_pgadmin)

        self.quitAction = QAction("Quit")
        menu.addAction(self.quitAction)
        self.quitAction.triggered.connect(self.quit)

        self.tray.setContextMenu(menu)

    def open_pgadmin_task(self):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        result = sock.connect_ex(('127.0.0.1',
                                  int(self.environ['PGADMIN_INT_PORT'])))

        c = 0
        while result != 0 and c < 15:
            time.sleep(1)
            result = sock.connect_ex(('127.0.0.1',
                                      int(self.environ['PGADMIN_INT_PORT'])))
            c += 1
            dots = "." * (c % 3 + 1)
            self.openPGAdminAction.setText("Opening pgAdmin" + dots)
            if self.splash and not self.splash.isHidden():
                self.splash.showMessage("Starting pgAdmin" + dots, 
Qt.AlignmentFlag.AlignBottom)


        if result == 0:
            if self.splash:
                self.splash.hide()
            port = self.environ['PGADMIN_INT_PORT']
            key = self.environ['PGADMIN_INT_KEY']
            subprocess.run(["xdg-open", f"http://127.0.0.1:{port}/?key={key}";])
        else:
            error_msg = 'Timeout waiting for pgAdmin to start. Exiting...' 
            print(error_msg)
            self.splash.showMessage(error_msg, Qt.AlignmentFlag.AlignBottom)
            QTimer.singleShot(10000, self.quit)


        self.openPGAdminAction.setText("New Window")
        self.openPGAdminAction.setEnabled(True)

    def open_pgadmin(self):
        self.open_pgadmin_thread = Thread(target=self.open_pgadmin_task)
        self.openPGAdminAction.setText("Opening pgAdmin...")
        self.openPGAdminAction.setEnabled(False)
        self.open_pgadmin_thread.start()

    def cleanup(self):
        self.pgadmin_process.kill()


if __name__ == '__main__':
    app = PGAdminDesktop()
    sys.exit(app.exec())

++++++ pgadmin4.conf.in ++++++
--- /var/tmp/diff_new_pack.rr35xK/_old  2023-10-30 22:10:26.847468699 +0100
+++ /var/tmp/diff_new_pack.rr35xK/_new  2023-10-30 22:10:26.847468699 +0100
@@ -7,9 +7,9 @@
 
 <IfDefine PGADMIN>
 WSGIDaemonProcess pgadmin processes=1 threads=25
-WSGIScriptAlias /pgadmin4 PYTHONSITELIB/pgadmin4-web/pgAdmin4.wsgi
+WSGIScriptAlias /pgadmin4 PYTHONSITELIB/pgadmin4/pgAdmin4.wsgi
 
-<Directory PYTHONSITELIB/pgadmin4-web/>
+<Directory PYTHONSITELIB/pgadmin4/>
        WSGIProcessGroup pgadmin
        WSGIApplicationGroup %{GLOBAL}
        <IfModule mod_authz_core.c>

++++++ pgadmin4.desktop ++++++
[Desktop Entry]
Name=pgAdmin 4
Exec=/usr/bin/pgadmin4-desktop
Icon=pgadmin4
Type=Application
Categories=Development;Database;GUIDesigner;
MimeType=text/html
Comment=Management tool for PostgreSQL
Keywords=database;db;sql;query;administration;development;


++++++ pgadmin4.service.in ++++++
--- /var/tmp/diff_new_pack.rr35xK/_old  2023-10-30 22:10:26.891470322 +0100
+++ /var/tmp/diff_new_pack.rr35xK/_new  2023-10-30 22:10:26.895470470 +0100
@@ -18,7 +18,7 @@
 
 User=pgadmin
 Group=pgadmin
-ExecStart=PYTHONDIR PYTHONSITELIB/pgadmin4-web/pgAdmin4.py
+ExecStart=PYTHONDIR PYTHONSITELIB/pgadmin4/pgAdmin4.py
 ExecReload=/bin/kill -HUP $MAINPID
 KillMode=mixed
 KillSignal=SIGINT

++++++ pgadmin4.uwsgi.in ++++++
--- /var/tmp/diff_new_pack.rr35xK/_old  2023-10-30 22:10:26.923471503 +0100
+++ /var/tmp/diff_new_pack.rr35xK/_new  2023-10-30 22:10:26.927471651 +0100
@@ -13,6 +13,6 @@
 chown-socket = wwwrun:www
 
 plugin = python3
-chdir = PYTHONSITELIB/pgadmin4-web/
+chdir = PYTHONSITELIB/pgadmin4/
 mount = /=pgAdmin4:app
 

++++++ update-vendor.sh ++++++
#!/bin/bash
#
# This script updates the vendor source package.
# It should be run in the developer system in each pgadmin version update
#
# -- Antonio Larrosa <alarr...@suse.com>
#

version=`grep ^Version: *.spec | sed -e "s/^Version: *//"`
if [ -d pgadmin4-$version ]; then
        echo "The directory pgadmin4-$version already exists. Please remove it 
in order to recreate it from scratch by running"
        echo "rm -Rf pgadmin4-$version"
        exit 1
fi

quilt setup pgadmin4.spec
pushd pgadmin4-$version
quilt push -a

# Build everything as documented by upstream
make install-node
## We can run make bundle in %build so let's keep the things we do outside obs 
at a minimum
#make bundle

# Remove binary files that are not needed and shouldn't be packaged in a noarch 
package
rm web/node_modules/ttf2woff2/build/Release/addon.node
rm web/node_modules/ttf2woff2/build/Release/obj.target/addon.node
rm web/node_modules/ttf2woff2/build/node_gyp_bins/python3
rm web/node_modules/mozjpeg/vendor/cjpeg
rm web/node_modules/optipng-bin/vendor/optipng

# Remove trash files
rm web/node_modules/console-control-strings/README.md~
rm web/node_modules/form-data/README.md.bak

# Remove development files
rm -Rf web/node_modules/ttf2woff2/build/Release/obj.target/addon/csrc
rm web/node_modules/nan/*.h
rm web/node_modules/ttf2woff2/csrc/*/*.h

# Fix files unnecessarily having the executable bit set
find web/node_modules -type f \( -iname *.md -o -iname LICEN[CS]E -o -iname 
*.html -o -iname *.json -o -iname *.css -o -iname *.ttf -o -iname *.png \) 
-exec chmod -x "{}" \;

tar cvfJ ../vendor.tar.xz web/node_modules 
web/pgadmin/misc/themes/pgadmin.themes.json web/pgadmin/static/js/generated/ 
web/yarn.lock
popd

Reply via email to