Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de48d4ecda | ||
|
|
0d204d0554 | ||
|
|
37bdd22e24 | ||
|
|
2a43d1c939 | ||
|
|
c4f7a18ec5 | ||
|
|
fdc38f75f8 | ||
|
|
56d5cab13e | ||
|
|
bec47845be | ||
|
|
6dc5807192 | ||
|
|
ea085cd009 | ||
|
|
6fdb82dd76 | ||
|
|
a3e1a3672c | ||
|
|
8046c238d8 | ||
|
|
82730da392 | ||
|
|
fe2332f606 | ||
|
|
d26b63fdf5 | ||
|
|
770a0f27af | ||
|
|
ced002a6ad | ||
|
|
3aad58751a | ||
|
|
61a420c9fc | ||
|
|
8c662424b2 | ||
|
|
13ade4c0b2 | ||
|
|
1195f14327 | ||
|
|
65a35ab23d | ||
|
|
b31c8f78c5 | ||
|
|
82e6b57d04 | ||
|
|
1e4e00886a | ||
|
|
0fd7d0dedb | ||
|
|
0ebf78ca61 | ||
|
|
60c8e5fe05 | ||
|
|
1d68074a59 | ||
|
|
8723896da0 | ||
|
|
e4f17e5a6c | ||
|
|
454ba52c88 | ||
|
|
d5c0fac885 | ||
|
|
3f7683854b | ||
|
|
385148cf6e | ||
|
|
f207818afa | ||
|
|
1280cf5108 | ||
|
|
a5714903ac | ||
|
|
dd0c0cd3e1 | ||
|
|
51d3fe54f3 | ||
|
|
7c2b773ad1 | ||
|
|
f3a87de967 | ||
|
|
536191cef6 | ||
|
|
43d70de5bb | ||
|
|
6fab59a13c | ||
|
|
03f18d5242 | ||
|
|
66cddab4a4 | ||
|
|
3e9169b282 | ||
|
|
77fa10304b | ||
|
|
68bd329da9 | ||
|
|
14e40cedca | ||
|
|
6382f31f9a | ||
|
|
44496a300e | ||
|
|
08d250e5ef | ||
|
|
f07eabedbe | ||
|
|
5df2c7686c | ||
|
|
7946ee78f6 | ||
|
|
335a39bc75 | ||
|
|
d50a7dbd1a | ||
|
|
6714bb114c | ||
|
|
cda498f779 | ||
|
|
67c18cb082 | ||
|
|
22fd919220 | ||
|
|
1e0e9c4f7d | ||
|
|
814250aade | ||
|
|
2e072baf72 | ||
|
|
7f22d6135a | ||
|
|
331fd76b42 | ||
|
|
1259d72643 | ||
|
|
cab1bc3cb4 | ||
|
|
4cd331f0ca | ||
|
|
e4e2761fe3 | ||
|
|
45653180ed | ||
|
|
68e559c613 | ||
|
|
c2ef9d06ca | ||
|
|
db5943bd8f | ||
|
|
b6f64c4ba4 | ||
|
|
a3e43e4e97 | ||
|
|
0a2db9bc59 | ||
|
|
12b263c20b | ||
|
|
4a4d4569ae | ||
|
|
3286b4e32f | ||
|
|
63f2c7fe00 | ||
|
|
7504f6216a | ||
|
|
58715daf10 | ||
|
|
1ad8736d72 | ||
|
|
79ec042e0d | ||
|
|
7c74b7cdb7 | ||
|
|
e8826863e0 | ||
|
|
4f79deac0b | ||
|
|
695166bde5 | ||
|
|
9ce0e77e61 | ||
|
|
0b911bf58c | ||
|
|
15ca0ba1b6 | ||
|
|
c6183c9d03 | ||
|
|
dfd896db10 | ||
|
|
ac8f8fb0b0 | ||
|
|
d6ae6b2773 | ||
|
|
a42f789ff0 | ||
|
|
5d8ec6e5b0 | ||
|
|
e711a1bbc6 | ||
|
|
b6e1223e88 | ||
|
|
28921be00f | ||
|
|
4e8f29f328 | ||
|
|
126e1fb53d | ||
|
|
ebf4963758 | ||
|
|
eece396b30 | ||
|
|
abcb5f8830 | ||
|
|
ebb4c9994f | ||
|
|
971eee32ea | ||
|
|
af84d6b1e0 | ||
|
|
2cb69f09b9 | ||
|
|
0403079a4b | ||
|
|
97984eb3ec | ||
|
|
c46fd30446 | ||
|
|
ff8a301f6a | ||
|
|
27bd28ee97 | ||
|
|
fb4d25d907 | ||
|
|
ca6f52e7c7 | ||
|
|
3bdeb9ace1 | ||
|
|
f64b59e735 | ||
|
|
5d78f4a89f | ||
|
|
695f870ce1 | ||
|
|
593b111fdf | ||
|
|
82efd188c4 | ||
|
|
9df7275429 | ||
|
|
829876c2e0 | ||
|
|
41ba6bd1f4 | ||
|
|
aa282711f8 | ||
|
|
5a501603ac | ||
|
|
e7f8cb4ea3 | ||
|
|
78d9aa5b76 | ||
|
|
038029eb2d | ||
|
|
a14cc1bd77 | ||
|
|
33389fc48e | ||
|
|
d468c16ca2 | ||
|
|
fcf7cf5eb2 | ||
|
|
b08e90ea88 | ||
|
|
75dc42cf24 | ||
|
|
ec3d142ad9 | ||
|
|
280f0b0038 | ||
|
|
7307c52250 | ||
|
|
e8cb962890 | ||
|
|
934f17c65e | ||
|
|
55f36912f9 | ||
|
|
7b1ad5fa67 | ||
|
|
7d8a915ee0 | ||
|
|
8b4df8beb1 | ||
|
|
f98a74b526 | ||
|
|
8a0eae2bb0 | ||
|
|
18f47a59c5 | ||
|
|
31b1af2f84 | ||
|
|
4c56e49c66 | ||
|
|
2de2c30545 | ||
|
|
51897dc804 | ||
|
|
bbef00a151 | ||
|
|
627aa5d695 | ||
|
|
0d8b3c4389 | ||
|
|
8031c35160 | ||
|
|
8cf14222ff | ||
|
|
10b15b3986 |
No files matched your search
@@ -22,7 +22,7 @@ jobs:
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
|
||||
- name: Install Node modules
|
||||
run: |
|
||||
|
||||
@@ -144,7 +144,7 @@ jobs:
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
|
||||
- name: Build the JS bundle
|
||||
run: |
|
||||
|
||||
@@ -131,7 +131,7 @@ jobs:
|
||||
"comment": "PostgreSQL ${{ matrix.pgver }} Server",
|
||||
"db_username": "postgres",
|
||||
"host": "/var/run/postgresql",
|
||||
"db_password": "postgres",
|
||||
"db_password": "",
|
||||
"db_port": 59${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
@@ -154,7 +154,7 @@ jobs:
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
|
||||
- name: Build the JS bundle
|
||||
run: |
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
|
||||
- name: Install Node modules
|
||||
run: |
|
||||
|
||||
@@ -39,6 +39,11 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Update python version
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Setup the EDB APT repo on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
@@ -48,7 +53,7 @@ jobs:
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger edb-as${{ matrix.pgver }}-postgis34
|
||||
|
||||
- name: Install pgagent on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
@@ -105,6 +110,10 @@ jobs:
|
||||
- name: Create pgagent extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Create postgis extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
|
||||
|
||||
- name: Install Python dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
|
||||
@@ -28,6 +28,11 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Update python version
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Setup the PGDG APT repo on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
@@ -51,7 +56,7 @@ jobs:
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent postgresql-${{ matrix.pgver }}-postgis-3
|
||||
|
||||
- name: Install platform dependencies on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
@@ -113,6 +118,7 @@ jobs:
|
||||
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pgagent;'
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pldbgapi;'
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION postgis;'
|
||||
|
||||
- name: Start PostgreSQL on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
|
||||
@@ -6,4 +6,4 @@ show-source = False
|
||||
show-pep8 = False
|
||||
count = True
|
||||
format = pylint
|
||||
exclude = migrations,node_modules,config_local.py,config_distro.py
|
||||
exclude = node_modules,config_local.py,config_distro.py
|
||||
@@ -1 +0,0 @@
|
||||
3.8.0
|
||||
@@ -1,586 +0,0 @@
|
||||
pgAdmin 4 Dependency Inventory
|
||||
==============================
|
||||
|
||||
pgAdmin 4 is built on Python, Javascript and NW.js (node-webkit), and is
|
||||
dependent on various third party libraries. These are automatically compiled
|
||||
from the system, requirements.txt and packages.json and listed below.
|
||||
|
||||
Runtime Dependencies
|
||||
====================
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
Python 3.6+ PSF https://www.python.org/
|
||||
nw 0.50.2 MIT git://github.com/nwjs/npm-installer.git
|
||||
asynckit 0.4.0 MIT git+https://github.com/alexindigo/asynckit.git
|
||||
axios 1.4.0 MIT https://github.com/axios/axios.git
|
||||
bootstrap 4.6.2 MIT git+https://github.com/twbs/bootstrap.git
|
||||
combined-stream 1.0.8 MIT git://github.com/felixge/node-combined-stream.git
|
||||
delayed-stream 1.0.0 MIT git://github.com/felixge/node-delayed-stream.git
|
||||
follow-redirects 1.15.2 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
form-data 4.0.0 MIT git://github.com/form-data/form-data.git
|
||||
mime-db 1.52.0 MIT https://github.com/jshttp/mime-db.git
|
||||
mime-types 2.1.35 MIT https://github.com/jshttp/mime-types.git
|
||||
proxy-from-env 1.1.0 MIT https://github.com/Rob--W/proxy-from-env.git
|
||||
|
||||
12 dependencies listed.
|
||||
|
||||
Python Dependencies
|
||||
===================
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
Flask 2.2.4 BSD-3-Clause https://palletsprojects.com/p/flask
|
||||
Flask-Gravatar 0.5.0 BSD https://github.com/zzzsochi/Flask-Gravatar/
|
||||
Flask-Login 0.6.2 MIT https://github.com/maxcountryman/flask-login
|
||||
Flask-Mail 0.9.1 BSD https://github.com/rduplain/flask-mail
|
||||
Flask-Migrate 4.0.4 MIT https://github.com/miguelgrinberg/flask-migrate
|
||||
Flask-SQLAlchemy 3.0.3 BSD-3-Clause Unknown
|
||||
Flask-WTF 1.1.1 BSD-3-Clause https://github.com/wtforms/flask-wtf/
|
||||
Flask-Compress 1.13 MIT https://github.com/colour-science/flask-compress
|
||||
Flask-Paranoid 0.3.0 UNKNOWN https://github.com/miguelgrinberg/flask-paranoid
|
||||
flask-babel 3.1.0 BSD-3-Clause https://github.com/python-babel/flask-babel
|
||||
Flask-Security-Too 5.1.2 MIT https://github.com/Flask-Middleware/flask-security
|
||||
Flask-SocketIO 5.3.3 Unknown https://github.com/miguelgrinberg/flask-socketio
|
||||
WTForms 3.0.1 BSD-3-Clause https://wtforms.readthedocs.io/
|
||||
passlib 1.7.4 BSD https://passlib.readthedocs.io
|
||||
pytz 2023.3 MIT http://pythonhosted.org/pytz
|
||||
speaklater3 1.4 UNKNOWN https://github.com/ThomasWaldmann/speaklater
|
||||
sqlparse 0.4.4 Unknown Unknown
|
||||
psutil 5.9.5 BSD-3-Clause https://github.com/giampaolo/psutil
|
||||
psycopg 3.1.8 GNU Lesser General Public License v3 (LGPLv3) https://psycopg.org/psycopg3/
|
||||
python-dateutil 2.8.2 Dual License https://github.com/dateutil/dateutil
|
||||
SQLAlchemy 2.0.11 MIT https://www.sqlalchemy.org
|
||||
bcrypt 4.0.1 Apache License, Version 2.0 https://github.com/pyca/bcrypt/
|
||||
cryptography 40.0.2 (Apache-2.0 OR BSD-3-Clause) AND PSF-2.0 https://github.com/pyca/cryptography
|
||||
sshtunnel 0.4.0 MIT https://github.com/pahaz/sshtunnel
|
||||
ldap3 2.9.1 LGPL v3 https://github.com/cannatag/ldap3
|
||||
gssapi 1.8.2 LICENSE.txt https://github.com/pythongssapi/python-gssapi
|
||||
eventlet 0.33.3 Unknown http://eventlet.net
|
||||
httpagentparser 1.9.5 http://www.opensource.org/licenses/mit-license.php https://github.com/shon/httpagentparser
|
||||
user-agents 2.2.0 MIT https://github.com/selwin/python-user-agents
|
||||
pywinpty 2.0.* Unknown Unknown
|
||||
Authlib 1.2.0 BSD 3-Clause License https://authlib.org/
|
||||
pyotp 2.8.0 MIT License https://github.com/pyotp/pyotp
|
||||
qrcode 7.4.2 BSD https://github.com/lincolnloop/python-qrcode
|
||||
Pillow 9.5.0 HPND https://python-pillow.org
|
||||
boto3 1.26.121 Apache License 2.0 https://github.com/boto/boto3
|
||||
botocore 1.29.121 Apache License 2.0 https://github.com/boto/botocore
|
||||
urllib3 1.26.15 MIT https://urllib3.readthedocs.io/
|
||||
azure-mgmt-rdbms 10.1.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-resource 23.0.1 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-subscription 3.1.1 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-identity 1.13.0 MIT License https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity
|
||||
google-api-python-client 2.86.0 Apache 2.0 https://github.com/googleapis/google-api-python-client/
|
||||
google-auth-oauthlib 1.0.0 Apache 2.0 https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib
|
||||
Werkzeug 2.2.3 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
keyring 23.13.1 Unknown https://github.com/jaraco/keyring
|
||||
|
||||
NOTE: This report was generated using Python 3.11. Full information may not be
|
||||
shown for Python modules that are not required with this version.
|
||||
|
||||
45 dependencies listed.
|
||||
|
||||
Javascript Dependencies
|
||||
=======================
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
@ampproject/remapping 2.2.1 Apache-2.0 git+https://github.com/ampproject/remapping.git
|
||||
anti-trojan-source 1.4.1 Apache-2.0 https://github.com/lirantal/anti-trojan-source.git
|
||||
eve 0.5.4 Apache-2.0 git@github.com:adobe-webplatform/eve.git
|
||||
jmespath 0.16.0 Apache-2.0 git://github.com/jmespath/jmespath.js
|
||||
jsoneditor 9.10.2 Apache-2.0 https://github.com/josdejong/jsoneditor.git
|
||||
paths-js 0.4.11 Apache-2.0 https://github.com/andreaferretti/paths-js.git
|
||||
rc-dock 3.2.18 Apache-2.0 https://github.com/ticlo/rc-dock.git
|
||||
rc-new-window 0.1.13 Apache-2.0 https://github.com/ticlo/rc-new-window.git
|
||||
snapsvg 0.5.1 Apache-2.0 git@github.com:adobe-webplatform/Snap.svg.git
|
||||
spdx-correct 3.2.0 Apache-2.0 https://github.com/jslicense/spdx-correct.js.git
|
||||
validate-npm-package-license 3.0.4 Apache-2.0 https://github.com/kemitchell/validate-npm-package-license.js.git
|
||||
@babel/code-frame 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/compat-data 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/core 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/generator 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-annotate-as-pure 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-compilation-targets 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-create-class-features-plugin 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-environment-visitor 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-function-name 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-hoist-variables 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-member-expression-to-functions 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-module-imports 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-module-transforms 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-optimise-call-expression 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-plugin-utils 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-replace-supers 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-simple-access 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-skip-transparent-expression-wrappers 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-split-export-declaration 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-string-parser 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-validator-identifier 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-validator-option 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helpers 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/highlight 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/parser 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-proposal-class-properties 7.18.6 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-syntax-jsx 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-display-name 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-jsx 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-jsx-development 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-pure-annotations 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/preset-react 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/traverse 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@babel/types 7.22.5 MIT https://github.com/babel/babel.git
|
||||
@date-io/core 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
|
||||
@date-io/date-fns 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
|
||||
@emotion/babel-plugin 11.11.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/babel-plugin
|
||||
@emotion/cache 11.11.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/cache
|
||||
@emotion/hash 0.8.0 MIT https://github.com/emotion-js/emotion/tree/master/packages/hash
|
||||
@emotion/hash 0.9.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/hash
|
||||
@emotion/is-prop-valid 1.2.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/is-prop-valid
|
||||
@emotion/memoize 0.8.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/memoize
|
||||
@emotion/react 11.11.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/react
|
||||
@emotion/serialize 1.1.2 MIT https://github.com/emotion-js/emotion/tree/main/packages/serialize
|
||||
@emotion/sheet 1.2.2 MIT https://github.com/emotion-js/emotion/tree/main/packages/sheet
|
||||
@emotion/stylis 0.8.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/stylis
|
||||
@emotion/unitless 0.8.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/unitless
|
||||
@emotion/unitless 0.7.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/unitless
|
||||
@emotion/use-insertion-effect-with-fallbacks 1.0.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/use-insertion-effect-with-fallbacks
|
||||
@emotion/utils 1.2.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/utils
|
||||
@emotion/weak-memoize 0.3.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/weak-memoize
|
||||
@floating-ui/core 1.3.1 MIT https://github.com/floating-ui/floating-ui.git
|
||||
@floating-ui/dom 1.4.2 MIT https://github.com/floating-ui/floating-ui.git
|
||||
@istanbuljs/schema 0.1.3 MIT git+https://github.com/istanbuljs/schema.git
|
||||
@jridgewell/gen-mapping 0.3.3 MIT https://github.com/jridgewell/gen-mapping
|
||||
@jridgewell/resolve-uri 3.1.0 MIT https://github.com/jridgewell/resolve-uri
|
||||
@jridgewell/set-array 1.1.2 MIT https://github.com/jridgewell/set-array
|
||||
@jridgewell/sourcemap-codec 1.4.15 MIT git+https://github.com/jridgewell/sourcemap-codec.git
|
||||
@jridgewell/sourcemap-codec 1.4.14 MIT git+https://github.com/jridgewell/sourcemap-codec.git
|
||||
@jridgewell/trace-mapping 0.3.18 MIT git+https://github.com/jridgewell/trace-mapping.git
|
||||
@material-ui/core 4.12.4 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/icons 4.11.3 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/lab 4.0.0-alpha.61 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/pickers 3.3.10 MIT https://github.com/mui-org/material-ui-pickers
|
||||
@material-ui/styles 4.11.5 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/system 4.12.2 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/types 5.1.0 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/utils 4.11.3 MIT https://github.com/mui-org/material-ui.git
|
||||
@nodelib/fs.scandir 2.1.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
|
||||
@nodelib/fs.stat 2.0.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
|
||||
@nodelib/fs.walk 1.2.8 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
|
||||
@projectstorm/geometry 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-canvas-core 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-core 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-defaults 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-routing 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@rc-component/portal 1.1.1 MIT https://github.com/react-component/portal.git
|
||||
@rc-component/trigger 1.13.6 MIT https://github.com/react-component/trigger.git
|
||||
@react-dnd/asap 5.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@react-dnd/invariant 4.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@react-dnd/shallowequal 4.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@remix-run/router 1.6.3 MIT https://github.com/remix-run/react-router
|
||||
@simonwep/pickr 1.8.2 MIT https://github.com/Simonwep/pickr.git
|
||||
@sindresorhus/is 0.7.0 MIT https://github.com/sindresorhus/is.git
|
||||
@socket.io/component-emitter 3.1.0 MIT https://github.com/socketio/emitter.git
|
||||
@szhsin/react-menu 2.3.4 MIT https://github.com/szhsin/react-menu.git
|
||||
@types/classnames 2.3.1 MIT Unknown
|
||||
@types/minimist 1.2.2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/node 20.3.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/normalize-package-data 2.4.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/parse-json 4.0.0 MIT https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/prop-types 15.7.5 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react 18.2.13 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react 16.14.43 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react 17.0.62 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-dom 17.0.20 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-transition-group 4.4.6 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/scheduler 0.16.3 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/styled-jsx 2.2.9 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
ajv 8.12.0 MIT https://github.com/ajv-validator/ajv.git
|
||||
ajv 6.12.6 MIT https://github.com/ajv-validator/ajv.git
|
||||
ansi-styles 3.2.1 MIT https://github.com/chalk/ansi-styles.git
|
||||
array-union 3.0.1 MIT https://github.com/sindresorhus/array-union.git
|
||||
arrify 1.0.1 MIT https://github.com/sindresorhus/arrify.git
|
||||
aspen-core 1.0.5 MIT git+https://github.com/neeksandhu/aspen-core.git
|
||||
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
|
||||
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
|
||||
async 2.6.4 MIT https://github.com/caolan/async.git
|
||||
attr-accept 2.2.2 MIT https://github.com/react-dropzone/attr-accept.git
|
||||
axios 0.21.4 MIT https://github.com/axios/axios.git
|
||||
babel-plugin-macros 3.1.0 MIT https://github.com/kentcdodds/babel-plugin-macros
|
||||
babel-plugin-styled-components 2.1.3 MIT https://github.com/styled-components/babel-plugin-styled-components.git
|
||||
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
|
||||
babelify 10.0.0 MIT https://github.com/babel/babelify.git
|
||||
balanced-match 1.0.2 MIT git://github.com/juliangruber/balanced-match.git
|
||||
base64-arraybuffer 1.0.2 MIT https://github.com/niklasvh/base64-arraybuffer
|
||||
bignumber.js 9.1.1 MIT https://github.com/MikeMcl/bignumber.js.git
|
||||
bootstrap 4.6.2 MIT git+https://github.com/twbs/bootstrap.git
|
||||
bowser 2.11.0 MIT git+https://github.com/lancedikson/bowser.git
|
||||
brace 0.11.1 MIT git://github.com/thlorenz/brace.git
|
||||
brace-expansion 1.1.11 MIT git://github.com/juliangruber/brace-expansion.git
|
||||
braces 3.0.2 MIT https://github.com/micromatch/braces.git
|
||||
browserfs 1.4.3 MIT https://github.com/jvilk/BrowserFS.git
|
||||
browserslist 4.21.9 MIT https://github.com/browserslist/browserslist.git
|
||||
callsites 3.1.0 MIT https://github.com/sindresorhus/callsites.git
|
||||
camelcase 6.3.0 MIT https://github.com/sindresorhus/camelcase.git
|
||||
camelcase-keys 7.0.2 MIT https://github.com/sindresorhus/camelcase-keys.git
|
||||
camelize 1.0.1 MIT git://github.com/ljharb/camelize.git
|
||||
caniuse-api 3.0.0 MIT https://github.com/nyalab/caniuse-api.git
|
||||
chalk 2.4.2 MIT https://github.com/chalk/chalk.git
|
||||
chart.js 3.9.1 MIT https://github.com/chartjs/Chart.js.git
|
||||
chartjs-plugin-zoom 2.0.1 MIT https://github.com/chartjs/chartjs-plugin-zoom.git
|
||||
classnames 2.3.2 MIT https://github.com/JedWatson/classnames.git
|
||||
closest 0.0.1 MIT https://github.com/ForbesLindesay/closest.git
|
||||
clsx 1.2.1 MIT https://github.com/lukeed/clsx.git
|
||||
codemirror 5.65.13 MIT https://github.com/codemirror/CodeMirror.git
|
||||
color-convert 1.9.3 MIT https://github.com/Qix-/color-convert.git
|
||||
color-name 1.1.3 MIT git@github.com:dfcreative/color-name.git
|
||||
colord 2.9.3 MIT https://github.com/omgovich/colord.git
|
||||
commander 7.2.0 MIT https://github.com/tj/commander.js.git
|
||||
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
|
||||
convert-source-map 1.9.0 MIT git://github.com/thlorenz/convert-source-map.git
|
||||
convert-units 2.3.4 MIT git://github.com/ben-ng/convert-units.git
|
||||
core-js 3.31.0 MIT https://github.com/zloirock/core-js.git
|
||||
cosmiconfig 7.1.0 MIT git+https://github.com/davidtheclark/cosmiconfig.git
|
||||
css-line-break 2.1.0 MIT git+ssh://git@github.com/niklasvh/css-line-break.git
|
||||
css-to-react-native 3.2.0 MIT git+https://github.com/styled-components/css-to-react-native.git
|
||||
css-tree 1.1.3 MIT https://github.com/csstree/csstree.git
|
||||
css-vendor 2.0.8 MIT git@github.com:cssinjs/css-vendor.git
|
||||
cssesc 3.0.0 MIT https://github.com/mathiasbynens/cssesc.git
|
||||
cssnano 5.1.15 MIT https://github.com/cssnano/cssnano.git
|
||||
cssnano-preset-default 5.2.14 MIT https://github.com/cssnano/cssnano.git
|
||||
cssnano-utils 3.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
csso 4.2.0 MIT https://github.com/css/csso.git
|
||||
csstype 2.6.21 MIT https://github.com/frenic/csstype
|
||||
csstype 3.1.2 MIT https://github.com/frenic/csstype
|
||||
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
|
||||
date-fns 2.30.0 MIT https://github.com/date-fns/date-fns
|
||||
debug 4.3.4 MIT git://github.com/debug-js/debug.git
|
||||
decamelize 5.0.1 MIT https://github.com/sindresorhus/decamelize.git
|
||||
decamelize 1.2.0 MIT https://github.com/sindresorhus/decamelize.git
|
||||
decamelize-keys 1.1.1 MIT https://github.com/sindresorhus/decamelize-keys.git
|
||||
deep-diff 1.0.2 MIT git://github.com/flitbit/diff.git
|
||||
diff-arrays-of-objects 1.1.9 MIT git+https://github.com/malcolmvr/diff-arrays-of-objects.git
|
||||
dir-glob 3.0.1 MIT https://github.com/kevva/dir-glob.git
|
||||
dnd-core 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
dom-align 1.12.4 MIT git@github.com:yiminghe/dom-align.git
|
||||
dom-helpers 5.2.1 MIT git+https://github.com/react-bootstrap/dom-helpers.git
|
||||
dom-serializer 1.4.1 MIT git://github.com/cheeriojs/dom-renderer.git
|
||||
engine.io-client 6.5.0 MIT https://github.com/socketio/engine.io-client.git
|
||||
engine.io-parser 5.1.0 MIT git@github.com:socketio/engine.io-parser.git
|
||||
error-ex 1.3.2 MIT https://github.com/qix-/node-error-ex.git
|
||||
escalade 3.1.1 MIT https://github.com/lukeed/escalade.git
|
||||
escape-string-regexp 1.0.5 MIT https://github.com/sindresorhus/escape-string-regexp.git
|
||||
escape-string-regexp 4.0.0 MIT https://github.com/sindresorhus/escape-string-regexp.git
|
||||
fast-deep-equal 3.1.3 MIT git+https://github.com/epoberezkin/fast-deep-equal.git
|
||||
fast-glob 3.2.12 MIT https://github.com/mrmlnc/fast-glob.git
|
||||
fast-json-stable-stringify 2.1.0 MIT git://github.com/epoberezkin/fast-json-stable-stringify.git
|
||||
fast-memoize 2.5.2 MIT git+https://github.com/caiogondim/fast-memoize.git
|
||||
file-selector 0.6.0 MIT https://github.com/react-dropzone/file-selector.git
|
||||
filename-reserved-regex 2.0.0 MIT https://github.com/sindresorhus/filename-reserved-regex.git
|
||||
fill-range 7.0.1 MIT https://github.com/jonschlinkert/fill-range.git
|
||||
find-root 1.1.0 MIT git@github.com:js-n/find-root.git
|
||||
find-up 5.0.0 MIT https://github.com/sindresorhus/find-up.git
|
||||
follow-redirects 1.15.2 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
function-bind 1.1.1 MIT git://github.com/Raynos/function-bind.git
|
||||
gensync 1.0.0-beta.2 MIT https://github.com/loganfsmyth/gensync.git
|
||||
globals 11.12.0 MIT https://github.com/sindresorhus/globals.git
|
||||
globby 12.2.0 MIT https://github.com/sindresorhus/globby.git
|
||||
graphlib 2.1.8 MIT https://github.com/dagrejs/graphlib.git
|
||||
hammerjs 2.0.8 MIT git://github.com/hammerjs/hammer.js.git
|
||||
hard-rejection 2.1.0 MIT https://github.com/sindresorhus/hard-rejection.git
|
||||
has 1.0.3 MIT git://github.com/tarruda/has.git
|
||||
has-flag 3.0.0 MIT https://github.com/sindresorhus/has-flag.git
|
||||
has-flag 4.0.0 MIT https://github.com/sindresorhus/has-flag.git
|
||||
html-escaper 2.0.2 MIT https://github.com/WebReflection/html-escaper.git
|
||||
html2canvas 1.4.1 MIT git@github.com:niklasvh/html2canvas.git
|
||||
ignore 5.2.4 MIT git@github.com:kaelzhang/node-ignore.git
|
||||
immutability-helper 3.1.1 MIT git+https://github.com/kolodny/immutability-helper.git
|
||||
import-fresh 3.3.0 MIT https://github.com/sindresorhus/import-fresh.git
|
||||
indent-string 5.0.0 MIT https://github.com/sindresorhus/indent-string.git
|
||||
insert-if 1.2.0 MIT git+https://github.com/chipto/insert-if.git
|
||||
ip-address 7.1.0 MIT git://github.com/beaugunderson/ip-address.git
|
||||
is-any-array 2.0.1 MIT https://github.com/cheminfo-js/is-any-array.git
|
||||
is-arrayish 0.2.1 MIT https://github.com/qix-/node-is-arrayish.git
|
||||
is-core-module 2.12.1 MIT git+https://github.com/inspect-js/is-core-module.git
|
||||
is-extglob 2.1.1 MIT https://github.com/jonschlinkert/is-extglob.git
|
||||
is-glob 4.0.3 MIT https://github.com/micromatch/is-glob.git
|
||||
is-in-browser 1.1.3 MIT git+https://github.com/tuxsudo/is-in-browser.git
|
||||
is-number 7.0.0 MIT https://github.com/jonschlinkert/is-number.git
|
||||
is-plain-obj 1.1.0 MIT https://github.com/sindresorhus/is-plain-obj.git
|
||||
is-relative 1.0.0 MIT https://github.com/jonschlinkert/is-relative.git
|
||||
is-unc-path 1.0.0 MIT https://github.com/jonschlinkert/is-unc-path.git
|
||||
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
|
||||
jquery 3.7.0 MIT https://github.com/jquery/jquery.git
|
||||
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
|
||||
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
|
||||
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
|
||||
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
|
||||
json-bignumber 1.1.1 MIT git@github.com:wbuss/JSONBigNumber.git
|
||||
json-parse-even-better-errors 2.3.1 MIT https://github.com/npm/json-parse-even-better-errors
|
||||
json-schema-traverse 1.0.0 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
|
||||
json-schema-traverse 0.4.1 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
|
||||
json-source-map 0.6.1 MIT git+https://github.com/epoberezkin/json-source-map.git
|
||||
json5 2.2.3 MIT git+https://github.com/json5/json5.git
|
||||
jss 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-camel-case 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-default-unit 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-global 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-nested 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-props-sort 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-rule-value-function 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
jss-plugin-vendor-prefixer 10.10.0 MIT https://github.com/cssinjs/jss.git
|
||||
karma-coverage 2.2.0 MIT git://github.com/karma-runner/karma-coverage.git
|
||||
kind-of 6.0.3 MIT https://github.com/jonschlinkert/kind-of.git
|
||||
lilconfig 2.1.0 MIT https://github.com/antonk52/lilconfig
|
||||
lines-and-columns 1.2.4 MIT https://github.com/eventualbuddha/lines-and-columns.git
|
||||
locate-path 6.0.0 MIT https://github.com/sindresorhus/locate-path.git
|
||||
lodash 4.17.21 MIT https://github.com/lodash/lodash.git
|
||||
lodash._basebind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreate 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreatecallback 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreatewrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._createwrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._objecttypes 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._renative 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._setbinddata 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._shimkeys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._slice 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.bind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.foreach 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.forown 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.identity 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.isfunction 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.isobject 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.keys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.memoize 4.1.2 MIT https://github.com/lodash/lodash.git
|
||||
lodash.noop 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.support 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.uniq 4.5.0 MIT https://github.com/lodash/lodash.git
|
||||
loose-envify 1.4.0 MIT git://github.com/zertosh/loose-envify.git
|
||||
make-dir 3.1.0 MIT https://github.com/sindresorhus/make-dir.git
|
||||
map-obj 4.3.0 MIT https://github.com/sindresorhus/map-obj.git
|
||||
map-obj 1.0.1 MIT https://github.com/sindresorhus/map-obj.git
|
||||
matches-selector 0.0.1 MIT https://github.com/ForbesLindesay/matches-selector.git
|
||||
memoize-one 5.2.1 MIT https://github.com/alexreardon/memoize-one.git
|
||||
memoize-one 6.0.0 MIT https://github.com/alexreardon/memoize-one.git
|
||||
meow 10.1.5 MIT https://github.com/sindresorhus/meow.git
|
||||
merge2 1.4.1 MIT git@github.com:teambition/merge2.git
|
||||
micromatch 4.0.5 MIT https://github.com/micromatch/micromatch.git
|
||||
min-indent 1.0.1 MIT https://github.com/thejameskyle/min-indent
|
||||
minimist-options 4.1.0 MIT https://github.com/vadimdemedes/minimist-options.git
|
||||
ml-array-max 1.2.4 MIT git+https://github.com/mljs/array.git
|
||||
ml-array-min 1.2.3 MIT git+https://github.com/mljs/array.git
|
||||
ml-array-rescale 1.3.7 MIT git+https://github.com/mljs/array.git
|
||||
ml-matrix 6.10.4 MIT https://github.com/mljs/matrix.git
|
||||
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
|
||||
moment 2.29.4 MIT https://github.com/moment/moment.git
|
||||
moment-timezone 0.5.43 MIT https://github.com/moment/moment-timezone.git
|
||||
ms 2.1.2 MIT https://github.com/zeit/ms.git
|
||||
nanoid 3.3.6 MIT https://github.com/ai/nanoid.git
|
||||
nanopop 2.3.0 MIT https://github.com/Simonwep/nanopop.git
|
||||
node-releases 2.0.12 MIT https://github.com/chicoxyzzy/node-releases.git
|
||||
normalize-url 6.1.0 MIT https://github.com/sindresorhus/normalize-url.git
|
||||
notificar 1.0.1 MIT git+https://github.com/neeksandhu/notificar.git
|
||||
notistack 1.0.10 MIT git+https://github.com/iamhosseindhv/notistack.git
|
||||
object-assign 4.1.1 MIT https://github.com/sindresorhus/object-assign.git
|
||||
p-limit 3.1.0 MIT https://github.com/sindresorhus/p-limit.git
|
||||
p-locate 5.0.0 MIT https://github.com/sindresorhus/p-locate.git
|
||||
p-reduce 1.0.0 MIT https://github.com/sindresorhus/p-reduce.git
|
||||
p-series 1.1.0 MIT https://github.com/sindresorhus/p-series.git
|
||||
parent-module 1.0.1 MIT https://github.com/sindresorhus/parent-module.git
|
||||
parse-json 5.2.0 MIT https://github.com/sindresorhus/parse-json.git
|
||||
path-exists 4.0.0 MIT https://github.com/sindresorhus/path-exists.git
|
||||
path-fx 2.1.2 MIT git+https://github.com/NeekSandhu/path-fx.git
|
||||
path-parse 1.0.7 MIT https://github.com/jbgutierrez/path-parse.git
|
||||
path-type 4.0.0 MIT https://github.com/sindresorhus/path-type.git
|
||||
pathfinding 0.4.18 MIT git://github.com/qiao/PathFinding.js.git
|
||||
performance-now 2.1.0 MIT git://github.com/braveg1rl/performance-now.git
|
||||
picomatch 2.3.1 MIT https://github.com/micromatch/picomatch.git
|
||||
picomodal 3.0.0 MIT https://github.com/Nycto/PicoModal.git
|
||||
popper.js 1.16.1-lts MIT git+https://github.com/FezVrasta/popper.js.git
|
||||
popper.js 1.16.1 MIT git+https://github.com/FezVrasta/popper.js.git
|
||||
postcss 8.4.24 MIT https://github.com/postcss/postcss.git
|
||||
postcss-calc 8.2.4 MIT https://github.com/postcss/postcss-calc.git
|
||||
postcss-colormin 5.3.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-convert-values 5.1.3 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-comments 5.1.2 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-duplicates 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-empty 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-overridden 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-merge-longhand 5.1.7 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-merge-rules 5.1.4 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-font-values 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-gradients 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-params 5.1.4 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-selectors 5.2.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-charset 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-display-values 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-positions 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-repeat-style 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-string 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-timing-functions 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-unicode 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-url 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-whitespace 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-ordered-values 5.1.3 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-reduce-initial 5.1.2 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-reduce-transforms 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-selector-parser 6.0.13 MIT https://github.com/postcss/postcss-selector-parser.git
|
||||
postcss-svgo 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-unique-selectors 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-value-parser 4.2.0 MIT https://github.com/TrySound/postcss-value-parser.git
|
||||
prop-types 15.8.1 MIT https://github.com/facebook/prop-types.git
|
||||
punycode 2.3.0 MIT https://github.com/mathiasbynens/punycode.js.git
|
||||
queue-microtask 1.2.3 MIT git://github.com/feross/queue-microtask.git
|
||||
quick-lru 5.1.1 MIT https://github.com/sindresorhus/quick-lru.git
|
||||
raf 3.4.1 MIT git://github.com/chrisdickinson/raf.git
|
||||
rc-align 4.0.15 MIT git@github.com:react-component/align.git
|
||||
rc-dropdown 3.6.2 MIT git@github.com:react-component/dropdown.git
|
||||
rc-dropdown 4.0.1 MIT git@github.com:react-component/dropdown.git
|
||||
rc-menu 9.9.2 MIT git@github.com:react-component/menu.git
|
||||
rc-menu 9.6.4 MIT git@github.com:react-component/menu.git
|
||||
rc-motion 2.7.3 MIT git@github.com:react-component/motion.git
|
||||
rc-overflow 1.3.1 MIT git@github.com:react-component/overflow.git
|
||||
rc-resize-observer 1.3.1 MIT git@github.com:react-component/resize-observer.git
|
||||
rc-tabs 11.16.1 MIT git@github.com:react-component/tabs.git
|
||||
rc-trigger 5.3.4 MIT https://github.com/react-component/trigger.git
|
||||
rc-util 5.34.0 MIT git@github.com:react-component/util.git
|
||||
re-resizable 6.9.6 MIT https://github.com/bokuweb/react-resizable-box.git
|
||||
react 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-aspen 1.2.0 MIT https://github.com/neeksandhu/react-aspen.git
|
||||
react-checkbox-tree 1.8.0 MIT https://github.com/jakezatecky/react-checkbox-tree
|
||||
react-data-grid 7.0.0-beta.14 MIT https://github.com/adazzle/react-data-grid.git
|
||||
react-dnd 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
react-dnd-html5-backend 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
react-dom 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-draggable 4.4.5 MIT https://github.com/react-grid-layout/react-draggable.git
|
||||
react-dropzone 14.2.3 MIT https://github.com/react-dropzone/react-dropzone.git
|
||||
react-is 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-is 16.13.1 MIT https://github.com/facebook/react.git
|
||||
react-resize-detector 9.1.0 MIT git+https://github.com/maslianok/react-resize-detector.git
|
||||
react-rnd 10.4.1 MIT https://github.com/bokuweb/react-rnd.git
|
||||
react-router 6.13.0 MIT https://github.com/remix-run/react-router
|
||||
react-router-dom 6.13.0 MIT https://github.com/remix-run/react-router
|
||||
react-select 5.7.3 MIT https://github.com/JedWatson/react-select/tree/master/packages/react-select
|
||||
react-table 7.8.0 MIT https://github.com/tannerlinsley/react-table
|
||||
react-transition-state 1.1.5 MIT https://github.com/szhsin/react-transition-state.git
|
||||
react-virtualized-auto-sizer 1.0.20 MIT https://github.com/bvaughn/react-virtualized-auto-sizer.git
|
||||
react-window 1.8.9 MIT https://github.com/bvaughn/react-window.git
|
||||
read-pkg 6.0.0 MIT https://github.com/sindresorhus/read-pkg.git
|
||||
read-pkg-up 8.0.0 MIT https://github.com/sindresorhus/read-pkg-up.git
|
||||
redent 4.0.0 MIT https://github.com/sindresorhus/redent.git
|
||||
redux 4.2.1 MIT https://github.com/reduxjs/redux.git
|
||||
regenerator-runtime 0.13.11 MIT https://github.com/facebook/regenerator/tree/main/packages/runtime
|
||||
require-from-string 2.0.2 MIT https://github.com/floatdrop/require-from-string.git
|
||||
resize-observer-polyfill 1.5.1 MIT https://github.com/que-etc/resize-observer-polyfill.git
|
||||
resolve 1.22.2 MIT git://github.com/browserify/resolve.git
|
||||
resolve-from 4.0.0 MIT https://github.com/sindresorhus/resolve-from.git
|
||||
reusify 1.0.4 MIT git+https://github.com/mcollina/reusify.git
|
||||
rifm 0.7.0 MIT https://github.com/istarkov/rifm.git
|
||||
run-parallel 1.2.0 MIT git://github.com/feross/run-parallel.git
|
||||
scheduler 0.20.2 MIT https://github.com/facebook/react.git
|
||||
shallowequal 1.1.0 MIT https://github.com/dashed/shallowequal.git
|
||||
slash 4.0.0 MIT https://github.com/sindresorhus/slash.git
|
||||
snapsvg-cjs 0.0.6 MIT git+https://github.com/geelen/Snap.svg-cjs.git
|
||||
socket.io-client 4.7.0 MIT https://github.com/socketio/socket.io-client.git
|
||||
socket.io-parser 4.2.4 MIT https://github.com/socketio/socket.io-parser.git
|
||||
spdx-expression-parse 3.0.1 MIT https://github.com/jslicense/spdx-expression-parse.js.git
|
||||
split.js 1.6.5 MIT https://github.com/nathancahill/split
|
||||
stable 0.1.8 MIT https://github.com/Two-Screen/stable.git
|
||||
strip-indent 4.0.0 MIT https://github.com/sindresorhus/strip-indent.git
|
||||
styled-components 5.3.11 MIT git+https://github.com/styled-components/styled-components.git
|
||||
stylehacks 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
stylis 4.2.0 MIT https://github.com/thysultan/stylis.js
|
||||
supports-color 5.5.0 MIT https://github.com/chalk/supports-color.git
|
||||
supports-color 7.2.0 MIT https://github.com/chalk/supports-color.git
|
||||
supports-preserve-symlinks-flag 1.0.0 MIT git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git
|
||||
svgo 2.8.0 MIT git://github.com/svg/svgo.git
|
||||
tempusdominus-core 5.19.3 MIT https://github.com/tempusdominus/core.git
|
||||
text-segmentation 1.0.3 MIT git+ssh://git@github.com/niklasvh/text-segmentation.git
|
||||
tiny-warning 1.0.3 MIT https://github.com/alexreardon/tiny-warning.git
|
||||
to-fast-properties 2.0.0 MIT https://github.com/sindresorhus/to-fast-properties.git
|
||||
to-regex-range 5.0.1 MIT https://github.com/micromatch/to-regex-range.git
|
||||
trim-newlines 4.1.1 MIT https://github.com/sindresorhus/trim-newlines.git
|
||||
unc-path-regex 0.1.2 MIT https://github.com/regexhq/unc-path-regex.git
|
||||
update-browserslist-db 1.0.11 MIT https://github.com/browserslist/update-db.git
|
||||
uplot 1.6.24 MIT git+https://github.com/leeoniya/uPlot.git
|
||||
uplot-react 1.1.4 MIT https://github.com/skalinichev/uplot-wrappers.git
|
||||
use-isomorphic-layout-effect 1.1.2 MIT git+https://github.com/Andarist/use-isomorphic-layout-effect.git
|
||||
util-deprecate 1.0.2 MIT git://github.com/TooTallNate/util-deprecate.git
|
||||
utrie 1.0.2 MIT git+ssh://git@github.com/niklasvh/utrie.git
|
||||
valid-filename 2.0.1 MIT https://github.com/sindresorhus/valid-filename.git
|
||||
wkx 0.5.0 MIT http://github.com/cschwarz/wkx.git
|
||||
ws 8.11.0 MIT https://github.com/websockets/ws.git
|
||||
xmlhttprequest-ssl 2.0.0 MIT git://github.com/mjwwit/node-XMLHttpRequest.git
|
||||
xterm 4.19.0 MIT https://github.com/xtermjs/xterm.js
|
||||
xterm-addon-fit 0.5.0 MIT https://github.com/xtermjs/xterm.js
|
||||
xterm-addon-search 0.8.2 MIT https://github.com/xtermjs/xterm.js
|
||||
xterm-addon-web-links 0.4.0 MIT https://github.com/xtermjs/xterm.js
|
||||
yocto-queue 0.1.0 MIT https://github.com/sindresorhus/yocto-queue.git
|
||||
@fortawesome/fontawesome-free 5.15.4 (CC-BY-4.0 AND OFL-1.1 AND MIT) https://github.com/FortAwesome/Font-Awesome
|
||||
@react-leaflet/core 1.1.1 Hippocratic-2.1 https://github.com/PaulLeCam/react-leaflet.git
|
||||
react-leaflet 3.2.5 Hippocratic-2.1 https://github.com/PaulLeCam/react-leaflet.git
|
||||
@sphinxxxx/color-conversion 2.2.2 ISC git+https://github.com/Sphinxxxx/color-conversion.git
|
||||
@trysound/sax 0.2.0 ISC git://github.com/svg/sax.git
|
||||
boolbase 1.0.0 ISC https://github.com/fb55/boolbase
|
||||
css-color-keywords 1.0.0 ISC https://github.com/sonicdoe/css-color-keywords.git
|
||||
css-declaration-sorter 6.4.0 ISC https://github.com/Siilwyn/css-declaration-sorter.git
|
||||
electron-to-chromium 1.4.437 ISC https://github.com/kilian/electron-to-chromium/
|
||||
fastq 1.15.0 ISC git+https://github.com/mcollina/fastq.git
|
||||
glob-parent 5.1.2 ISC https://github.com/gulpjs/glob-parent.git
|
||||
hosted-git-info 4.1.0 ISC git+https://github.com/npm/hosted-git-info.git
|
||||
jsonrepair 3.2.0 ISC https://github.com/josdejong/jsonrepair.git
|
||||
lru-cache 6.0.0 ISC git://github.com/isaacs/node-lru-cache.git
|
||||
lru-cache 5.1.1 ISC git://github.com/isaacs/node-lru-cache.git
|
||||
minimatch 3.1.2 ISC git://github.com/isaacs/minimatch.git
|
||||
picocolors 1.0.0 ISC https://github.com/alexeyraspopov/picocolors.git
|
||||
react-timer-hook 3.0.6 ISC git+https://github.com/amrlabib/react-timer-hook.git
|
||||
semver 6.3.0 ISC https://github.com/npm/node-semver
|
||||
semver 7.5.2 ISC https://github.com/npm/node-semver.git
|
||||
vanilla-picker 2.12.1 ISC https://github.com/Sphinxxxx/vanilla-picker.git
|
||||
yallist 4.0.0 ISC git+https://github.com/isaacs/yallist.git
|
||||
yallist 3.1.1 ISC git+https://github.com/isaacs/yallist.git
|
||||
yaml 1.10.2 ISC https://github.com/eemeli/yaml.git
|
||||
yargs-parser 20.2.9 ISC https://github.com/yargs/yargs-parser.git
|
||||
ace-builds 1.23.0 BSD-3-Clause https://github.com/ajaxorg/ace-builds.git
|
||||
hoist-non-react-statics 3.3.2 BSD-3-Clause git://github.com/mridgway/hoist-non-react-statics.git
|
||||
hyphenate-style-name 1.0.4 BSD-3-Clause git+ssh://git@github.com/rexxars/hyphenate-style-name.git
|
||||
istanbul-lib-coverage 3.2.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-lib-instrument 5.2.1 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-lib-report 3.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-lib-source-maps 4.0.1 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-reports 3.1.5 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
react-transition-group 4.4.5 BSD-3-Clause https://github.com/reactjs/react-transition-group.git
|
||||
source-map 0.6.1 BSD-3-Clause http://github.com/mozilla/source-map.git
|
||||
source-map 0.5.7 BSD-3-Clause http://github.com/mozilla/source-map.git
|
||||
source-map-js 1.0.2 BSD-3-Clause https://github.com/7rulnik/source-map-js.git
|
||||
sprintf-js 1.1.2 BSD-3-Clause https://github.com/alexei/sprintf.js.git
|
||||
caniuse-lite 1.0.30001506 CC-BY-4.0 https://github.com/browserslist/caniuse-lite.git
|
||||
css-select 4.3.0 BSD-2-Clause git://github.com/fb55/css-select.git
|
||||
css-what 6.1.0 BSD-2-Clause https://github.com/fb55/css-what
|
||||
domelementtype 2.3.0 BSD-2-Clause git://github.com/fb55/domelementtype.git
|
||||
domhandler 4.3.1 BSD-2-Clause git://github.com/fb55/domhandler.git
|
||||
domutils 2.8.0 BSD-2-Clause git://github.com/fb55/domutils.git
|
||||
entities 2.2.0 BSD-2-Clause git://github.com/fb55/entities.git
|
||||
leaflet 1.9.4 BSD-2-Clause git://github.com/Leaflet/Leaflet.git
|
||||
normalize-package-data 3.0.3 BSD-2-Clause git://github.com/npm/normalize-package-data.git
|
||||
nth-check 2.1.1 BSD-2-Clause https://github.com/fb55/nth-check
|
||||
uri-js 4.4.1 BSD-2-Clause http://github.com/garycourt/uri-js
|
||||
FileSaver 0.10.0 UNKNOWN Unknown
|
||||
heap 0.2.5 UNKNOWN git://github.com/qiao/heap.js.git
|
||||
mdn-data 2.0.14 CC0-1.0 https://github.com/mdn/data.git
|
||||
spdx-license-ids 3.0.13 CC0-1.0 https://github.com/jslicense/spdx-license-ids.git
|
||||
mousetrap 1.6.5 Apache-2.0 WITH LLVM-exception git://github.com/ccampbell/mousetrap.git
|
||||
pako 1.0.11 (MIT AND Zlib) https://github.com/nodeca/pako.git
|
||||
spdx-exceptions 2.3.0 CC-BY-3.0 https://github.com/kemitchell/spdx-exceptions.json.git
|
||||
tslib 2.5.3 0BSD https://github.com/Microsoft/tslib.git
|
||||
tslib 2.3.1 0BSD https://github.com/Microsoft/tslib.git
|
||||
type-fest 1.4.0 (MIT OR CC0-1.0) https://github.com/sindresorhus/type-fest.git
|
||||
webcabin-docker 2.2.5 MIT* Unknown
|
||||
|
||||
495 dependencies listed.
|
||||
|
||||
@@ -50,7 +50,7 @@ RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
npm install -g corepack && \
|
||||
corepack enable && \
|
||||
yarn set version berry && \
|
||||
yarn set version 3 && \
|
||||
yarn set version 4 && \
|
||||
yarn install && \
|
||||
yarn run bundle && \
|
||||
rm -rf node_modules \
|
||||
@@ -172,12 +172,12 @@ COPY --from=env-builder /venv /venv
|
||||
# Copy in the tools
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg17-builder /usr/local/lib/libpq.so.5.17 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/libzstd.so.1.5.6 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/libzstd.so.1.5.7 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/liblz4.so.1.10.0 /usr/lib/
|
||||
|
||||
RUN ln -s libpq.so.5.17 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.17 /usr/lib/libpq.so && \
|
||||
ln -s libzstd.so.1.5.6 /usr/lib/libzstd.so.1 && \
|
||||
ln -s libzstd.so.1.5.7 /usr/lib/libzstd.so.1 && \
|
||||
ln -s liblz4.so.1.10.0 /usr/lib/liblz4.so.1
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
@@ -192,7 +192,6 @@ COPY pkg/docker/entrypoint.sh /entrypoint.sh
|
||||
|
||||
# License files
|
||||
COPY LICENSE /pgadmin4/LICENSE
|
||||
COPY DEPENDENCIES /pgadmin4/DEPENDENCIES
|
||||
|
||||
# Install runtime dependencies and configure everything in one RUN step
|
||||
RUN apk add --no-cache \
|
||||
@@ -222,7 +221,7 @@ RUN apk add --no-cache \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix && \
|
||||
echo "pgadminr ALL = NOPASSWD: /usr/sbin/postfix start" >> /etc/sudoers.d/postfix
|
||||
|
||||
USER pgadmin
|
||||
USER 5050
|
||||
|
||||
# Finish up
|
||||
VOLUME /var/lib/pgadmin
|
||||
|
||||
@@ -28,7 +28,7 @@ CALL :CREATE_PYTHON_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :GENERATE_SBOM || EXIT /B 1
|
||||
CALL :CREATE_INSTALLER || EXIT /B 1
|
||||
CALL :SIGN_INSTALLER || EXIT /B 1
|
||||
CALL :VERIFY_SIGNATURE || EXIT /B 1
|
||||
|
||||
EXIT /B %ERRORLEVEL%
|
||||
REM Main build sequence Ends
|
||||
@@ -216,7 +216,7 @@ REM Main build sequence Ends
|
||||
ECHO Installing javascript dependencies...
|
||||
CD "%BUILDROOT%\web"
|
||||
CALL yarn set version berry || EXIT /B 1
|
||||
CALL yarn set version 3 || EXIT /B 1
|
||||
CALL yarn set version 4 || EXIT /B 1
|
||||
CALL yarn install || EXIT /B 1
|
||||
CALL npm rebuild || EXIT /B 1
|
||||
|
||||
@@ -239,7 +239,6 @@ REM Main build sequence Ends
|
||||
|
||||
ECHO Staging license files...
|
||||
COPY "%WD%\LICENSE" "%BUILDROOT%\" > nul || EXIT /B 1
|
||||
COPY "%WD%\DEPENDENCIES" "%BUILDROOT%\" > nul || EXIT /B 1
|
||||
|
||||
ECHO Creating config_distro.py
|
||||
ECHO SERVER_MODE = False > "%BUILDROOT%\web\config_distro.py"
|
||||
@@ -272,8 +271,7 @@ REM Main build sequence Ends
|
||||
CD "%BUILDROOT%\runtime\resources\app\"
|
||||
|
||||
CALL yarn set version berry || EXIT /B 1
|
||||
CALL yarn set version 3 || EXIT /B 1
|
||||
CALL yarn plugin import workspace-tools || EXIT /B 1
|
||||
CALL yarn set version 4 || EXIT /B 1
|
||||
CALL yarn workspaces focus --production || EXIT /B 1
|
||||
|
||||
ECHO Removing yarn cache...
|
||||
@@ -284,6 +282,7 @@ REM Main build sequence Ends
|
||||
|
||||
REM WGET
|
||||
FOR /f "tokens=*" %%i IN ('npm info electron version') DO SET "ELECTRON_VERSION=%%i"
|
||||
SET ELECTRON_VERSION="35.4.0"
|
||||
:GET_NW
|
||||
wget https://github.com/electron/electron/releases/download/v%ELECTRON_VERSION%/electron-v%ELECTRON_VERSION%-win32-x64.zip -O "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64.zip"
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
@@ -357,7 +356,7 @@ REM Main build sequence Ends
|
||||
DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul
|
||||
|
||||
ECHO Creating windows installer using INNO tool...
|
||||
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" "%WD%\pkg\win32\installer.iss" || EXIT /B 1
|
||||
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" "%WD%\pkg\win32\installer.iss" "/SpgAdminSigntool=%PGADMIN_SIGNTOOL_DIR%\signtool.exe sign /fd certHash /tr http://timestamp.digicert.com /td SHA256 $f" || EXIT /B 1
|
||||
|
||||
ECHO Renaming installer...
|
||||
MOVE "%WD%\pkg\win32\Output\pgadmin4-setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
@@ -374,13 +373,14 @@ REM Main build sequence Ends
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
:SIGN_INSTALLER
|
||||
ECHO Attempting to sign the installer...
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /fd certHash /tr http://timestamp.digicert.com /td SHA256 "%DISTROOT%\%INSTALLERNAME%"
|
||||
:VERIFY_SIGNATURE
|
||||
ECHO Verifying the installer signature...
|
||||
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" verify /pa /v "%DISTROOT%\%INSTALLERNAME%"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO ************************************************************
|
||||
ECHO * Failed to sign the installer
|
||||
ECHO * Failed to verify signature of the installer
|
||||
ECHO ************************************************************
|
||||
PAUSE
|
||||
)
|
||||
|
||||
@@ -20,7 +20,7 @@ which will fork a Python server process and display the UI.
|
||||
## Prerequisites
|
||||
1. Install Node.js 20 and above (https://nodejs.org/en/download)
|
||||
2. yarn (https://yarnpkg.com/getting-started/install)
|
||||
3. Python 3.8 and above (https://www.python.org/downloads/)
|
||||
3. Python 3.9 and above (https://www.python.org/downloads/)
|
||||
4. PostgreSQL server (https://www.postgresql.org/download)
|
||||
|
||||
Start by enabling Corepack, if it isn't already;
|
||||
@@ -42,9 +42,9 @@ installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC
|
||||
(venv) $ make install-node
|
||||
(venv) $ make bundle
|
||||
$ cd $PGADMIN4_SRC
|
||||
$ make install-node
|
||||
$ make bundle
|
||||
```
|
||||
|
||||
On Windows systems (where "make" is not available), the following commands
|
||||
@@ -59,7 +59,7 @@ C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
# Configuring the Python Environment
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.8 and later are currently supported. It is recommended that a
|
||||
Python version 3.9 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
@@ -81,7 +81,7 @@ simple - adapt as required for your distribution:
|
||||
so update that to the latest:
|
||||
|
||||
```bash
|
||||
$ pip install --upgrade pip
|
||||
(venv) $ pip install --upgrade pip
|
||||
```
|
||||
|
||||
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
.. _export_data_using_query:
|
||||
|
||||
***************************************
|
||||
`Export Data Using Query Dialog`:index:
|
||||
***************************************
|
||||
|
||||
Use the *Export Data Using Query* dialog to copy data to a file.
|
||||
|
||||
The *Export Data Using Query* dialog organizes the export of data through the
|
||||
*General*, *Options* and *Query* tabs.
|
||||
|
||||
.. image:: images/export_query_general.png
|
||||
:alt: Export data using query dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify export preferences:
|
||||
|
||||
* Enter the name of the target file in the *Filename* field.
|
||||
Optionally, select the *Browse* icon (ellipsis) to the right to navigate
|
||||
into a directory and select a file.
|
||||
|
||||
* Use the drop-down listbox in the *Format* field to specify the file type.
|
||||
Select:
|
||||
|
||||
* *binary* for a .bin file.
|
||||
* *csv* for a .csv file.
|
||||
* *text* for a .txt file.
|
||||
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
.. image:: images/export_query_options.png
|
||||
:alt: Export data using query dialog options tab
|
||||
:align: center
|
||||
|
||||
* Use the fields in the *Options* tab to specify additional information:
|
||||
|
||||
* Move the *Header* switch to the *Yes* position to include the table header
|
||||
with the data rows. If you include the table header, the first row of the
|
||||
file will contain the column names.
|
||||
* If you are exporting data, specify the delimiter that will separate the
|
||||
columns within the target file in the *Delimiter* field. The separating
|
||||
character can be a colon, semicolon, a vertical bar, or a tab.
|
||||
* Specify a quoting character used in the *Quote* field. Quoting can be
|
||||
applied to string columns only (i.e. numeric columns will not be quoted)
|
||||
or all columns regardless of data type. The character used for quoting can
|
||||
be a single quote or a double quote.
|
||||
* Specify a character that should appear before a data character that matches
|
||||
the *QUOTE* value in the *Escape* field.
|
||||
* Use the *NULL String* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
|
||||
Click the *Query* tab to continue.
|
||||
|
||||
.. image:: images/export_query.png
|
||||
:alt: Export data using query dialog query tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Query* tab to write the query that will be exported:
|
||||
|
||||
* Use the *Export Data Query* field to specifies A SELECT, VALUES, INSERT, UPDATE,
|
||||
DELETE, or MERGE command whose results are to be copied .
|
||||
|
||||
* Use *Force Quote columns* field to forces quoting to be used for all non-NULL
|
||||
values in each specified column. NULL output is never quoted. This is a creatable
|
||||
select control. If you would like to quote all columns then provide only '*' in
|
||||
the field.
|
||||
|
||||
After completing the *Export Data Using Query* dialog, click the *OK* button to
|
||||
perform the export. pgAdmin will notify you when the background
|
||||
process completes:
|
||||
|
||||
.. image:: images/export_query_complete.png
|
||||
:alt: Export data using query completion notification
|
||||
:align: center
|
||||
|
||||
|
||||
Use the *View Processes* button on the notification to open the *Process
|
||||
Watcher* and review detailed information about the execution of the command
|
||||
that performed the export:
|
||||
|
||||
Use the **End Process** button to end the Export process.
|
||||
|
||||
.. image:: images/export_query_pw.png
|
||||
:alt: Export data using query process watcher
|
||||
:align: center
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the exported file on the client machine .
|
||||
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 320 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 189 KiB |
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 284 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 176 KiB |
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 234 KiB |
|
Before Width: | Height: | Size: 238 KiB After Width: | Height: | Size: 220 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 247 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 62 KiB |
@@ -33,18 +33,29 @@ Use the fields in the *General* tab to specify import and export preferences:
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
* use the drop-down listbox in the *On Error* field to specify how to behave
|
||||
when encountering an error converting a columns input value into its data type.
|
||||
An error_action value of stop means fail the command, while ignore means discard
|
||||
the input row and continue with the next one. The default is stop. This option is
|
||||
available from PG/EPAS version 17 and above.
|
||||
|
||||
* use the drop-down listbox in the *Log Verbosity* field to specify the amount
|
||||
of messages emitted by a COPY command: default or verbose. This is currently
|
||||
used in Import only when ON_ERROR option is set to ignore. This option is
|
||||
available from PG/EPAS version 17 and above.
|
||||
|
||||
.. image:: images/import_export_options.png
|
||||
:alt: Import Export data dialog options tab
|
||||
:align: center
|
||||
|
||||
* Use the fields in the *Options* tab to specify additional information:
|
||||
|
||||
* Move the *OID* switch to the *Yes* position to include the *OID* column.
|
||||
The *OID* is a system-assigned value that may not be modified. The default
|
||||
is *No*.
|
||||
* Move the *Header* switch to the *Yes* position to include the table header
|
||||
with the data rows. If you include the table header, the first row of the
|
||||
file will contain the column names.
|
||||
* Move the *Freeze* switch to the *Yes* position to requests copying the
|
||||
data with rows already frozen, just as they would be after running the
|
||||
VACUUM FREEZE command.
|
||||
* If you are exporting data, specify the delimiter that will separate the
|
||||
columns within the target file in the *Delimiter* field. The separating
|
||||
character can be a colon, semicolon, a vertical bar, or a tab.
|
||||
@@ -54,8 +65,11 @@ Use the fields in the *General* tab to specify import and export preferences:
|
||||
be a single quote or a double quote.
|
||||
* Specify a character that should appear before a data character that matches
|
||||
the *QUOTE* value in the *Escape* field.
|
||||
* Use the *NULL Strings* field to specify a string that will represent a null
|
||||
* Use the *NULL String* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
* Use the *Default String* field to specify a string that will represent a default value.
|
||||
Each time the string is found in the input file, the default value of the corresponding
|
||||
column will be used. This option is available from PG/EPAS version 16 and above.
|
||||
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
@@ -71,29 +85,39 @@ or exported:
|
||||
the left of the column name. Click an empty spot inside the field to access
|
||||
the drop-down list.
|
||||
|
||||
* If enabled, click inside the *Force Quote columns* field to forces quoting
|
||||
to be used for all non-NULL values in each specified column. NULL output is
|
||||
never quoted. To delete a column, click the *x* to the left of the column name.
|
||||
|
||||
* If enabled, click inside the *NOT NULL columns* field to select one or more
|
||||
columns that will not be checked for a NULL value. To delete a column, click
|
||||
the *x* to the left of the column name.
|
||||
|
||||
* If enabled, click inside the *NULL columns* field to match the specified columns
|
||||
values against the null string, even if it has been quoted, and if a match is
|
||||
found set the value to NULL. To delete a column, click the *x* to the left of the
|
||||
column name.
|
||||
|
||||
After completing the *Import/Export data* dialog, click the *OK* button to
|
||||
perform the import or export. pgAdmin will inform you when the background
|
||||
perform the import or export. pgAdmin will notify you when the background
|
||||
process completes:
|
||||
|
||||
.. image:: images/import_export_complete.png
|
||||
:alt: Import Export data completion notification
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Import/Export process.
|
||||
|
||||
Use the *Click here for details* link on the notification to open the *Process
|
||||
Use the *View Processes* button on the notification to open the *Process
|
||||
Watcher* and review detailed information about the execution of the command
|
||||
that performed the import or export:
|
||||
|
||||
Use the **End Process** button to end the Import/Export process.
|
||||
|
||||
.. image:: images/import_export_pw.png
|
||||
:alt: Import Export data process watcher
|
||||
:align: center
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the exported file on the client machine .
|
||||
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
@@ -14,6 +14,7 @@ granting user privileges, and performing VACUUM, ANALYZE and REINDEX functions.
|
||||
add_restore_point_dialog
|
||||
change_password_dialog
|
||||
grant_wizard
|
||||
export_data_using_query
|
||||
import_export_data
|
||||
maintenance_dialog
|
||||
storage_manager
|
||||
@@ -63,11 +63,11 @@ following options (in alphabetical order):
|
||||
| *Create* | Click *Create* to access a context menu that provides context-sensitive selections. |
|
||||
| | Your selection opens a *Create* dialog for creating a new object. |
|
||||
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Delete* | Click to delete the currently selected object from the server. |
|
||||
| *Drop* | Click to drop the currently selected object from the server. |
|
||||
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Delete (Cascade)* | Click to delete the currently selected object and all dependent objects from the server. |
|
||||
| *Drop (Cascade)* | Click to drop the currently selected object and all dependent objects from the server. |
|
||||
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Delete (Force)* | Click to delete the currently selected database with force option. |
|
||||
| *Drop (Force)* | Click to drop the currently selected database with force option. |
|
||||
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Disconnect from server* | Click to disconnect from the currently selected server. |
|
||||
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
|
||||
@@ -103,44 +103,46 @@ The Tools Menu
|
||||
|
||||
Use the *Tools* menu to access the following options (in alphabetical order):
|
||||
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
+===========================+===========================================================================================================================================+
|
||||
| *ERD Tool* | Click to open the :ref:`ERD Tool <erd_tool>` and start designing your database. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Grant Wizard...* | Click to access the :ref:`Grant Wizard <grant_wizard>` tool. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *PSQL Tool* | Click to open the :ref:`PSQL Tool <psql_tool>` and start PSQL in the current database context. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Query tool* | Click to open the :ref:`Query tool <query_tool>` for the currently selected object. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Schema Diff* | Click to open the :ref:`Schema Diff <schema_diff_feature>` and start comparing two database or two schema. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Backup Globals...* | Click to open the :ref:`Backup Globals... <backup_globals_dialog>` dialog to backup cluster objects. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Backup Server...* | Click to open the :ref:`Backup Server... <backup_server_dialog>` dialog to backup a server. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Backup...* | Click to open the :ref:`Backup... <backup_dialog>` dialog to backup database objects. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Restore...* | Click to access the :ref:`Restore <restore_dialog>` dialog to restore database files from a backup. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Import/Export Data...* | Click to open the :ref:`Import/Export data... <import_export_data>` dialog to import or export data from a table. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Maintenance...* | Click to open the :ref:`Maintenance... <maintenance_dialog>` dialog to VACUUM, ANALYZE, REINDEX, or CLUSTER. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Search Objects...* | Click to open the :ref:`Search Objects... <search_objects>` and start searching any kind of objects in a database. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Add named restore point* | Click to open the :ref:`Add named restore point... <add_restore_point_dialog>` dialog to take a point-in-time snapshot of the current |
|
||||
| | server state. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Pause replay of WAL* | Click to pause the replay of the WAL log. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Resume replay of WAL* | Click to resume the replay of the WAL log. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Reload Configuration...* | Click to update configuration files without restarting the server. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Storage Manager* | Click to open the :ref:`Storage Manager <storage_manager>` to upload, delete, or download the backup files. |
|
||||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
+==============================+===========================================================================================================================================+
|
||||
| *ERD Tool* | Click to open the :ref:`ERD Tool <erd_tool>` and start designing your database. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Grant Wizard...* | Click to access the :ref:`Grant Wizard <grant_wizard>` tool. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *PSQL Tool* | Click to open the :ref:`PSQL Tool <psql_tool>` and start PSQL in the current database context. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Query tool* | Click to open the :ref:`Query tool <query_tool>` for the currently selected object. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Schema Diff* | Click to open the :ref:`Schema Diff <schema_diff_feature>` and start comparing two database or two schema. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Backup Globals...* | Click to open the :ref:`Backup Globals... <backup_globals_dialog>` dialog to backup cluster objects. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Backup Server...* | Click to open the :ref:`Backup Server... <backup_server_dialog>` dialog to backup a server. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Backup...* | Click to open the :ref:`Backup... <backup_dialog>` dialog to backup database objects. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Restore...* | Click to access the :ref:`Restore <restore_dialog>` dialog to restore database files from a backup. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Export Data Using Query...* | Click to open the :ref:`Export Data Using Query... <export_data_using_query>` dialog to export data from a table using query. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Import/Export Data...* | Click to open the :ref:`Import/Export data... <import_export_data>` dialog to import or export data from a table. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Maintenance...* | Click to open the :ref:`Maintenance... <maintenance_dialog>` dialog to VACUUM, ANALYZE, REINDEX, or CLUSTER. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Search Objects...* | Click to open the :ref:`Search Objects... <search_objects>` and start searching any kind of objects in a database. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Add named restore point* | Click to open the :ref:`Add named restore point... <add_restore_point_dialog>` dialog to take a point-in-time snapshot of the current |
|
||||
| | server state. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Pause replay of WAL* | Click to pause the replay of the WAL log. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Resume replay of WAL* | Click to resume the replay of the WAL log. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Reload Configuration...* | Click to update configuration files without restarting the server. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Storage Manager* | Click to open the :ref:`Storage Manager <storage_manager>` to upload, delete, or download the backup files. |
|
||||
+------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
The Help Menu
|
||||
*************
|
||||
|
||||
@@ -48,6 +48,8 @@ and modify the values for the following parameters:
|
||||
Useful for checking AzureAD_ *wids* or *groups*, GitLab_ *owner*, *maintainer* and *reporter* claims."
|
||||
"OAUTH2_SSL_CERT_VERIFICATION", "Set this variable to False to disable SSL certificate verification for OAuth2 provider.
|
||||
This may need to set False, in case of self-signed certificates."
|
||||
"OAUTH2_CHALLENGE_METHOD", "Enable PKCE workflow. PKCE method name, only *S256* is supported"
|
||||
"OAUTH2_RESPONSE_TYPE", "Enable PKCE workflow. Mandatory with OAUTH2_CHALLENGE_METHOD, must be set to *code*"
|
||||
|
||||
Redirect URL
|
||||
============
|
||||
@@ -65,12 +67,19 @@ the PostgreSQL server password.
|
||||
To accomplish this, set the configuration parameter MASTER_PASSWORD to *True*, so upon setting the master password,
|
||||
it will be used as an encryption key while storing the password. If it is False, the server password can not be stored.
|
||||
|
||||
|
||||
Login Page
|
||||
============
|
||||
==========
|
||||
|
||||
After configuration, on restart, you can see the login page with the Oauth2 login button(s).
|
||||
|
||||
.. image:: images/oauth2_login.png
|
||||
:alt: Oauth2 login
|
||||
:align: center
|
||||
|
||||
PKCE Workflow
|
||||
=============
|
||||
|
||||
Ref: https://oauth.net/2/pkce
|
||||
|
||||
To enable PKCE workflow, set the configuration parameters OAUTH2_CHALLENGE_METHOD to *S256* and OAUTH2_RESPONSE_TYPE to *code*.
|
||||
Both parameters are mandatory to enable PKCE workflow.
|
||||
@@ -2,24 +2,31 @@
|
||||
.. _preferences:
|
||||
|
||||
***************************
|
||||
`Preferences Dialog`:index:
|
||||
`Preferences`:index:
|
||||
***************************
|
||||
|
||||
Use options on the *Preferences* dialog to customize the behavior of the client.
|
||||
To open the *Preferences* dialog, select *Preferences* from the *File* menu or
|
||||
Use options in the *Preferences* tab to customize the behavior of the client.
|
||||
To open the *Preferences* tab, select *Preferences* from the *File* menu or
|
||||
click on the *Settings* button at the bottom left corner in case of Workspace
|
||||
layout.
|
||||
|
||||
.. image:: images/preferences_menu.png
|
||||
:alt: Preferences menu
|
||||
Header
|
||||
******
|
||||
|
||||
.. image:: images/preferences_header.png
|
||||
:alt: Preferences browser display options
|
||||
:align: center
|
||||
|
||||
The left pane of the *Preferences* dialog displays a tree control; each node of
|
||||
* Use the *Save* button to save any preference changes.
|
||||
* Use the *Reset all preferences* button to restore all preferences to their default values.
|
||||
* Use the *Help* button to open preferences help.
|
||||
* Quickly search all preferences using the *Search* box. It finds matches in both labels and
|
||||
help messages.
|
||||
|
||||
The left pane of the *Preferences* tab displays a tree control; each node of
|
||||
the tree control provides access to options that are related to the node under
|
||||
which they are displayed.
|
||||
|
||||
* Click the *Reset all preferences* button to restore all preferences to their default values.
|
||||
|
||||
The Browser Node
|
||||
****************
|
||||
|
||||
@@ -27,7 +34,7 @@ Use preferences found in the *Browser* node of the tree control to personalize
|
||||
your workspace.
|
||||
|
||||
.. image:: images/preferences_browser_display.png
|
||||
:alt: Preferences dialog browser display options
|
||||
:alt: Preferences browser display options
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Display* panel to specify general display preferences:
|
||||
@@ -36,27 +43,30 @@ Use the fields on the *Display* panel to specify general display preferences:
|
||||
be automatically expanded if a treeview node is expanded and has only a single
|
||||
child.
|
||||
|
||||
* When the *Confirm before Close/Reset in object properties dialog?* switch is
|
||||
set to *True*, pgAdmin will warn you before closing the properties dialog of
|
||||
an object if there are any unsaved changes. On user confirmation,
|
||||
the properties dialog will close.
|
||||
|
||||
* When the *Confirm on close or refresh?* switch is set to *True*, pgAdmin will
|
||||
attempt to catch browser close or refresh events and prompt before allowing
|
||||
them to continue.
|
||||
|
||||
* Use the *Object explorer state saving interval* field to set the treeview state
|
||||
saving interval. A value of *-1* will disable the treeview state saving
|
||||
functionality.
|
||||
|
||||
* When the *Confirm before closing properties with unsaved changes* switch is set to *True*,
|
||||
pgAdmin will warn you before closing the properties dialog of an object if there
|
||||
are any unsaved changes. On user confirmation, the properties dialog will close.
|
||||
|
||||
* When the *Confirm on close or refresh* switch is set to *True*, pgAdmin will
|
||||
attempt to catch browser close or refresh events and prompt before allowing
|
||||
them to continue.
|
||||
|
||||
* When the *Hide shared servers?* switch is set to *True*, the client will hide
|
||||
all the shared servers from the object explorer. **Note:** This option is visible only when
|
||||
pgAdmin is running in server mode.
|
||||
|
||||
* When the *Show empty object collections?* switch is turned off, then all object
|
||||
collections which are empty will be hidden from browser tree.
|
||||
|
||||
* When the *Show system objects?* switch is set to *True*, the client will
|
||||
display system objects such as system schemas (for example, *pg_temp*) or
|
||||
system columns (for example, *xmin* or *ctid*) in the tree control.
|
||||
|
||||
* When the *Show template databases?* switch is set to *True*, the client will
|
||||
display template databases.
|
||||
|
||||
@@ -64,7 +74,7 @@ Use the fields on the *Keyboard shortcuts* panel to configure shortcuts for the
|
||||
main window navigation:
|
||||
|
||||
.. image:: images/preferences_browser_keyboard_shortcuts.png
|
||||
:alt: Preferences dialog browser keyboard shortcuts section
|
||||
:alt: Preferences browser keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
* The panel displays a list of keyboard shortcuts available for the main window;
|
||||
@@ -75,7 +85,7 @@ Use the fields on the *Nodes* panel to select the object types that will be
|
||||
displayed in the *Browser* tree control:
|
||||
|
||||
.. image:: images/preferences_browser_nodes.png
|
||||
:alt: Preferences dialog browser nodes section
|
||||
:alt: Preferences browser nodes section
|
||||
:align: center
|
||||
|
||||
* The panel displays a list of database objects; slide the switch located next
|
||||
@@ -87,7 +97,7 @@ Use the fields on the *Object Breadcrumbs* panel to change object breadcrumbs
|
||||
related settings:
|
||||
|
||||
.. image:: images/preferences_browser_breadcrumbs.png
|
||||
:alt: Preferences dialog object breadcrumbs section
|
||||
:alt: Preferences object breadcrumbs section
|
||||
:align: center
|
||||
|
||||
* Use *Enable object breadcrumbs?* to enable or disable object breadcrumbs
|
||||
@@ -101,7 +111,7 @@ Use the fields on the *Processes* panel to change processes tab
|
||||
related settings:
|
||||
|
||||
.. image:: images/preferences_browser_processes.png
|
||||
:alt: Preferences dialog processes section
|
||||
:alt: Preferences processes section
|
||||
:align: center
|
||||
|
||||
* Change *Process details/logs retention days* to the number of days,
|
||||
@@ -110,7 +120,7 @@ related settings:
|
||||
Use fields on the *Properties* panel to specify browser properties:
|
||||
|
||||
.. image:: images/preferences_browser_properties.png
|
||||
:alt: Preferences dialog browser properties section
|
||||
:alt: Preferences browser properties section
|
||||
:align: center
|
||||
|
||||
* Include a value in the *Count rows if estimated less than* field to perform a
|
||||
@@ -124,13 +134,15 @@ Use fields on the *Properties* panel to specify browser properties:
|
||||
Use field on *Tab settings* panel to specify the tab related properties.
|
||||
|
||||
.. image:: images/preferences_browser_tab_settings.png
|
||||
:alt: Preferences dialog browser properties section
|
||||
:alt: Preferences browser properties section
|
||||
:align: center
|
||||
|
||||
* Use *Debugger tab title placeholder* field to customize the Debugger tab title.
|
||||
|
||||
* When the *Dynamic tab size* If set to True, the tabs will take full size as per the title, it will also applicable for already opened tabs
|
||||
|
||||
* Use the *PSQL tool tab title placeholder* field to customize the PSQL tool tab title.
|
||||
|
||||
* When the *Open in new browser tab* filed is selected for Query tool, Schema Diff or Debugger, it will
|
||||
open in a new browser tab when invoked.
|
||||
|
||||
@@ -144,7 +156,7 @@ The Dashboards Node
|
||||
Expand the *Dashboards* node to specify your dashboard display preferences.
|
||||
|
||||
.. image:: images/preferences_dashboard_display.png
|
||||
:alt: Preferences dialog dashboard display options
|
||||
:alt: Preferences dashboard display options
|
||||
:align: center
|
||||
|
||||
* Set the warning and alert threshold value to highlight the long-running
|
||||
@@ -157,7 +169,7 @@ Expand the *Dashboards* node to specify your dashboard display preferences.
|
||||
dashboards.
|
||||
|
||||
.. image:: images/preferences_dashboard_refresh.png
|
||||
:alt: Preferences dialog dashboard refresh options
|
||||
:alt: Preferences dashboard refresh options
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Refresh rates* panel to specify your refersh rates
|
||||
@@ -184,6 +196,9 @@ preferences for the graphs on the *Dashboard* tab:
|
||||
* Use the *Memory usage statistics refresh rate* field to specify the number
|
||||
of seconds between memory usage statistics samples displayed in graphs.
|
||||
|
||||
* Use the *PGD replication lag refresh rate* field to specify the number
|
||||
of seconds between PGD replication lag samples displayed in graphs.
|
||||
|
||||
* Use the *Percentage of CPU time used by different process modes statistics refresh rate*
|
||||
field to specify the number of seconds between Percentage of CPU time used by different
|
||||
process modes samples displayed in graphs.
|
||||
@@ -214,7 +229,7 @@ Use the fields on the *Keyboard shortcuts* panel to configure shortcuts for the
|
||||
debugger window navigation:
|
||||
|
||||
.. image:: images/preferences_debugger_keyboard_shortcuts.png
|
||||
:alt: Preferences dialog debugger keyboard shortcuts section
|
||||
:alt: Preferences debugger keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
The ERD Tool Node
|
||||
@@ -226,13 +241,13 @@ Use the fields on the *Keyboard shortcuts* panel to configure shortcuts for the
|
||||
ERD Tool window navigation:
|
||||
|
||||
.. image:: images/preferences_erd_keyboard_shortcuts.png
|
||||
:alt: Preferences dialog erd keyboard shortcuts section
|
||||
:alt: Preferences erd keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Options* panel to manage ERD preferences.
|
||||
|
||||
.. image:: images/preferences_erd_options.png
|
||||
:alt: Preferences dialog erd options section
|
||||
:alt: Preferences erd options section
|
||||
:align: center
|
||||
|
||||
|
||||
@@ -253,7 +268,7 @@ The Graphs Node
|
||||
Expand the *Graphs* node to specify your Graphs display preferences.
|
||||
|
||||
.. image:: images/preferences_dashboard_graphs.png
|
||||
:alt: Preferences dialog dashboard graph options
|
||||
:alt: Preferences dashboard graph options
|
||||
:align: center
|
||||
|
||||
* Use the *Chart line width* field to specify the width of the lines on the
|
||||
@@ -274,7 +289,7 @@ The Miscellaneous Node
|
||||
Expand the *Miscellaneous* node to specify miscellaneous display preferences.
|
||||
|
||||
.. image:: images/preferences_misc_file_downloads.png
|
||||
:alt: Preferences dialog file downloads section
|
||||
:alt: Preferences file downloads section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *File Downloads* panel to manage file downloads related preferences.
|
||||
@@ -292,7 +307,7 @@ Use the fields on the *File Downloads* panel to manage file downloads related pr
|
||||
Use the fields on the *User Interface* panel to set the user interface related preferences.
|
||||
|
||||
.. image:: images/preferences_misc_user_interface.png
|
||||
:alt: Preferences dialog user interface section
|
||||
:alt: Preferences user interface section
|
||||
:align: center
|
||||
|
||||
* Use the *Language* drop-down listbox to select the display language for
|
||||
@@ -309,6 +324,13 @@ Use the fields on the *User Interface* panel to set the user interface related p
|
||||
this setting is False, meaning that Query Tool/PSQL tabs will open in the currently
|
||||
active workspace (either the default or the workspace selected at the time of opening).
|
||||
|
||||
* When the *Save the application state?* option is enabled the current state of various
|
||||
tools—such as Query Tool, ERD, Schema Diff, and PSQL—will be saved in the encrypted
|
||||
format. If the application is closed unexpectedly, the tab is accidentally closed,
|
||||
or the page is refreshed, the saved state will be automatically restored for
|
||||
each respective tool. **Note:** Saving the application state will not preserve data for tool tabs opened in
|
||||
separate browser tabs when running in server mode.Any tool referring ad-hoc server connection will not be restored.
|
||||
|
||||
* Use the *Themes* drop-down listbox to select the theme for pgAdmin. You'll also get a preview just below the
|
||||
drop down. You can also submit your own themes,
|
||||
check `here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_ how.
|
||||
@@ -322,7 +344,7 @@ Expand the *Paths* node to specify the locations of supporting utility and help
|
||||
files.
|
||||
|
||||
.. image:: images/preferences_paths_binary.png
|
||||
:alt: Preferences dialog binary path section
|
||||
:alt: Preferences binary path section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Binary paths* panel to specify the path to the directory
|
||||
@@ -345,7 +367,7 @@ monitored databases:
|
||||
programs (pg_dump, pg_dumpall, pg_restore and psql) and there respective versions.
|
||||
|
||||
.. image:: images/preferences_paths_help.png
|
||||
:alt: Preferences dialog binary path help section
|
||||
:alt: Preferences binary path help section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Help* panel to specify the location of help files.
|
||||
@@ -363,7 +385,7 @@ Expand the *Query Tool* node to access panels that allow you to specify your
|
||||
preferences for the Query Editor tool.
|
||||
|
||||
.. image:: images/preferences_sql_auto_completion.png
|
||||
:alt: Preferences dialog sqleditor auto completion option
|
||||
:alt: Preferences sqleditor auto completion option
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Auto Completion* panel to set the auto completion options.
|
||||
@@ -375,7 +397,7 @@ Use the fields on the *Auto Completion* panel to set the auto completion options
|
||||
shown in upper case.
|
||||
|
||||
.. image:: images/preferences_sql_csv_output.png
|
||||
:alt: Preferences dialog sqleditor csv output option
|
||||
:alt: Preferences sqleditor csv output option
|
||||
:align: center
|
||||
|
||||
Use the fields on the *CSV/TXT Output* panel to control the CSV/TXT output.
|
||||
@@ -390,7 +412,7 @@ Use the fields on the *CSV/TXT Output* panel to control the CSV/TXT output.
|
||||
specified string in the output file. Default is set to 'NULL'.
|
||||
|
||||
.. image:: images/preferences_sql_display.png
|
||||
:alt: Preferences dialog sqleditor display options
|
||||
:alt: Preferences sqleditor display options
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Display* panel to specify your preferences for the Query
|
||||
@@ -406,11 +428,15 @@ Tool display.
|
||||
will show notifications on successful query execution.
|
||||
|
||||
.. image:: images/preferences_sql_editor.png
|
||||
:alt: Preferences dialog sqleditor editor settings
|
||||
:alt: Preferences sqleditor editor settings
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Editor* panel to change settings of the query editor.
|
||||
|
||||
* Use the *Auto-indent new line?* switch to specify whether the editor will
|
||||
automatically indent new lines. When set to *True*, the editor will indent
|
||||
new lines according to the indentation of the previous line.
|
||||
|
||||
* When the *Brace matching?* switch is set to *True*, the editor will highlight
|
||||
pairs of matched braces.
|
||||
|
||||
@@ -421,9 +447,16 @@ Use the fields on the *Editor* panel to change settings of the query editor.
|
||||
font should already be installed on your system. If the font is not found,
|
||||
the editor will fall back to the default font, Source Code Pro.
|
||||
|
||||
* When the *Font ligatures?* switch is set to *True*, ligatures will be
|
||||
enabled in SQL text boxes and editors provided the configured font family
|
||||
supports them.
|
||||
|
||||
* Use the *Font size* field to specify the font size that will be used in text
|
||||
boxes and editors.
|
||||
|
||||
* When the *Highlight selection matches?* switch is set to *True*, the editor will
|
||||
highlight matched selected text.
|
||||
|
||||
* When the *Insert bracket pairs?* switch is set to *True*, the editor will
|
||||
automatically insert paired brackets.
|
||||
|
||||
@@ -434,11 +467,8 @@ Use the fields on the *Editor* panel to change settings of the query editor.
|
||||
changed to text/plain. Keyword highlighting and code folding will be disabled.
|
||||
This will improve editor performance with large files.
|
||||
|
||||
* When the *Highlight selection matches?* switch is set to *True*, the editor will
|
||||
highlight matched selected text.
|
||||
|
||||
.. image:: images/preferences_sql_explain.png
|
||||
:alt: Preferences dialog sqleditor explain options
|
||||
:alt: Preferences sqleditor explain options
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Explain* panel to specify the level of detail included in
|
||||
@@ -467,7 +497,7 @@ a graphical EXPLAIN.
|
||||
will include extended information about the query execution plan.
|
||||
|
||||
.. image:: images/preferences_graph_visualiser.png
|
||||
:alt: Preferences dialog sqleditor graph visualiser section
|
||||
:alt: Preferences sqleditor graph visualiser section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Graph Visualiser* panel to specify the settings
|
||||
@@ -477,7 +507,7 @@ related to graphs.
|
||||
be plotted on a chart.
|
||||
|
||||
.. image:: images/preferences_sql_options.png
|
||||
:alt: Preferences dialog sqleditor options section
|
||||
:alt: Preferences sqleditor options section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Options* panel to manage editor preferences.
|
||||
@@ -492,29 +522,29 @@ Use the fields on the *Options* panel to manage editor preferences.
|
||||
the CREATE sql of the selected object will be copied to query tool when query tool
|
||||
will open.
|
||||
|
||||
* When the *Open the file in a new tab?* switch is set to *True*, the
|
||||
editor will open the new file in new tab of the Query Tool.
|
||||
|
||||
* When the *Prompt to commit/rollback active transactions?* switch is set to
|
||||
*True*, the editor will prompt the user to commit or rollback changes when
|
||||
exiting the Query Tool while the current transaction is not committed.
|
||||
|
||||
* When the *Prompt to save unsaved data changes?* switch is set to *True*, the
|
||||
editor will prompt the user to saved unsaved data when exiting the data
|
||||
editor.
|
||||
|
||||
* When the *Open the file in a new tab?* switch is set to *True*, the
|
||||
editor will open the new file in new tab of the Query Tool.
|
||||
|
||||
* When the *Prompt to save unsaved query changes?* switch is set to *True*, the
|
||||
editor will prompt the user to saved unsaved query modifications when exiting
|
||||
the Query Tool.
|
||||
|
||||
* When the *Prompt to commit/rollback active transactions?* switch is set to
|
||||
*True*, the editor will prompt the user to commit or rollback changes when
|
||||
exiting the Query Tool while the current transaction is not committed.
|
||||
* When the *Show View/Edit Data Promotion Warning?* switch is set to *True*
|
||||
View/Edit Data tool will show promote to Query tool confirm dialog on query edit.
|
||||
|
||||
* When the *Sort View Data results by primary key columns?* If set to *True*,
|
||||
data returned when using the View/Edit Data - All Rows option will be sorted
|
||||
by the Primary Key columns by default. When using the First/Last 100 Rows options,
|
||||
data is always sorted.
|
||||
|
||||
* When the *Show View/Edit Data Promotion Warning?* switch is set to *True*
|
||||
View/Edit Data tool will show promote to Query tool confirm dialog on query edit.
|
||||
|
||||
* When the *Underline query at cursor?* switch is set to *True*, query tool will
|
||||
parse and underline the query at the cursor position.
|
||||
|
||||
@@ -522,8 +552,12 @@ Use the fields on the *Options* panel to manage editor preferences.
|
||||
will warn upon clicking the *Execute Query* button in the query tool. The warning
|
||||
will appear only if *Underline query at cursor?* is set to *False*.
|
||||
|
||||
* When the *Use server cursor?* switch is set to *True*, the dataset will be fetched
|
||||
using a server-side cursor after the query is executed.
|
||||
|
||||
|
||||
.. image:: images/preferences_sql_results_grid.png
|
||||
:alt: Preferences dialog sql results grid section
|
||||
:alt: Preferences sql results grid section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Results grid* panel to specify your formatting
|
||||
@@ -533,11 +567,15 @@ preferences for copied data.
|
||||
auto-size to the maximum width of the data in the column as loaded in the
|
||||
first batch. If set to *Column name*, the column will be sized to the widest
|
||||
of the data type or column name.
|
||||
* Specify the maximum width of the column in pixels when 'Columns sized by' is
|
||||
set to *Column data*. If 'Columns sized by' is set to *Column name* then this
|
||||
setting won't have any effect.
|
||||
* Specify the number of records to fetch in one batch. Changing this value will
|
||||
override DATA_RESULT_ROWS_PER_PAGE setting from config file.
|
||||
* Use *Data result rows per page* to specify the number of records to fetch in
|
||||
one batch. Changing this value will override DATA_RESULT_ROWS_PER_PAGE setting
|
||||
from config file.
|
||||
* Use the *Max column data display length* to specify the maximum number of
|
||||
characters to be visible in the data output cell. If the data is larger
|
||||
than this value, it will be truncated.
|
||||
* Use *Maximum column width* to Specify the maximum width of the column in pixels
|
||||
when 'Columns sized by' is set to *Column data*. If 'Columns sized by' is set to
|
||||
*Column name* then this setting won't have any effect.
|
||||
* Use the *Result copy field separator* drop-down listbox to select the field
|
||||
separator for copied data.
|
||||
* Use the *Result copy quote character* drop-down listbox to select the quote
|
||||
@@ -548,14 +586,14 @@ preferences for copied data.
|
||||
rows with alternating background colors.
|
||||
|
||||
.. image:: images/preferences_sql_keyboard_shortcuts.png
|
||||
:alt: Preferences dialog sql keyboard shortcuts section
|
||||
:alt: Preferences sql keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Keyboard shortcuts* panel to configure shortcuts for the
|
||||
Query Tool window navigation.
|
||||
|
||||
.. image:: images/preferences_sql_formatting.png
|
||||
:alt: Preferences dialog SQL Formatting section
|
||||
:alt: Preferences SQL Formatting section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *SQL formatting* panel to specify your preferences for
|
||||
@@ -608,7 +646,7 @@ The Storage Node
|
||||
Expand the *Storage* node to specify your storage preferences.
|
||||
|
||||
.. image:: images/preferences_storage_options.png
|
||||
:alt: Preferences dialog storage section
|
||||
:alt: Preferences storage section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Options* panel to specify storage preferences.
|
||||
|
||||
@@ -42,7 +42,7 @@ Process Watcher
|
||||
|
||||
The Process Watcher logs all the activity associated with the process/task and provides
|
||||
additional information for troubleshooting
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
Use the **End Process** button to end the process.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
|
||||
@@ -558,3 +558,31 @@ To execute a macro, simply select the appropriate shortcut keys, or select it fr
|
||||
.. image:: images/query_output_data.png
|
||||
:alt: Query Tool Macros Execution
|
||||
:align: center
|
||||
|
||||
|
||||
Server Side Cursor
|
||||
******************
|
||||
|
||||
Server-side cursors allow partial retrieval of large datasets, making them particularly useful when working with
|
||||
very large result sets. However, they may offer lower performance in typical, everyday usage scenarios.
|
||||
|
||||
To enable server-side cursors:
|
||||
|
||||
* Go to Preferences > Query Tool > Options and set "Use server cursor?" to True.
|
||||
* Alternatively, you can enable it on a per-session basis via the Query Tool’s Execute menu.
|
||||
|
||||
.. image:: images/query_tool_server_cursor_execute_menu.png
|
||||
:alt: Query Tool Server Cursor
|
||||
:align: center
|
||||
|
||||
|
||||
Limitations:
|
||||
|
||||
1. Transaction Requirement: Server-side cursors work only in transaction mode.
|
||||
If enabled pgAdmin will automatically ensure queries run within a transaction.
|
||||
|
||||
2. Limited Use Case: Use server-side cursors only when fetching large datasets.
|
||||
|
||||
3. Pagination Limitation: In the Result Grid, the First and Last page buttons will be disabled,
|
||||
as server-side cursors do not return a total row count. Consequently, the total number of rows
|
||||
will not be displayed after execution.
|
||||
@@ -12,6 +12,10 @@ notes for it.
|
||||
:maxdepth: 1
|
||||
|
||||
|
||||
release_notes_9_6
|
||||
release_notes_9_5
|
||||
release_notes_9_4
|
||||
release_notes_9_3
|
||||
release_notes_9_2
|
||||
release_notes_9_1
|
||||
release_notes_9_0
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
***********
|
||||
Version 9.3
|
||||
***********
|
||||
|
||||
Release date: 2025-04-30
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v9.2.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.2
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #2256 <https://github.com/pgadmin-org/pgadmin4/issues/2256>`_ - Add support for type constructors for PostGIS spatial types.
|
||||
| `Issue #2767 <https://github.com/pgadmin-org/pgadmin4/issues/2767>`_ - Added ability to use SQL in the "DB Restriction" field.
|
||||
| `Issue #7310 <https://github.com/pgadmin-org/pgadmin4/issues/7310>`_ - Add support for custom roles and role permissions management in pgAdmin.
|
||||
| `Issue #8629 <https://github.com/pgadmin-org/pgadmin4/issues/8629>`_ - Added support for font ligatures.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #3688 <https://github.com/pgadmin-org/pgadmin4/issues/3688>`_ - Add Cache-Control no-cache,no-store,must-revalidate header to dynamically generated utils.js file.
|
||||
| `Issue #5266 <https://github.com/pgadmin-org/pgadmin4/issues/5266>`_ - Fixed an issue where shift + click on rows/columns for range selection did not work in the query tool data output window.
|
||||
| `Issue #8443 <https://github.com/pgadmin-org/pgadmin4/issues/8443>`_ - Fixed an issue where the debugger hangs when stepping into nested function/procedure.
|
||||
| `Issue #8497 <https://github.com/pgadmin-org/pgadmin4/issues/8497>`_ - Fixed an issue where the scroll position in the Object Explorer was not retained when switching workspaces.
|
||||
| `Issue #8556 <https://github.com/pgadmin-org/pgadmin4/issues/8556>`_ - Ensure that graph data is updated even when the Dashboard tab is inactive.
|
||||
| `Issue #8572 <https://github.com/pgadmin-org/pgadmin4/issues/8572>`_ - Fixed an issue where Ctrl/Cmd+A in cell editor would select all rows.
|
||||
| `Issue #8613 <https://github.com/pgadmin-org/pgadmin4/issues/8613>`_ - Fixed an issue where drag and drop function with no parameters does not work.
|
||||
| `Issue #8627 <https://github.com/pgadmin-org/pgadmin4/issues/8627>`_ - Fixed an issue where changes to foreign key constraints were not detected in the schema diff.
|
||||
| `Issue #8628 <https://github.com/pgadmin-org/pgadmin4/issues/8628>`_ - Change the shortcut for canceling a running query as it conflicts with the shortcut to open a new query tool.
|
||||
| `Issue #8630 <https://github.com/pgadmin-org/pgadmin4/issues/8630>`_ - Fixed an issue where filtering on a view caused an error.
|
||||
| `Issue #8632 <https://github.com/pgadmin-org/pgadmin4/issues/8632>`_ - Fixed an issue where the query tool went blank when converting history dates to the appropriate locale format.
|
||||
| `Issue #8636 <https://github.com/pgadmin-org/pgadmin4/issues/8636>`_ - Ensure that the server list is alphabetically sorted in the Query Tool/PSQL workspace.
|
||||
| `Issue #8651 <https://github.com/pgadmin-org/pgadmin4/issues/8651>`_ - Fixed an issue where the user management tab is not opening in the classic layout.
|
||||
| `Issue #8652 <https://github.com/pgadmin-org/pgadmin4/issues/8652>`_ - Allow OAuth 2 login using the username claim if the email is absent from the user profile.
|
||||
@@ -0,0 +1,44 @@
|
||||
***********
|
||||
Version 9.4
|
||||
***********
|
||||
|
||||
Release date: 2025-05-29
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v9.3.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.2
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #3369 <https://github.com/pgadmin-org/pgadmin4/issues/3369>`_ - Enabled large file downloads for desktop users within the query tool.
|
||||
| `Issue #8583 <https://github.com/pgadmin-org/pgadmin4/issues/8583>`_ - Add all missing options to the Import/Export Data functionality, and update the syntax of the COPY command to align with the latest standards.
|
||||
| `Issue #8681 <https://github.com/pgadmin-org/pgadmin4/issues/8681>`_ - Add support for exporting table data based on a custom query.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #6510 <https://github.com/pgadmin-org/pgadmin4/issues/6510>`_ - Fixed an issue where the result grid slowed down when any column contained a large amount of data.
|
||||
| `Issue #6564 <https://github.com/pgadmin-org/pgadmin4/issues/6564>`_ - Fix the issue where an error is displayed when a table is dropped while a query is running.
|
||||
| `Issue #6968 <https://github.com/pgadmin-org/pgadmin4/issues/6968>`_ - Fixed an issue where the options key was not working as expected in the PSQL tool.
|
||||
| `Issue #7926 <https://github.com/pgadmin-org/pgadmin4/issues/7926>`_ - Fixed an issue where correct error message not displayed when sql statement contains Arabic letters.
|
||||
| `Issue #8595 <https://github.com/pgadmin-org/pgadmin4/issues/8595>`_ - Enhance contrast for selected and hovered items in the Object Explorer to improve visibility and accessibility.
|
||||
| `Issue #8607 <https://github.com/pgadmin-org/pgadmin4/issues/8607>`_ - Fixed an issue where the query tool returns "cannot unpack non-iterable Response object" when running any query with a database name change.
|
||||
| `Issue #8608 <https://github.com/pgadmin-org/pgadmin4/issues/8608>`_ - Handle result grid data changes in View/Edit Data mode by automatically reconnecting to the server if a disconnection occurs.
|
||||
| `Issue #8668 <https://github.com/pgadmin-org/pgadmin4/issues/8668>`_ - Implement API fetch error display for select dropdown.
|
||||
| `Issue #8711 <https://github.com/pgadmin-org/pgadmin4/issues/8711>`_ - Fixed an issue where light theme briefly appears when pgAdmin loads or tools open, even when a dark or system UI theme is preferred.
|
||||
| `Issue #8713 <https://github.com/pgadmin-org/pgadmin4/issues/8713>`_ - Fixed issues related to column range selection using shift + click.
|
||||
| `Issue #8760 <https://github.com/pgadmin-org/pgadmin4/issues/8760>`_ - Fixed an issue where pgAdmin failed to focus when previously unfocused and then quit.
|
||||
@@ -0,0 +1,48 @@
|
||||
***********
|
||||
Version 9.5
|
||||
***********
|
||||
|
||||
Release date: 2025-06-30
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v9.4.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.2
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #1926 <https://github.com/pgadmin-org/pgadmin4/issues/1926>`_ - Add a new permission to allow disabling "Change Password" feature for a pgAdmin role.
|
||||
| `Issue #1947 <https://github.com/pgadmin-org/pgadmin4/issues/1947>`_ - Added role-based restrictions for editing server connections.
|
||||
| `Issue #2659 <https://github.com/pgadmin-org/pgadmin4/issues/2659>`_ - Added support for customizing keyboard shortcuts in the Query Tool's Edit menu.
|
||||
| `Issue #2864 <https://github.com/pgadmin-org/pgadmin4/issues/2864>`_ - Add a search box to enable searching within the preferences tab.
|
||||
| `Issue #3319 <https://github.com/pgadmin-org/pgadmin4/issues/3319>`_ - Added support to preserve the workspace, query windows, and pgAdmin state during an abrupt shutdown or restart.
|
||||
| `Issue #6743 <https://github.com/pgadmin-org/pgadmin4/issues/6743>`_ - Open preferences in a new tab instead of a dialog for better user experience.
|
||||
| `Issue #8665 <https://github.com/pgadmin-org/pgadmin4/issues/8665>`_ - Supports JSON logging for gunicorn process within Docker.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #6118 <https://github.com/pgadmin-org/pgadmin4/issues/6118>`_ - Improved PL/pgSQL code folding and support nested blocks.
|
||||
| `Issue #7173 <https://github.com/pgadmin-org/pgadmin4/issues/7173>`_ - Add a flag to allow access to system Python packages on recent Linux distributions.
|
||||
| `Issue #7466 <https://github.com/pgadmin-org/pgadmin4/issues/7466>`_ - Fixed an issue where utilities such as pg_dump and pg_restore failed to log error messages when required dependency files were missing.
|
||||
| `Issue #8032 <https://github.com/pgadmin-org/pgadmin4/issues/8032>`_ - Fixed an issue where the Schema Diff Tool incorrectly reported differences due to variations in the order of the privileges.
|
||||
| `Issue #8235 <https://github.com/pgadmin-org/pgadmin4/issues/8235>`_ - Fixed an issue in SQL syntax highlighting where the same color was used for both variable names and datatypes.
|
||||
| `Issue #8691 <https://github.com/pgadmin-org/pgadmin4/issues/8691>`_ - Fixed an issue in the query tool where using multiple cursors to copy text resulted in only the first line being copied.
|
||||
| `Issue #8803 <https://github.com/pgadmin-org/pgadmin4/issues/8803>`_ - Ensure that Keyboard shortcuts for save and download actions should not called when their respective UI buttons are disabled.
|
||||
| `Issue #8808 <https://github.com/pgadmin-org/pgadmin4/issues/8808>`_ - Fixed an issue where data export using a query opened the wrong dialog type.
|
||||
| `Issue #8809 <https://github.com/pgadmin-org/pgadmin4/issues/8809>`_ - Fixed an issue where data export using a query failed when the query contained a newline character.
|
||||
| `Issue #8830 <https://github.com/pgadmin-org/pgadmin4/issues/8830>`_ - Fixed a UI layout issue that occurred after upgrading from pgAdmin v9.2 when all tabs had been closed prior to the upgrade.
|
||||
| `Issue #8834 <https://github.com/pgadmin-org/pgadmin4/issues/8834>`_ - Fixed an issue where the Columns node was not visible under Catalog Objects.
|
||||
@@ -0,0 +1,41 @@
|
||||
***********
|
||||
Version 9.6
|
||||
***********
|
||||
|
||||
Release date: 2025-07-25
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v9.5.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.2
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #1923 <https://github.com/pgadmin-org/pgadmin4/issues/1923>`_ - Ensure that keyboard shortcuts are displayed in tooltips, context menus, and the main menu.
|
||||
| `Issue #5797 <https://github.com/pgadmin-org/pgadmin4/issues/5797>`_ - Implemented a server-side cursor to enhance performance when retrieving large datasets.
|
||||
| `Issue #7979 <https://github.com/pgadmin-org/pgadmin4/issues/7979>`_ - Added support for setting a custom SESSION_DIGEST_METHOD in pgAdmin 4 to facilitate FIPS compliance.
|
||||
| `Issue #8941 <https://github.com/pgadmin-org/pgadmin4/issues/8941>`_ - Enable the PKCE workflow for OAuth 2 authentication.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #8828 <https://github.com/pgadmin-org/pgadmin4/issues/8828>`_ - Ensure that pgAdmin 4 is compatible with PG/EPAS v18.
|
||||
| `Issue #8958 <https://github.com/pgadmin-org/pgadmin4/issues/8958>`_ - Use 'Drop' instead of 'Delete' for object commands to make destructive actions more deliberate.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #8420 <https://github.com/pgadmin-org/pgadmin4/issues/8420>`_ - Fixed an issue where windows installer is not signing tmp files generated by InnoSetup.
|
||||
| `Issue #8675 <https://github.com/pgadmin-org/pgadmin4/issues/8675>`_ - Fixed an issue in the Search Objects tool where selecting a node occasionally selected an incorrect node.
|
||||
| `Issue #8901 <https://github.com/pgadmin-org/pgadmin4/issues/8901>`_ - Improved the application state restoration by leveraging rc-dock layout and ensure the order and layout of tabs is maintained on restore.
|
||||
| `Issue #8907 <https://github.com/pgadmin-org/pgadmin4/issues/8907>`_ - Fixed an issue where json editor in result grid was crashing if null value is set in the json editor.
|
||||
| `Issue #8914 <https://github.com/pgadmin-org/pgadmin4/issues/8914>`_ - Update zstd library link to 1.5.7 in Dockerfile.
|
||||
@@ -195,11 +195,19 @@ Click the *Advanced* tab to continue.
|
||||
|
||||
Use the fields in the *Advanced* tab to configure a connection:
|
||||
|
||||
* Use the *DB restriction* field to provide a SQL restriction that will be used
|
||||
against the pg_database table to limit the databases that you see. For
|
||||
example, you might enter: *live_db test_db* so that only live_db and test_db
|
||||
are shown in the pgAdmin browser. Separate entries with a comma or tab as you
|
||||
type.
|
||||
* Specify the type of the database restriction that will be used to filter
|
||||
out the databases for restriction in the *DB restriction type* field:
|
||||
|
||||
* Select the *Databases* option to specify the name of the databases
|
||||
that will be used against the pg_database table to limit the databases
|
||||
that you see. This is the default.
|
||||
* Select the *SQL* option to provide a SQL restriction that will be used
|
||||
against the pg_database table to limit the databases that you see.
|
||||
|
||||
* Use the *DB restriction* field to provide a SQL restriction OR Database names
|
||||
that will be used against the pg_database table to limit the databases that you see.
|
||||
For example, you might enter: *live_db test_db* so that only live_db and test_db
|
||||
are shown in the pgAdmin object explorer.
|
||||
* Use the *Password exec command* field to specify a shell command to be executed
|
||||
to retrieve a password to be used for SQL authentication. The ``stdout`` of the
|
||||
command will be used as the SQL password. This may be useful when the password
|
||||
|
||||
@@ -49,11 +49,11 @@ following selections (options appear in alphabetical order):
|
||||
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Debugging* | Click through to open the :ref:`Debug <debugger>` tool or to select *Set breakpoint* to stop or pause a script execution. |
|
||||
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Delete* | Click to delete the currently selected object from the server. |
|
||||
| *Drop* | Click to drop the currently selected object from the server. |
|
||||
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Delete (Cascade)* | Click to delete the currently selected object and all dependent objects from the server. |
|
||||
| *Drop (Cascade)* | Click to drop the currently selected object and all dependent objects from the server. |
|
||||
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Delete (Force)* | Click to delete the currently selected database with force option. |
|
||||
| *Drop (Force)* | Click to drop the currently selected database with force option. |
|
||||
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
|
||||
| *Disconnect Database...* | Click to terminate a database connection. |
|
||||
+---------------------------+---------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
@@ -12,7 +12,7 @@ When you authenticate with pgAdmin, the server definitions associated with that
|
||||
login role are made available in the tree control.
|
||||
|
||||
Users Tab
|
||||
*******************
|
||||
*********
|
||||
An administrative user can use the *Users* tab to:
|
||||
|
||||
* manage pgAdmin users
|
||||
@@ -21,7 +21,7 @@ An administrative user can use the *Users* tab to:
|
||||
* deactivate user
|
||||
* unlock a locked user
|
||||
|
||||
.. image:: images/user.png
|
||||
.. image:: images/users.png
|
||||
:alt: pgAdmin user management window
|
||||
:align: center
|
||||
|
||||
@@ -78,6 +78,60 @@ users, but otherwise have the same capabilities as those with the *User* role.
|
||||
* Click the *Help* button (?) to access online help.
|
||||
|
||||
|
||||
Roles Tab
|
||||
*********
|
||||
An administrative user can use the *Roles* tab to:
|
||||
|
||||
* manage pgAdmin roles
|
||||
* delete roles
|
||||
|
||||
.. image:: images/roles.png
|
||||
:alt: pgAdmin roles management window
|
||||
:align: center
|
||||
|
||||
Use the *Search* field to specify criteria and review a list of roles
|
||||
that match the specified criteria. You can enter a value that matches
|
||||
the following criteria types: *Role Name* or *Description*.
|
||||
|
||||
To add a role, click the Add (+) button at the top left corner. It will open a
|
||||
dialog where you can fill in details for the new role.
|
||||
|
||||
.. image:: images/add_role.png
|
||||
:alt: pgAdmin roles management window add new role
|
||||
:align: center
|
||||
|
||||
Provide information about the new pgAdmin role in the row:
|
||||
|
||||
* Use the *Name* field to specify a unique name for the role.
|
||||
* Use the *Description* field to provide a brief description of the role.
|
||||
|
||||
To delete a role, click the trash icon to the left of the row and confirm deletion
|
||||
in the *Delete role?* dialog. If the role is associated with any users or resources,
|
||||
you may need to reassign those associations before deletion.
|
||||
|
||||
Roles allow administrators to group privileges and assign them to users more efficiently.
|
||||
This helps in managing permissions and access control within the pgAdmin client.
|
||||
|
||||
* Click the *Refresh* button to get the latest roles list.
|
||||
* Click the *Help* button (?) to access online help.
|
||||
|
||||
|
||||
Permissions Tab
|
||||
***************
|
||||
An administrative user can use the *Permissions* tab to manage pgAdmin permissions for
|
||||
a role.
|
||||
|
||||
.. image:: images/permissions.png
|
||||
:alt: pgAdmin permissions management window
|
||||
:align: center
|
||||
|
||||
* Filter permissions using the *Search* field by entering names that match the list.
|
||||
* Administrators can select permissions from the list of available permissions, and
|
||||
choose to grant or revoke these permissions for specific roles.
|
||||
* The permissions are applied to the selected role immediately.
|
||||
|
||||
|
||||
|
||||
Using 'setup.py' command line script
|
||||
####################################
|
||||
|
||||
@@ -108,10 +162,11 @@ email and password. role and active will be optional fields.
|
||||
|
||||
/path/to/python /path/to/setup.py add-user user1@gmail.com password
|
||||
|
||||
# to specify a role, admin and non-admin users:
|
||||
# to specify a role, either you can use --admin for Administrator role or provide the
|
||||
# role using --role. If both are provided --admin will be used:
|
||||
|
||||
/path/to/python /path/to/setup.py add-user user1@gmail.com password --admin
|
||||
/path/to/python /path/to/setup.py add-user user1@gmail.com password --nonadmin
|
||||
/path/to/python /path/to/setup.py add-user user1@gmail.com password --role Users
|
||||
|
||||
# to specify user's status
|
||||
|
||||
@@ -132,10 +187,11 @@ followed by email, password and authentication source. email, role and status wi
|
||||
|
||||
/path/to/python /path/to/setup.py add-external-user ldapuser ldap --email user1@gmail.com
|
||||
|
||||
# to specify a role, admin and non-admin user:
|
||||
# to specify a role, either you can use --admin for Administrator role or provide the
|
||||
# role using --role. If both are provided --admin will be used:
|
||||
|
||||
/path/to/python /path/to/setup.py add-external-user ldapuser ldap --admin
|
||||
/path/to/python /path/to/setup.py add-external-user ldapuser ldap --nonadmin
|
||||
/path/to/python /path/to/setup.py add-external-user ldapuser ldap --role Users
|
||||
|
||||
# to specify user's status
|
||||
|
||||
@@ -152,10 +208,11 @@ email address. password, role and active are updatable fields.
|
||||
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com --password new-password
|
||||
|
||||
# to specify a role, admin and non-admin user:
|
||||
# to specify a role, either you can use --admin for Administrator role or provide the
|
||||
# role using --role. If both are provided --admin will be used:
|
||||
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com password --role --admin
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com password --role --nonadmin
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com password --admin
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com password --role Users
|
||||
|
||||
# to specify user's status
|
||||
|
||||
@@ -172,17 +229,18 @@ followed by username and auth source. email, password, role and active are updat
|
||||
|
||||
# to change email address:
|
||||
|
||||
/path/to/python /path/to/setup.py update-external-user ldap ldapuser --email newemail@gmail.com
|
||||
/path/to/python /path/to/setup.py update-external-user ldapuser --auth-source ldap --email newemail@gmail.com
|
||||
|
||||
# to specify a role, admin and non-admin user:
|
||||
# to specify a role, either you can use --admin for Administrator role or provide the
|
||||
# role using --role. If both are provided --admin will be used:
|
||||
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com password --role --admin
|
||||
/path/to/python /path/to/setup.py update-user user1@gmail.com password --role --nonadmin
|
||||
/path/to/python /path/to/setup.py update-external-user user1@gmail.com password --role --admin
|
||||
/path/to/python /path/to/setup.py update-external-user user1@gmail.com password --role --role Users
|
||||
|
||||
# to change user's status
|
||||
|
||||
/path/to/python /path/to/setup.py update-user ldap ldapuser --active
|
||||
/path/to/python /path/to/setup.py update-user ldap ldapuser --inactive
|
||||
/path/to/python /path/to/setup.py update-user ldapuser --auth-source ldap --active
|
||||
/path/to/python /path/to/setup.py update-user ldapuser --auth-source ldap --inactive
|
||||
|
||||
Delete User
|
||||
***********
|
||||
|
||||
@@ -5,8 +5,8 @@ Debian and Ubuntu.
|
||||
|
||||
## Supported platforms
|
||||
|
||||
* Debian 9, 10 & 11 (testing)
|
||||
* Ubuntu 18.04, 20.04, 20.10
|
||||
* Debian 11 & 12
|
||||
* Ubuntu 22.04, 24.04 & 24.10
|
||||
|
||||
## Build configuration
|
||||
|
||||
|
||||
@@ -1,2 +1,45 @@
|
||||
import gunicorn
|
||||
gunicorn.SERVER_SOFTWARE = 'Python'
|
||||
|
||||
# Can be resolved because of how Dockerfile organizes the code during build
|
||||
from config import JSON_LOGGER, CONSOLE_LOG_LEVEL, CONSOLE_LOG_FORMAT_JSON
|
||||
|
||||
gunicorn.SERVER_SOFTWARE = "Python"
|
||||
|
||||
if JSON_LOGGER:
|
||||
logconfig_dict = {
|
||||
"version": 1,
|
||||
"disable_existing_loggers": False,
|
||||
"root": {"level": CONSOLE_LOG_LEVEL, "handlers": []},
|
||||
"loggers": {
|
||||
"gunicorn.error": {
|
||||
"level": CONSOLE_LOG_LEVEL,
|
||||
"handlers": ["error_console"],
|
||||
"propagate": True,
|
||||
"qualname": "gunicorn.error",
|
||||
},
|
||||
"gunicorn.access": {
|
||||
"level": CONSOLE_LOG_LEVEL,
|
||||
"handlers": ["console"],
|
||||
"propagate": True,
|
||||
"qualname": "gunicorn.access",
|
||||
},
|
||||
},
|
||||
"handlers": {
|
||||
"console": {
|
||||
"class": "logging.StreamHandler",
|
||||
"formatter": "json",
|
||||
"stream": "ext://sys.stdout",
|
||||
},
|
||||
"error_console": {
|
||||
"class": "logging.StreamHandler",
|
||||
"formatter": "json",
|
||||
"stream": "ext://sys.stderr",
|
||||
},
|
||||
},
|
||||
"formatters": {
|
||||
"json": {
|
||||
"class": "jsonformatter.JsonFormatter",
|
||||
"format": CONSOLE_LOG_FORMAT_JSON,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -63,17 +63,16 @@ _create_python_virtualenv() {
|
||||
cd "usr/${APP_NAME}" || exit
|
||||
|
||||
# Create the blank venv
|
||||
"${SYSTEM_PYTHON_PATH}" -m venv venv
|
||||
"${SYSTEM_PYTHON_PATH}" -m venv --system-site-packages venv
|
||||
# shellcheck disable=SC1091
|
||||
. venv/bin/activate
|
||||
|
||||
# Make sure we have the wheel package present, as well as the latest pip
|
||||
pip3 install --upgrade pip
|
||||
pip3 install setuptools
|
||||
pip3 install wheel
|
||||
|
||||
# Install the requirements
|
||||
pip3 install --no-cache-dir --no-binary psycopg -r "${SOURCEDIR}/requirements.txt"
|
||||
pip3 install --force-reinstall --no-cache-dir --no-binary psycopg -r "${SOURCEDIR}/requirements.txt"
|
||||
|
||||
# Fixup the paths in the venv activation scripts
|
||||
sed -i 's/VIRTUAL_ENV=.*/VIRTUAL_ENV="\/usr\/pgadmin4\/venv"/g' venv/bin/activate
|
||||
@@ -141,6 +140,8 @@ _build_runtime() {
|
||||
fi
|
||||
|
||||
ELECTRON_VERSION="$(npm info electron version)"
|
||||
# Can't use the latest as it is not compatible with few OS versions.
|
||||
ELECTRON_VERSION="35.4.0"
|
||||
|
||||
pushd "${BUILDROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
@@ -176,8 +177,7 @@ _build_runtime() {
|
||||
# Install the runtime node_modules
|
||||
pushd "${BUNDLEDIR}/resources/app" > /dev/null || exit
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn plugin import workspace-tools
|
||||
yarn set version 4
|
||||
yarn workspaces focus --production
|
||||
|
||||
# remove the yarn cache
|
||||
@@ -224,7 +224,7 @@ _copy_code() {
|
||||
|
||||
pushd "${SOURCEDIR}/web" > /dev/null || exit
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
yarn install
|
||||
yarn run bundle
|
||||
popd > /dev/null || exit
|
||||
@@ -241,7 +241,6 @@ _copy_code() {
|
||||
|
||||
# License files
|
||||
cp "${SOURCEDIR}/LICENSE" "${SERVERROOT}/usr/${APP_NAME}/"
|
||||
cp "${SOURCEDIR}/DEPENDENCIES" "${SERVERROOT}/usr/${APP_NAME}/"
|
||||
|
||||
# Web setup script
|
||||
mkdir -p "${WEBROOT}/usr/${APP_NAME}/bin/"
|
||||
|
||||
@@ -34,6 +34,7 @@ _build_runtime() {
|
||||
fi
|
||||
|
||||
ELECTRON_VERSION="$(npm info electron version)"
|
||||
ELECTRON_VERSION="35.4.0"
|
||||
|
||||
pushd "${BUILD_ROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
@@ -58,8 +59,7 @@ _build_runtime() {
|
||||
# Install the runtime node_modules, then replace the package.json
|
||||
pushd "${BUNDLE_DIR}/Contents/Resources/app/" > /dev/null || exit
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn plugin import workspace-tools
|
||||
yarn set version 4
|
||||
yarn workspaces focus --production
|
||||
|
||||
# remove the yarn cache
|
||||
@@ -288,7 +288,7 @@ _complete_bundle() {
|
||||
# Build node modules
|
||||
pushd "${SOURCE_DIR}/web" > /dev/null || exit
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
@@ -316,7 +316,6 @@ _complete_bundle() {
|
||||
|
||||
# License files
|
||||
cp -r "${SOURCE_DIR}/LICENSE" "${BUNDLE_DIR}/Contents/"
|
||||
cp -r "${SOURCE_DIR}/DEPENDENCIES" "${BUNDLE_DIR}/Contents/"
|
||||
|
||||
# Remove the .pyc files if any
|
||||
find "${BUNDLE_DIR}" -name "*.pyc" -print0 | xargs -0 rm -f
|
||||
|
||||
@@ -57,7 +57,7 @@ do
|
||||
done
|
||||
|
||||
yarn set version berry
|
||||
yarn set version 3
|
||||
yarn set version 4
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
@@ -90,7 +90,7 @@ do
|
||||
done
|
||||
|
||||
cd ../
|
||||
for FILE in LICENSE DEPENDENCIES README.md
|
||||
for FILE in LICENSE README.md
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
|
||||
@@ -80,7 +80,6 @@ setup(
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
|
||||
# Supported programming languages
|
||||
'Programming Language :: Python :: 3.8',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
'Programming Language :: Python :: 3.10',
|
||||
'Programming Language :: Python :: 3.11',
|
||||
|
||||
@@ -5,7 +5,7 @@ Redhat distributions.
|
||||
|
||||
## Supported platforms
|
||||
|
||||
* Fedora 36 & 37
|
||||
* Fedora 40 & 41
|
||||
* RHEL 8
|
||||
* Rocky Linux 8 (x86_64)
|
||||
* AlmaLinux/RHEL/Rocky Linux 9 (x86_64)
|
||||
|
||||
@@ -35,6 +35,12 @@ DOC_TARBALL_NAME=$(echo "${APP_NAME}-${APP_LONG_VERSION}-docs" | sed 's/ //g' |
|
||||
# Get the github timestamp
|
||||
git log -1 --format='%H %as' > web/commit_hash
|
||||
|
||||
pushd web > /dev/null || exit
|
||||
# Set the git:hash to empty as we already set the commit_hash
|
||||
# this helps in building pgAdmin directly from tar ball without needing git.
|
||||
npm pkg set "scripts.git:hash=exit 0"
|
||||
popd > /dev/null || exit
|
||||
|
||||
# Output basic details to show we're working
|
||||
echo "Building tarballs for ${APP_NAME} version ${APP_LONG_VERSION}..."
|
||||
|
||||
|
||||
@@ -36,6 +36,8 @@ ArchitecturesInstallIn64BitMode={#MyAppArchitecturesMode}
|
||||
AllowNoIcons=yes
|
||||
WizardImageFile=sidebar.bmp
|
||||
MinVersion={#MinimumWindowsVer}
|
||||
SignTool=pgAdminSigntool
|
||||
SignedUninstaller=yes
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
@@ -6,56 +6,55 @@
|
||||
# *must* ensure the DEB and RPM package maintainers are informed as soon as
|
||||
# possible.
|
||||
#
|
||||
# The packages listed below are sorted alphabetically. It is recommended to add
|
||||
# new packages in alphabetical order. However, exceptions can be made to
|
||||
# preserve dependency order—please add a comment in such cases and specify the
|
||||
# relevant packages.
|
||||
###############################################################################
|
||||
|
||||
Flask==3.0.*; python_version <= '3.8'
|
||||
Flask==3.1.*; python_version >= '3.9'
|
||||
Authlib==1.6.*
|
||||
azure-identity==1.23.0
|
||||
azure-mgmt-rdbms==10.1.0
|
||||
azure-mgmt-resource==24.0.0
|
||||
azure-mgmt-subscription==3.1.1
|
||||
bcrypt==4.3.*
|
||||
boto3==1.39.*
|
||||
cryptography==45.0.*
|
||||
Flask-Babel==4.0.*
|
||||
Flask-Compress==1.*
|
||||
Flask-Login==0.*
|
||||
Flask-Mail==0.*
|
||||
Flask-Migrate==4.*
|
||||
Flask-Paranoid==0.*
|
||||
Flask-Security-Too==5.4.*; python_version <= '3.9'
|
||||
Flask-Security-Too==5.6.*; python_version > '3.9'
|
||||
Flask-SocketIO==5.5.*
|
||||
Flask-SQLAlchemy==3.1.*
|
||||
Flask-WTF==1.2.*
|
||||
Flask-Compress==1.*
|
||||
Flask-Paranoid==0.*
|
||||
Flask-Babel==4.0.*
|
||||
Flask-Security-Too==5.5.*; python_version >= '3.10'
|
||||
Flask-Security-Too==5.4.*; python_version <= '3.9'
|
||||
Flask-SocketIO==5.5.*
|
||||
WTForms==3.2.*; python_version >= '3.10'
|
||||
WTForms==3.1.*; python_version <= '3.9'
|
||||
passlib==1.*
|
||||
pytz==2024.*; python_version <= '3.8'
|
||||
pytz==2025.*; python_version >= '3.9'
|
||||
speaklater3==1.*
|
||||
sqlparse==0.*
|
||||
psutil==6.1.*
|
||||
psycopg[c]==3.2.4
|
||||
python-dateutil==2.*
|
||||
SQLAlchemy==2.*
|
||||
bcrypt==4.2.*
|
||||
cryptography==44.0.*
|
||||
sshtunnel==0.*
|
||||
ldap3==2.*
|
||||
gssapi==1.9.*
|
||||
user-agents==2.2.0
|
||||
pywinpty==2.0.*; sys_platform=="win32"
|
||||
Authlib==1.3.*; python_version <= '3.8'
|
||||
Authlib==1.4.*; python_version >= '3.9'
|
||||
pyotp==2.*
|
||||
qrcode==7.*; python_version <= '3.8'
|
||||
qrcode[pil]==8.*; python_version >= '3.9'
|
||||
boto3==1.36.*
|
||||
urllib3==1.26.*
|
||||
azure-mgmt-rdbms==10.1.0
|
||||
azure-mgmt-resource==23.2.0
|
||||
azure-mgmt-subscription==3.1.1
|
||||
azure-identity==1.19.0
|
||||
Flask==3.1.*
|
||||
google-api-python-client==2.*
|
||||
google-auth-oauthlib==1.2.1
|
||||
keyring==25.*
|
||||
Werkzeug==3.0.*; python_version <= '3.8'
|
||||
Werkzeug==3.1.*; python_version >= '3.9'
|
||||
typer[all]==0.15.*
|
||||
setuptools==75.*; python_version >= '3.12'
|
||||
google-auth-oauthlib==1.2.2
|
||||
gssapi==1.9.*
|
||||
jsonformatter~=0.3.4
|
||||
libgravatar==1.0.*
|
||||
keyring==25.*
|
||||
ldap3==2.*
|
||||
libgravatar==1.0.*
|
||||
passlib==1.*
|
||||
psutil==7.0.*
|
||||
psycopg[c]==3.2.9
|
||||
pyotp==2.*
|
||||
python-dateutil==2.*
|
||||
pytz==2025.*
|
||||
pywinpty==2.0.*; sys_platform=="win32"
|
||||
qrcode[pil]==8.*; python_version >= '3.9'
|
||||
setuptools==80.*; python_version >= '3.12'
|
||||
SQLAlchemy==2.*
|
||||
sqlparse==0.*
|
||||
sshtunnel==0.*
|
||||
typer[all]==0.16.*
|
||||
urllib3==1.26.*; python_version <= '3.9'
|
||||
urllib3==2.5.*; python_version > '3.9'
|
||||
user-agents==2.2.0
|
||||
Werkzeug==3.1.*
|
||||
WTForms==3.1.*; python_version <= '3.9'
|
||||
WTForms==3.2.*; python_version > '3.9'
|
||||
@@ -8,6 +8,7 @@
|
||||
//////////////////////////////////////////////////////////////
|
||||
import globals from 'globals';
|
||||
import js from '@eslint/js';
|
||||
import unusedImports from 'eslint-plugin-unused-imports';
|
||||
|
||||
export default [
|
||||
js.configs.recommended,
|
||||
@@ -34,6 +35,9 @@ export default [
|
||||
'platform': 'readonly',
|
||||
},
|
||||
},
|
||||
'plugins': {
|
||||
'unused-imports': unusedImports,
|
||||
},
|
||||
'rules': {
|
||||
'indent': [
|
||||
'error',
|
||||
@@ -55,6 +59,17 @@ export default [
|
||||
'no-console': ['error', { allow: ['warn', 'error'] }],
|
||||
// We need to exclude below for RegEx case
|
||||
'no-useless-escape': 0,
|
||||
'no-unused-vars': 'off',
|
||||
'unused-imports/no-unused-imports': 'error',
|
||||
'unused-imports/no-unused-vars': [
|
||||
'warn',
|
||||
{
|
||||
'vars': 'all',
|
||||
'varsIgnorePattern': '^_',
|
||||
'args': 'after-used',
|
||||
'argsIgnorePattern': '^_',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
];
|
||||
@@ -12,13 +12,13 @@
|
||||
},
|
||||
"packageManager": "yarn@3.8.7",
|
||||
"devDependencies": {
|
||||
"electron": "35.0.3",
|
||||
"eslint": "^9.23.0"
|
||||
"electron": "37.2.0",
|
||||
"eslint": "^9.30.1",
|
||||
"eslint-plugin-unused-imports": "^4.1.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.8.4",
|
||||
"electron-context-menu": "^4.0.5",
|
||||
"electron-dl": "^4.0.0",
|
||||
"electron-store": "^10.0.0"
|
||||
"axios": "^1.10.0",
|
||||
"electron-context-menu": "^4.1.0",
|
||||
"electron-store": "^10.1.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
/////////////////////////////////////////////////////////////
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
import { app, ipcMain, dialog, BrowserWindow, shell } from 'electron';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import Buffer from 'buffer';
|
||||
import { setBadge, clearBadge, clearProgress, setProgress } from './progress.js';
|
||||
import { writeServerLog } from './misc.js';
|
||||
|
||||
class DownloadItem {
|
||||
constructor(filePath, onUpdate, onRemove) {
|
||||
this.filePath = filePath;
|
||||
this.currentLoaded = 0;
|
||||
this.total = null;
|
||||
this.stream = fs.createWriteStream(filePath);;
|
||||
this.onUpdate = onUpdate;
|
||||
this.onRemove = onRemove;
|
||||
}
|
||||
write(chunk) {
|
||||
this.stream.write(chunk);
|
||||
this.currentLoaded += chunk.length;
|
||||
this.onUpdate?.();
|
||||
}
|
||||
setTotal(total) {
|
||||
this.total = total;
|
||||
}
|
||||
remove() {
|
||||
this.stream.end();
|
||||
this.onRemove?.();
|
||||
}
|
||||
}
|
||||
|
||||
const downloadQueue = {};
|
||||
|
||||
function updateProgress(callerWindow) {
|
||||
let count = Object.keys(downloadQueue).length;
|
||||
if (count === 0) {
|
||||
clearBadge();
|
||||
clearProgress.call(callerWindow);
|
||||
return;
|
||||
}
|
||||
setBadge(Object.keys(downloadQueue).length);
|
||||
let progress = 0;
|
||||
if(Object.values(downloadQueue).some((item) => item.total === null)) {
|
||||
// If any of the items in the queue does not have a total, we cannot calculate progress
|
||||
// so we return 2 to indicate that the progress is indeterminate.
|
||||
progress = 2;
|
||||
} else {
|
||||
const total = Object.values(downloadQueue).reduce((acc, item) => {
|
||||
if (item.total) {
|
||||
return acc + item.currentLoaded / item.total;
|
||||
}
|
||||
return acc + item.currentLoaded;
|
||||
}, 0);
|
||||
progress = total / Object.keys(downloadQueue).length;
|
||||
}
|
||||
setProgress.call(callerWindow, progress);
|
||||
}
|
||||
|
||||
async function fileDownloadPath(callerWindow, options, prompt=true) {
|
||||
let filePath = path.join(app.getPath('downloads'), options.defaultPath);
|
||||
// prompt is true when the user has set the preference to prompt for download location
|
||||
if(prompt) {
|
||||
const result = await dialog.showSaveDialog(callerWindow, {
|
||||
title: 'Save File',
|
||||
...options,
|
||||
});
|
||||
|
||||
if (result.canceled) {
|
||||
return;
|
||||
}
|
||||
filePath = result.filePath;
|
||||
}
|
||||
return filePath;
|
||||
}
|
||||
|
||||
export function setupDownloader() {
|
||||
// Listen for the renderer's request to show the open dialog
|
||||
ipcMain.handle('get-download-stream-path', async (event, options, prompt=true) => {
|
||||
try {
|
||||
const callerWindow = BrowserWindow.fromWebContents(event.sender);
|
||||
const filePath = await fileDownloadPath(callerWindow, options, prompt);
|
||||
downloadQueue[filePath] = new DownloadItem(filePath, () => {
|
||||
updateProgress(callerWindow);
|
||||
}, () => {
|
||||
delete downloadQueue[filePath];
|
||||
updateProgress(callerWindow);
|
||||
});
|
||||
|
||||
updateProgress(callerWindow);
|
||||
|
||||
return filePath;
|
||||
} catch (error) {
|
||||
writeServerLog(`Error in get-download-stream-path: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.on('download-stream-save-total', (event, filePath, total) => {
|
||||
const item = downloadQueue[filePath];
|
||||
if (item) {
|
||||
item.setTotal(total);
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.on('download-stream-save-chunk', (event, filePath, chunk) => {
|
||||
const item = downloadQueue[filePath];
|
||||
if (item) {
|
||||
item.write(chunk);
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.on('download-stream-save-end', (event, filePath, openFile=false) => {
|
||||
const item = downloadQueue[filePath];
|
||||
if (item) {
|
||||
item.remove();
|
||||
openFile && shell.openPath(filePath);
|
||||
}
|
||||
});
|
||||
|
||||
// non-streaming direct download
|
||||
ipcMain.handle('download-base64-url-data', async (event, base64url, options, prompt=true, openFile=false) => {
|
||||
const callerWindow = BrowserWindow.fromWebContents(event.sender);
|
||||
const filePath = await fileDownloadPath(callerWindow, options, prompt);
|
||||
const buffer = Buffer.from(base64url.split(',')[1], 'base64');
|
||||
fs.writeFileSync(filePath, buffer);
|
||||
openFile && shell.openPath(filePath);
|
||||
});
|
||||
|
||||
ipcMain.handle('download-text-data', async (event, text, options, prompt=true, openFile=false) => {
|
||||
const callerWindow = BrowserWindow.fromWebContents(event.sender);
|
||||
const filePath = await fileDownloadPath(callerWindow, options, prompt);
|
||||
fs.writeFileSync(filePath, text);
|
||||
openFile && shell.openPath(filePath);
|
||||
});
|
||||
}
|
||||
@@ -7,12 +7,28 @@
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
import { app, Menu, ipcMain, BrowserWindow } from 'electron';
|
||||
import { app, Menu, ipcMain, BrowserWindow, globalShortcut } from 'electron';
|
||||
|
||||
const isMac = process.platform == 'darwin';
|
||||
const isLinux = process.platform == 'linux';
|
||||
let mainMenu;
|
||||
|
||||
// Use to convert shortcut to accelerator for electron.
|
||||
function convertShortcutToAccelerator({ control, meta, shift, alt, key } = {}) {
|
||||
// Store active modifier keys into an array.
|
||||
const mods = [
|
||||
control && 'Ctrl',
|
||||
meta && 'Cmd',
|
||||
shift && 'Shift',
|
||||
alt && 'Alt',
|
||||
].filter(Boolean); // Remove any falsy values
|
||||
// Get the actual key character and convert to uppercase.
|
||||
const k = key?.char?.toUpperCase();
|
||||
if (!k) return;
|
||||
// Combine modifiers and key into a single string.
|
||||
return [...mods, k].join('+');
|
||||
}
|
||||
|
||||
function buildMenu(pgadminMenus, pgAdminMainScreen, callbacks) {
|
||||
const template = [];
|
||||
|
||||
@@ -24,13 +40,27 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, callbacks) {
|
||||
const smName = `${menuItem.name}_${subMenuItem.name}`;
|
||||
return {
|
||||
...subMenuItem,
|
||||
click: ()=>{
|
||||
accelerator: convertShortcutToAccelerator(subMenuItem.shortcut),
|
||||
click: (_menuItem, _browserWindow, event)=>{
|
||||
if(event?.triggeredByAccelerator) {
|
||||
// We will ignore the click event if it is triggered by an accelerator.
|
||||
// We use accelerator to only show the shortcut title in the menu.
|
||||
// The actual shortcut is already handled by pgAdmin.
|
||||
return;
|
||||
}
|
||||
pgAdminMainScreen.webContents.send('menu-click', smName);
|
||||
},
|
||||
submenu: subMenuItem.submenu?.map((deeperSubMenuItem)=>{
|
||||
return {
|
||||
...deeperSubMenuItem,
|
||||
click: ()=>{
|
||||
accelerator: convertShortcutToAccelerator(deeperSubMenuItem.shortcut),
|
||||
click: (_menuItem, _browserWindow, event)=>{
|
||||
if(event?.triggeredByAccelerator) {
|
||||
// We will ignore the click event if it is triggered by an accelerator.
|
||||
// We use accelerator to only show the shortcut title in the menu.
|
||||
// The actual shortcut is already handled by pgAdmin.
|
||||
return;
|
||||
}
|
||||
pgAdminMainScreen.webContents.send('menu-click', `${smName}_${deeperSubMenuItem.name}`);
|
||||
},
|
||||
};
|
||||
@@ -109,6 +139,9 @@ function buildMenu(pgadminMenus, pgAdminMainScreen, callbacks) {
|
||||
export function setupMenu(pgAdminMainScreen, callbacks={}) {
|
||||
ipcMain.on('setMenus', (event, menus)=>{
|
||||
mainMenu = buildMenu(menus, pgAdminMainScreen, callbacks);
|
||||
// this is important because the shortcuts are registered multiple times
|
||||
// when the menu is set multiple times using accelerators.
|
||||
globalShortcut.unregisterAll();
|
||||
if(isMac) {
|
||||
Menu.setApplicationMenu(mainMenu);
|
||||
} else {
|
||||
|
||||
@@ -16,7 +16,7 @@ import { spawn } from 'child_process';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { setupMenu } from './menu.js';
|
||||
import contextMenu from 'electron-context-menu';
|
||||
import { CancelError, download } from 'electron-dl';
|
||||
import { setupDownloader } from './downloader.js';
|
||||
|
||||
const configStore = new Store({
|
||||
defaults: {
|
||||
@@ -153,28 +153,6 @@ function reloadApp() {
|
||||
currWin.webContents.reload();
|
||||
}
|
||||
|
||||
async function desktopFileDownload(payload) {
|
||||
const currWin = BrowserWindow.getFocusedWindow();
|
||||
try {
|
||||
await download(currWin, payload.downloadUrl, {
|
||||
filename: payload.fileName,
|
||||
saveAs: payload.prompt_for_download_location,
|
||||
onProgress: (progress) => {
|
||||
currWin.webContents.send('download-progress', progress);
|
||||
},
|
||||
onCompleted: (item) => {
|
||||
currWin.webContents.send('download-complete', item);
|
||||
if (payload.automatically_open_downloaded_file)
|
||||
shell.openPath(item.path);
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
if (!(error instanceof CancelError)) {
|
||||
misc.writeServerLog(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This functions is used to start the pgAdmin4 server by spawning a
|
||||
// separate process.
|
||||
function startDesktopMode() {
|
||||
@@ -192,8 +170,9 @@ function startDesktopMode() {
|
||||
process.env.PGADMIN_SERVER_MODE = 'OFF';
|
||||
|
||||
// Start Page URL
|
||||
startPageUrl = 'http://127.0.0.1:' + serverPort + '/?key=' + UUID;
|
||||
serverCheckUrl = 'http://127.0.0.1:' + serverPort + '/misc/ping?key=' + UUID;
|
||||
const baseUrl = `http://127.0.0.1:${serverPort}`;
|
||||
startPageUrl = `${baseUrl}/?key=${UUID}`;
|
||||
serverCheckUrl = `${baseUrl}/misc/ping?key=${UUID}`;
|
||||
|
||||
// Write Python Path, pgAdmin file path and command in log file.
|
||||
misc.writeServerLog('pgAdmin Runtime Environment');
|
||||
@@ -356,6 +335,8 @@ function launchPgAdminWindow() {
|
||||
'reloadApp': reloadApp,
|
||||
});
|
||||
|
||||
setupDownloader();
|
||||
|
||||
pgAdminMainScreen.loadURL(startPageUrl);
|
||||
|
||||
const bounds = configStore.get('bounds');
|
||||
@@ -425,11 +406,18 @@ ipcMain.on('restartApp', ()=>{
|
||||
app.relaunch();
|
||||
app.exit(0);
|
||||
});
|
||||
ipcMain.on('log', (text) => ()=>{
|
||||
ipcMain.on('log', (_e, text) => ()=>{
|
||||
misc.writeServerLog(text);
|
||||
});
|
||||
ipcMain.on('focus', (e) => {
|
||||
app.focus({steal: true});
|
||||
const callerWindow = BrowserWindow.fromWebContents(e.sender);
|
||||
if (callerWindow) {
|
||||
if (callerWindow.isMinimized()) callerWindow.restore();
|
||||
callerWindow.focus();
|
||||
}
|
||||
});
|
||||
ipcMain.on('reloadApp', reloadApp);
|
||||
ipcMain.on('onFileDownload', (_, payload) => desktopFileDownload(payload));
|
||||
ipcMain.handle('checkPortAvailable', async (_e, fixedPort)=>{
|
||||
try {
|
||||
await misc.getAvailablePort(fixedPort);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
const { contextBridge, ipcRenderer } = require('electron/renderer');
|
||||
|
||||
contextBridge.exposeInMainWorld('electronUI', {
|
||||
focus: () => ipcRenderer.send('focus'),
|
||||
onMenuClick: (callback) => ipcRenderer.on('menu-click', (_event, details) => callback(details)),
|
||||
setMenus: (menus) => {
|
||||
ipcRenderer.send('setMenus', menus);
|
||||
@@ -24,5 +25,11 @@ contextBridge.exposeInMainWorld('electronUI', {
|
||||
showSaveDialog: (options) => ipcRenderer.invoke('showSaveDialog', options),
|
||||
log: (text)=> ipcRenderer.send('log', text),
|
||||
reloadApp: ()=>{ipcRenderer.send('reloadApp');},
|
||||
onFileDownload: (payload) => ipcRenderer.send('onFileDownload', payload),
|
||||
// Download related functions
|
||||
getDownloadStreamPath: (...args) => ipcRenderer.invoke('get-download-stream-path', ...args),
|
||||
downloadStreamSaveChunk: (...args) => ipcRenderer.send('download-stream-save-chunk', ...args),
|
||||
downloadStreamSaveTotal: (...args) => ipcRenderer.send('download-stream-save-total', ...args),
|
||||
downloadStreamSaveEnd: (...args) => ipcRenderer.send('download-stream-save-end', ...args),
|
||||
downloadBase64UrlData: (...args) => ipcRenderer.invoke('download-base64-url-data', ...args),
|
||||
downloadTextData: (...args) => ipcRenderer.invoke('download-text-data', ...args),
|
||||
});
|
||||
@@ -0,0 +1,39 @@
|
||||
/////////////////////////////////////////////////////////////
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
import { app } from 'electron';
|
||||
|
||||
export function setBadge(count) {
|
||||
const badgeCount = parseInt(count, 10);
|
||||
if (!isNaN(badgeCount)) {
|
||||
app.setBadgeCount(badgeCount);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to clear badge
|
||||
export function clearBadge() {
|
||||
app.setBadgeCount(0);
|
||||
}
|
||||
|
||||
// Function to set progress bar
|
||||
export function setProgress(progress) {
|
||||
const progressValue = parseFloat(progress);
|
||||
if (this && !isNaN(progressValue) && progressValue >= 0 && progressValue <= 1) {
|
||||
this.setProgressBar(progressValue);
|
||||
} else if (this && progress === -1) {
|
||||
this.setProgressBar(-1);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to clear progress
|
||||
export function clearProgress() {
|
||||
if (this) {
|
||||
this.setProgressBar(-1);
|
||||
}
|
||||
}
|
||||
@@ -25,13 +25,13 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@eslint-community/eslint-utils@npm:^4.2.0":
|
||||
version: 4.5.1
|
||||
resolution: "@eslint-community/eslint-utils@npm:4.5.1"
|
||||
version: 4.7.0
|
||||
resolution: "@eslint-community/eslint-utils@npm:4.7.0"
|
||||
dependencies:
|
||||
eslint-visitor-keys: ^3.4.3
|
||||
peerDependencies:
|
||||
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
|
||||
checksum: 853e681fd134e96ce88066b0cfb3ce8b7a87afc9ea207139059f51e302eb9e6de4ab73c9eeb3995407bd6c08f836aade9fce47e91124c254a4eea24a5465c2ac
|
||||
checksum: b177e3b75c0b8d0e5d71f1c532edb7e40b31313db61f0c879f9bf19c3abb2783c6c372b5deb2396dab4432f2946b9972122ac682e77010376c029dfd0149c681
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -42,30 +42,39 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/config-array@npm:^0.19.2":
|
||||
version: 0.19.2
|
||||
resolution: "@eslint/config-array@npm:0.19.2"
|
||||
"@eslint/config-array@npm:^0.21.0":
|
||||
version: 0.21.0
|
||||
resolution: "@eslint/config-array@npm:0.21.0"
|
||||
dependencies:
|
||||
"@eslint/object-schema": ^2.1.6
|
||||
debug: ^4.3.1
|
||||
minimatch: ^3.1.2
|
||||
checksum: 1c707e04fc2951079b32d2cb1c939ce25e863cd1329c1bd363a285b2a5caaaf88b97ddbf354cc46d1334097dc749f79b0fae33151dc2dfb9a60ba14288c65b39
|
||||
checksum: 84d3ae7cb755af94dc158a74389f4c560757b13f2bb908f598f927b87b70a38e8152015ea2e9557c1b4afc5130ee1356f6cad682050d67aae0468bbef98bc3a8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/config-helpers@npm:^0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "@eslint/config-helpers@npm:0.2.0"
|
||||
checksum: 36e857165f1d4661ce1dd31e739135e49b3fc0cf1dcbd64e07e53475441640ab0b7abefa3e9718a598c570ee05a91b2f91cd74c008fa30fc3db8b05d07645fb2
|
||||
"@eslint/config-helpers@npm:^0.3.0":
|
||||
version: 0.3.0
|
||||
resolution: "@eslint/config-helpers@npm:0.3.0"
|
||||
checksum: d4fe8242ef580806ddaa88309f4bb2d3e6be5524cc6d6197675106c6d048f766a3f9cdc2e8e33bbc97a123065792cac8314fc85ac2b3cf72610e8df59301d63a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/core@npm:^0.12.0":
|
||||
version: 0.12.0
|
||||
resolution: "@eslint/core@npm:0.12.0"
|
||||
"@eslint/core@npm:^0.14.0":
|
||||
version: 0.14.0
|
||||
resolution: "@eslint/core@npm:0.14.0"
|
||||
dependencies:
|
||||
"@types/json-schema": ^7.0.15
|
||||
checksum: 3979af324102a3af2742060360563ba6b9525b8e1e524ad3d3e31e65af27db554b61d1cdfeaa42e15fb7d9ce9097c44225fd9e4f8193576accc1772457b88c12
|
||||
checksum: d68b8282b6f38c5145234f812f18f491d12d716240875591bd54bf5ac32858d979bdf6d38e521997a6e01f2c4223a3e66049714151da7278d0a95ff15b5d46c8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/core@npm:^0.15.1":
|
||||
version: 0.15.1
|
||||
resolution: "@eslint/core@npm:0.15.1"
|
||||
dependencies:
|
||||
"@types/json-schema": ^7.0.15
|
||||
checksum: 9215f00466d60764453466604443a491b0ea8263c148836fef723354d6ef1d550991e931d3df2780c99cee2cab14c4f41f97d5341ab12a8443236c961bb6f664
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -86,10 +95,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/js@npm:9.23.0":
|
||||
version: 9.23.0
|
||||
resolution: "@eslint/js@npm:9.23.0"
|
||||
checksum: 5ce796f9fd4cb7b8995062bd7697bf4406560089af039fe1f548b9d0948570763fa6d9f848f87fb13558ab85d4d88152d94d82fb9f6cf091b0dc4b4d6e15cfba
|
||||
"@eslint/js@npm:9.30.1":
|
||||
version: 9.30.1
|
||||
resolution: "@eslint/js@npm:9.30.1"
|
||||
checksum: 596adcd4336f098121b4f3f336169dabe86ca8d34b9fb4e30c9c44ccbb10def931bdbbd92cd910776c4030a05ae614fbc89fc8d09f69f5bad2795cd7157678e8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -100,13 +109,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/plugin-kit@npm:^0.2.7":
|
||||
version: 0.2.7
|
||||
resolution: "@eslint/plugin-kit@npm:0.2.7"
|
||||
"@eslint/plugin-kit@npm:^0.3.1":
|
||||
version: 0.3.3
|
||||
resolution: "@eslint/plugin-kit@npm:0.3.3"
|
||||
dependencies:
|
||||
"@eslint/core": ^0.12.0
|
||||
"@eslint/core": ^0.15.1
|
||||
levn: ^0.4.1
|
||||
checksum: e5d9be6ae54c7abd4605025e5831ac16dd0636ac5d41fbfcd8898a5d29711a2fb1fc8c784aa68a1469e66c8d41965da70d7a7516f9c2bca1c84342dd344bbb8e
|
||||
checksum: c9dc7b83ed011dce35ccc66dc53aaaa87e9fb2bd7c8a11231f7624334d82c9a53552e4b1a1cb60b74073fcc49a2661be874e503aae14cf2f6ac6b1c7faeb7080
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -142,9 +151,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@humanwhocodes/retry@npm:^0.4.2":
|
||||
version: 0.4.2
|
||||
resolution: "@humanwhocodes/retry@npm:0.4.2"
|
||||
checksum: 764127449a9f97d807b9c47f898fce8d7e0e8e8438366116b9ddcaacded99b2c285b8eed2cfdd5fdcb68be47728218db949f9618a58c0d3898d9fd14a6d6671e
|
||||
version: 0.4.3
|
||||
resolution: "@humanwhocodes/retry@npm:0.4.3"
|
||||
checksum: d423455b9d53cf01f778603404512a4246fb19b83e74fe3e28c70d9a80e9d4ae147d2411628907ca983e91a855a52535859a8bb218050bc3f6dbd7a553b7b442
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -177,9 +186,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/estree@npm:^1.0.6":
|
||||
version: 1.0.7
|
||||
resolution: "@types/estree@npm:1.0.7"
|
||||
checksum: d9312b7075bdd08f3c9e1bb477102f5458aaa42a8eec31a169481ce314ca99ac716645cff4fca81ea65a2294b0276a0de63159d1baca0f8e7b5050a92de950ad
|
||||
version: 1.0.8
|
||||
resolution: "@types/estree@npm:1.0.8"
|
||||
checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -206,12 +215,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:*, @types/node@npm:^22.7.7":
|
||||
version: 22.13.13
|
||||
resolution: "@types/node@npm:22.13.13"
|
||||
"@types/node@npm:*":
|
||||
version: 24.0.10
|
||||
resolution: "@types/node@npm:24.0.10"
|
||||
dependencies:
|
||||
undici-types: ~6.20.0
|
||||
checksum: 763c120725c4817227d3043095fd1e764744b2f3632e3e3c8242e1620a8e6fe1c9eeae38074dee3e39af6b890de142c3b6067f9b31e36635c44f3f5f4f2bb8cf
|
||||
undici-types: ~7.8.0
|
||||
checksum: 04e4d11a711a683d6ed71f8db86b35035771ee9c1f110cb904ca67454d3478f19c71f1f0ccd0ba5350e5ce63bea70d08c569f798f6f5a5d2a1d05c038f1f729f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^22.7.7":
|
||||
version: 22.16.0
|
||||
resolution: "@types/node@npm:22.16.0"
|
||||
dependencies:
|
||||
undici-types: ~6.21.0
|
||||
checksum: fccc24b9cfa95e165fb6a22871c812c9b021b0c686ced9b1572e1bd79ac3f8c78b36c04edfb2c96e10a8a1247c026d1dcad91c0c3e62dccf414057a37bac729d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -242,12 +260,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"acorn@npm:^8.14.0":
|
||||
version: 8.14.1
|
||||
resolution: "acorn@npm:8.14.1"
|
||||
"acorn@npm:^8.15.0":
|
||||
version: 8.15.0
|
||||
resolution: "acorn@npm:8.15.0"
|
||||
bin:
|
||||
acorn: bin/acorn
|
||||
checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94
|
||||
checksum: 309c6b49aedf1a2e34aaf266de06de04aab6eb097c02375c66fdeb0f64556a6a823540409914fb364d9a11bc30d79d485a2eba29af47992d3490e9886c4391c3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -336,14 +354,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^1.8.4":
|
||||
version: 1.8.4
|
||||
resolution: "axios@npm:1.8.4"
|
||||
"axios@npm:^1.10.0":
|
||||
version: 1.10.0
|
||||
resolution: "axios@npm:1.10.0"
|
||||
dependencies:
|
||||
follow-redirects: ^1.15.6
|
||||
form-data: ^4.0.0
|
||||
proxy-from-env: ^1.1.0
|
||||
checksum: e901dc1730bdcd769839b3d93ae6d6457a53d79b19a0eb623ebfea333441259ab51e63ca118baa47a5156567401466ac739f31087b4ee5e6770ab2e227484538
|
||||
checksum: b5fd840d499469bf968e44b8ac96f4b363c6aa4c791a50834c086a7cffbc2d77fe24f27af1aba46c3e1f4840aaf991461fc27537990596b93dea0f4df3245a86
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -362,12 +380,12 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"brace-expansion@npm:^1.1.7":
|
||||
version: 1.1.11
|
||||
resolution: "brace-expansion@npm:1.1.11"
|
||||
version: 1.1.12
|
||||
resolution: "brace-expansion@npm:1.1.12"
|
||||
dependencies:
|
||||
balanced-match: ^1.0.0
|
||||
concat-map: 0.0.1
|
||||
checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07
|
||||
checksum: 12cb6d6310629e3048cadb003e1aca4d8c9bb5c67c3c321bafdd7e7a50155de081f78ea3e0ed92ecc75a9015e784f301efc8132383132f4f7904ad1ac529c562
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -478,9 +496,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"conf@npm:^13.0.0":
|
||||
version: 13.1.0
|
||||
resolution: "conf@npm:13.1.0"
|
||||
"conf@npm:^14.0.0":
|
||||
version: 14.0.0
|
||||
resolution: "conf@npm:14.0.0"
|
||||
dependencies:
|
||||
ajv: ^8.17.1
|
||||
ajv-formats: ^3.0.1
|
||||
@@ -489,9 +507,9 @@ __metadata:
|
||||
dot-prop: ^9.0.0
|
||||
env-paths: ^3.0.0
|
||||
json-schema-typed: ^8.0.1
|
||||
semver: ^7.6.3
|
||||
semver: ^7.7.2
|
||||
uint8array-extras: ^1.4.0
|
||||
checksum: 621fb7d5ed9ff22e7e3b0315b67b38a8ad074d479816383189e75279dab92e760df0644f93762c4a84e644768d9370611744e017f4c6d6dae86ddbb035756127
|
||||
checksum: 107c1499980e57097742a684d6b46ec530d5b477f3aea9ed2f6b2531d06f14066f9ecb2a6d6f697c9f3ea0522a86ad483431691791bc5fa8b12b293eaef820a1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -516,14 +534,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2":
|
||||
version: 4.4.0
|
||||
resolution: "debug@npm:4.4.0"
|
||||
version: 4.4.1
|
||||
resolution: "debug@npm:4.4.1"
|
||||
dependencies:
|
||||
ms: ^2.1.3
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479
|
||||
checksum: a43826a01cda685ee4cec00fb2d3322eaa90ccadbef60d9287debc2a886be3e835d9199c80070ede75a409ee57828c4c6cd80e4b154f2843f0dc95a570dc0729
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -606,14 +624,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron-context-menu@npm:^4.0.5":
|
||||
version: 4.0.5
|
||||
resolution: "electron-context-menu@npm:4.0.5"
|
||||
"electron-context-menu@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "electron-context-menu@npm:4.1.0"
|
||||
dependencies:
|
||||
cli-truncate: ^4.0.0
|
||||
electron-dl: ^4.0.0
|
||||
electron-is-dev: ^3.0.1
|
||||
checksum: 4b486b65af658489661685414d605a388c433ca5f8543767310516509351043ffac242a34a66785d9cc68eee90640d765e49fba1237cbaa5c50490dc5509b9af
|
||||
checksum: 230e89f302df05fedd0bccb7fe1bf1dc0bc42028956b74766d40b88ada3257e9ded695b0bea129f5c1771164cbe6c6a24a69836004998220ec70719f406ede38
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -635,26 +653,26 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron-store@npm:^10.0.0":
|
||||
version: 10.0.1
|
||||
resolution: "electron-store@npm:10.0.1"
|
||||
"electron-store@npm:^10.1.0":
|
||||
version: 10.1.0
|
||||
resolution: "electron-store@npm:10.1.0"
|
||||
dependencies:
|
||||
conf: ^13.0.0
|
||||
type-fest: ^4.20.0
|
||||
checksum: f80a02a226128f89bed0e6ba9ae28e75ba86acb7a922697ddc16b1014c9a6925dbb5f9024ee7fc500f74a4e389e158ee4889c84d91dcb861bd68f4934276af6c
|
||||
conf: ^14.0.0
|
||||
type-fest: ^4.41.0
|
||||
checksum: b02159b2d4a13a442682313d4fe27a4332b44735da31a241c92315082fab34a5e1d876801b3a1ca4dc845472f792e18960c1446fc025119d3eff0a1ee1655ef9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron@npm:35.0.3":
|
||||
version: 35.0.3
|
||||
resolution: "electron@npm:35.0.3"
|
||||
"electron@npm:37.2.0":
|
||||
version: 37.2.0
|
||||
resolution: "electron@npm:37.2.0"
|
||||
dependencies:
|
||||
"@electron/get": ^2.0.0
|
||||
"@types/node": ^22.7.7
|
||||
extract-zip: ^2.0.1
|
||||
bin:
|
||||
electron: cli.js
|
||||
checksum: 90f4b6cb8b664c28b679f4a07523baf639c1213692ecae12423dff533e18390571303e2d74e122bbe5f1ecdfe66623e5523daa85bd3bd8c84f2ec9d81d82d50b
|
||||
checksum: a1751072b799a5e30d0e7eddd61a53c696c21c25942236e4ff1116cba8480bbf93e242393d2f89adcf4964bf6fd2155ca72ca8fafa0cde3f5b7512ebb3711c42
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -666,11 +684,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"end-of-stream@npm:^1.1.0":
|
||||
version: 1.4.4
|
||||
resolution: "end-of-stream@npm:1.4.4"
|
||||
version: 1.4.5
|
||||
resolution: "end-of-stream@npm:1.4.5"
|
||||
dependencies:
|
||||
once: ^1.4.0
|
||||
checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b
|
||||
checksum: 1e0cfa6e7f49887544e03314f9dfc56a8cb6dde910cbb445983ecc2ff426fc05946df9d75d8a21a3a64f2cecfe1bf88f773952029f46756b2ed64a24e95b1fb8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -751,13 +769,26 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint-scope@npm:^8.3.0":
|
||||
version: 8.3.0
|
||||
resolution: "eslint-scope@npm:8.3.0"
|
||||
"eslint-plugin-unused-imports@npm:^4.1.4":
|
||||
version: 4.1.4
|
||||
resolution: "eslint-plugin-unused-imports@npm:4.1.4"
|
||||
peerDependencies:
|
||||
"@typescript-eslint/eslint-plugin": ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0
|
||||
eslint: ^9.0.0 || ^8.0.0
|
||||
peerDependenciesMeta:
|
||||
"@typescript-eslint/eslint-plugin":
|
||||
optional: true
|
||||
checksum: 1f4ce3e3972699345513840f3af1b783033dbc3a3e85b62ce12b3f6a89fd8c92afe46d0c00af40bacb14465445983ba0ccc326a6fd5132553061fb0e47bcba19
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint-scope@npm:^8.4.0":
|
||||
version: 8.4.0
|
||||
resolution: "eslint-scope@npm:8.4.0"
|
||||
dependencies:
|
||||
esrecurse: ^4.3.0
|
||||
estraverse: ^5.2.0
|
||||
checksum: 57a58b6716533e25d527089826c4add89a047aecf75e4a88fee05f113ef5a72b85392b304a69bf670646cc3e068354aec70361b9718c2453949a05fc4d9bfe73
|
||||
checksum: cf88f42cd5e81490d549dc6d350fe01e6fe420f9d9ea34f134bb359b030e3c4ef888d36667632e448937fe52449f7181501df48c08200e3d3b0fee250d05364e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -768,25 +799,25 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint-visitor-keys@npm:^4.2.0":
|
||||
version: 4.2.0
|
||||
resolution: "eslint-visitor-keys@npm:4.2.0"
|
||||
checksum: 779c604672b570bb4da84cef32f6abb085ac78379779c1122d7879eade8bb38ae715645324597cf23232d03cef06032c9844d25c73625bc282a5bfd30247e5b5
|
||||
"eslint-visitor-keys@npm:^4.2.1":
|
||||
version: 4.2.1
|
||||
resolution: "eslint-visitor-keys@npm:4.2.1"
|
||||
checksum: 3a77e3f99a49109f6fb2c5b7784bc78f9743b834d238cdba4d66c602c6b52f19ed7bcd0a5c5dbbeae3a8689fd785e76c001799f53d2228b278282cf9f699fff5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint@npm:^9.23.0":
|
||||
version: 9.23.0
|
||||
resolution: "eslint@npm:9.23.0"
|
||||
"eslint@npm:^9.30.1":
|
||||
version: 9.30.1
|
||||
resolution: "eslint@npm:9.30.1"
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils": ^4.2.0
|
||||
"@eslint-community/regexpp": ^4.12.1
|
||||
"@eslint/config-array": ^0.19.2
|
||||
"@eslint/config-helpers": ^0.2.0
|
||||
"@eslint/core": ^0.12.0
|
||||
"@eslint/config-array": ^0.21.0
|
||||
"@eslint/config-helpers": ^0.3.0
|
||||
"@eslint/core": ^0.14.0
|
||||
"@eslint/eslintrc": ^3.3.1
|
||||
"@eslint/js": 9.23.0
|
||||
"@eslint/plugin-kit": ^0.2.7
|
||||
"@eslint/js": 9.30.1
|
||||
"@eslint/plugin-kit": ^0.3.1
|
||||
"@humanfs/node": ^0.16.6
|
||||
"@humanwhocodes/module-importer": ^1.0.1
|
||||
"@humanwhocodes/retry": ^0.4.2
|
||||
@@ -797,9 +828,9 @@ __metadata:
|
||||
cross-spawn: ^7.0.6
|
||||
debug: ^4.3.2
|
||||
escape-string-regexp: ^4.0.0
|
||||
eslint-scope: ^8.3.0
|
||||
eslint-visitor-keys: ^4.2.0
|
||||
espree: ^10.3.0
|
||||
eslint-scope: ^8.4.0
|
||||
eslint-visitor-keys: ^4.2.1
|
||||
espree: ^10.4.0
|
||||
esquery: ^1.5.0
|
||||
esutils: ^2.0.2
|
||||
fast-deep-equal: ^3.1.3
|
||||
@@ -821,18 +852,18 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
eslint: bin/eslint.js
|
||||
checksum: 5ace40f8e508f296bfa9d3f70a78a5082b7c9d230de0e53c0dc35f7b20bb2a9c0ce99eefaa6fa01766058f2eebaa86b8fc69ab7e0fb76b6b85b6e29af88063bb
|
||||
checksum: e6723b98ba19ff17cf0cacb29c3c0ea5c7c6b6fb648136b2d009e7e2da4980a2562c9523623b0faf449750e890f3b274b20bee11fa9c8f43362d235485ba2f91
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"espree@npm:^10.0.1, espree@npm:^10.3.0":
|
||||
version: 10.3.0
|
||||
resolution: "espree@npm:10.3.0"
|
||||
"espree@npm:^10.0.1, espree@npm:^10.4.0":
|
||||
version: 10.4.0
|
||||
resolution: "espree@npm:10.4.0"
|
||||
dependencies:
|
||||
acorn: ^8.14.0
|
||||
acorn: ^8.15.0
|
||||
acorn-jsx: ^5.3.2
|
||||
eslint-visitor-keys: ^4.2.0
|
||||
checksum: 63e8030ff5a98cea7f8b3e3a1487c998665e28d674af08b9b3100ed991670eb3cbb0e308c4548c79e03762753838fbe530c783f17309450d6b47a889fee72bef
|
||||
eslint-visitor-keys: ^4.2.1
|
||||
checksum: 5f9d0d7c81c1bca4bfd29a55270067ff9d575adb8c729a5d7f779c2c7b910bfc68ccf8ec19b29844b707440fc159a83868f22c8e87bbf7cbcb225ed067df6c85
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -988,14 +1019,15 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"form-data@npm:^4.0.0":
|
||||
version: 4.0.2
|
||||
resolution: "form-data@npm:4.0.2"
|
||||
version: 4.0.4
|
||||
resolution: "form-data@npm:4.0.4"
|
||||
dependencies:
|
||||
asynckit: ^0.4.0
|
||||
combined-stream: ^1.0.8
|
||||
es-set-tostringtag: ^2.1.0
|
||||
hasown: ^2.0.2
|
||||
mime-types: ^2.1.12
|
||||
checksum: e887298b22c13c7c9c5a8ba3716f295a479a13ca78bfd855ef11cbce1bcf22bc0ae2062e94808e21d46e5c667664a1a1a8a7f57d7040193c1fefbfb11af58aab
|
||||
checksum: 9b7788836df9fa5a6999e0c02515b001946b2a868cfe53f026c69e2c537a2ff9fbfb8e9d2b678744628f3dc7a2d6e14e4e45dfaf68aa6239727f0bdb8ce0abf2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1176,9 +1208,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"http-cache-semantics@npm:^4.0.0":
|
||||
version: 4.1.1
|
||||
resolution: "http-cache-semantics@npm:4.1.1"
|
||||
checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
|
||||
version: 4.2.0
|
||||
resolution: "http-cache-semantics@npm:4.2.0"
|
||||
checksum: 7a7246ddfce629f96832791176fd643589d954e6f3b49548dadb4290451961237fab8fcea41cd2008fe819d95b41c1e8b97f47d088afc0a1c81705287b4ddbcc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1546,12 +1578,12 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pgadmin4@workspace:."
|
||||
dependencies:
|
||||
axios: ^1.8.4
|
||||
electron: 35.0.3
|
||||
electron-context-menu: ^4.0.5
|
||||
electron-dl: ^4.0.0
|
||||
electron-store: ^10.0.0
|
||||
eslint: ^9.23.0
|
||||
axios: ^1.10.0
|
||||
electron: 37.2.0
|
||||
electron-context-menu: ^4.1.0
|
||||
electron-store: ^10.1.0
|
||||
eslint: ^9.30.1
|
||||
eslint-plugin-unused-imports: ^4.1.4
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
@@ -1577,12 +1609,12 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"pump@npm:^3.0.0":
|
||||
version: 3.0.2
|
||||
resolution: "pump@npm:3.0.2"
|
||||
version: 3.0.3
|
||||
resolution: "pump@npm:3.0.3"
|
||||
dependencies:
|
||||
end-of-stream: ^1.1.0
|
||||
once: ^1.3.1
|
||||
checksum: e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f
|
||||
checksum: 52843fc933b838c0330f588388115a1b28ef2a5ffa7774709b142e35431e8ab0c2edec90de3fa34ebb72d59fef854f151eea7dfc211b6dcf586b384556bd2f39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1669,12 +1701,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.3.2, semver@npm:^7.6.3":
|
||||
version: 7.7.1
|
||||
resolution: "semver@npm:7.7.1"
|
||||
"semver@npm:^7.3.2, semver@npm:^7.7.2":
|
||||
version: 7.7.2
|
||||
resolution: "semver@npm:7.7.2"
|
||||
bin:
|
||||
semver: bin/semver.js
|
||||
checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104
|
||||
checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1806,10 +1838,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"type-fest@npm:^4.18.2, type-fest@npm:^4.20.0":
|
||||
version: 4.38.0
|
||||
resolution: "type-fest@npm:4.38.0"
|
||||
checksum: 85fd7f3feff42bab6eac99f9f056d67932c36f834da87d68b0e89c040671415a902848c81be4d0f02919d157d7eae70dccf42c42dd2e2000d80e3ae1b97a9101
|
||||
"type-fest@npm:^4.18.2, type-fest@npm:^4.41.0":
|
||||
version: 4.41.0
|
||||
resolution: "type-fest@npm:4.41.0"
|
||||
checksum: 7055c0e3eb188425d07403f1d5dc175ca4c4f093556f26871fe22041bc93d137d54bef5851afa320638ca1379106c594f5aa153caa654ac1a7f22c71588a4e80
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1820,10 +1852,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:~6.20.0":
|
||||
version: 6.20.0
|
||||
resolution: "undici-types@npm:6.20.0"
|
||||
checksum: b7bc50f012dc6afbcce56c9fd62d7e86b20a62ff21f12b7b5cbf1973b9578d90f22a9c7fe50e638e96905d33893bf2f9f16d98929c4673c2480de05c6c96ea8b
|
||||
"undici-types@npm:~6.21.0":
|
||||
version: 6.21.0
|
||||
resolution: "undici-types@npm:6.21.0"
|
||||
checksum: 46331c7d6016bf85b3e8f20c159d62f5ae471aba1eb3dc52fff35a0259d58dcc7d592d4cc4f00c5f9243fa738a11cfa48bd20203040d4a9e6bc25e807fab7ab3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:~7.8.0":
|
||||
version: 7.8.0
|
||||
resolution: "undici-types@npm:7.8.0"
|
||||
checksum: 59521a5b9b50e72cb838a29466b3557b4eacbc191a83f4df5a2f7b156bc8263072b145dc4bb8ec41da7d56a7e9b178892458da02af769243d57f801a50ac5751
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -1,229 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
# This utility will generate a list of all dependencies, their upstream
|
||||
# repos and licence information.
|
||||
|
||||
import os
|
||||
import json
|
||||
import pkg_resources
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
# Column sizes
|
||||
name_size = 64
|
||||
version_size = 16
|
||||
licence_size = 36
|
||||
|
||||
|
||||
def print_title(title):
|
||||
print(title)
|
||||
print(("=" * len(title)) + "\n")
|
||||
|
||||
|
||||
def print_row(name, version, licence, url):
|
||||
print("{} {} {} {}".format(name.ljust(name_size),
|
||||
version.ljust(version_size),
|
||||
licence.ljust(licence_size), url))
|
||||
|
||||
|
||||
def print_table_header():
|
||||
print_row("Name", "Version", "Licence", "URL")
|
||||
print_row("----", "-------", "-------", "---")
|
||||
|
||||
|
||||
def print_summary(count):
|
||||
print("\n{} dependencies listed.\n".format(count))
|
||||
|
||||
|
||||
def get_python_deps():
|
||||
# Get the path to the requirements.txt file
|
||||
req_file = os.path.realpath(os.path.dirname(os.path.abspath(__file__)) +
|
||||
"/../requirements.txt")
|
||||
|
||||
with open(req_file, 'r') as req_file_p:
|
||||
required = req_file_p.read().splitlines()
|
||||
|
||||
# Get the package info from the requirements file
|
||||
requirements = pkg_resources.parse_requirements(required)
|
||||
|
||||
have_unknowns = False
|
||||
count = 0
|
||||
|
||||
# Iterate the packages and get the distribution info for each
|
||||
for pkg in requirements:
|
||||
|
||||
try:
|
||||
distribution = pkg_resources.get_distribution(pkg)
|
||||
except IndexError:
|
||||
# The package probably isn't required on this version of Python,
|
||||
# thus we have no info about it.
|
||||
have_unknowns = True
|
||||
|
||||
name = pkg.name
|
||||
version = "Unknown"
|
||||
|
||||
for spec in pkg.specs:
|
||||
if spec[0] == "==":
|
||||
version = spec[1]
|
||||
break
|
||||
|
||||
licence = "Unknown"
|
||||
url = "Unknown"
|
||||
if pkg.url is not None:
|
||||
url = pkg.url
|
||||
|
||||
print_row(name, version, licence, url)
|
||||
count = count + 1
|
||||
|
||||
# Next one....
|
||||
continue
|
||||
except pkg_resources.VersionConflict:
|
||||
# Next one....
|
||||
continue
|
||||
|
||||
try:
|
||||
metadata = distribution.get_metadata_lines('METADATA')
|
||||
except IOError:
|
||||
metadata = distribution.get_metadata_lines('PKG-INFO')
|
||||
|
||||
# Somewhere to store the info we need...
|
||||
name = ""
|
||||
version = "Unknown"
|
||||
url = "Unknown"
|
||||
licence = "Unknown"
|
||||
|
||||
# Loop over each line in the metadata and grab the info we need
|
||||
for line in metadata:
|
||||
if line.startswith("Name: "):
|
||||
name = line[6:]
|
||||
|
||||
if line.startswith("Version: "):
|
||||
version = line[9:]
|
||||
|
||||
if line.startswith("License: "):
|
||||
licence = line[9:]
|
||||
|
||||
if line.startswith("Home-page: "):
|
||||
url = line[11:]
|
||||
|
||||
if name != "":
|
||||
print_row(name, version, licence, url)
|
||||
count = count + 1
|
||||
|
||||
if have_unknowns:
|
||||
major = sys.version_info.major
|
||||
minor = sys.version_info.minor
|
||||
|
||||
print("")
|
||||
print(textwrap.fill("NOTE: This report was generated using "
|
||||
"Python {}.{}. Full information may not be shown "
|
||||
"for Python modules that are not required with "
|
||||
"this version.".format(
|
||||
major, minor), width=79))
|
||||
|
||||
print_summary(count)
|
||||
|
||||
|
||||
def get_js_deps(is_runtime=False, hardcoded_deps=0):
|
||||
# Get the path to package.json file
|
||||
if is_runtime:
|
||||
web_dir = os.path.realpath(os.path.dirname(
|
||||
os.path.abspath(__file__)) + "/../runtime/")
|
||||
else:
|
||||
web_dir = os.path.realpath(os.path.dirname(
|
||||
os.path.abspath(__file__)) + "/../web/")
|
||||
|
||||
# Build the Yarn command
|
||||
cmd = ["yarn", "--cwd", web_dir, "licenses", "list", "--json",
|
||||
"--production=true"]
|
||||
|
||||
# Run the command
|
||||
process = Popen(cmd, stdout=PIPE)
|
||||
(output, err) = process.communicate()
|
||||
process.wait()
|
||||
|
||||
# Cleanup the output
|
||||
output_str = output.splitlines()[-1]
|
||||
if hasattr(output_str, 'decode'):
|
||||
output_str = output_str.decode('utf-8')
|
||||
raw_data = json.loads(output_str)
|
||||
|
||||
modules = raw_data['data']['body']
|
||||
|
||||
# Loop through the modules, and output the data.
|
||||
for module in modules:
|
||||
name = module[0]
|
||||
|
||||
version = "Unknown"
|
||||
if module[1] != "":
|
||||
version = module[1]
|
||||
|
||||
licence = "Unknown"
|
||||
if module[2] != "":
|
||||
licence = module[2]
|
||||
|
||||
if module[3] != "":
|
||||
url = module[3]
|
||||
|
||||
print_row(name, version, licence, url)
|
||||
|
||||
deps = len(modules)
|
||||
if hardcoded_deps > 0:
|
||||
deps = deps + hardcoded_deps
|
||||
|
||||
print_summary(deps)
|
||||
|
||||
|
||||
def dump_header():
|
||||
print_title("pgAdmin 4 Dependency Inventory")
|
||||
|
||||
print(textwrap.fill(
|
||||
"pgAdmin 4 is built on Python, Javascript and NW.js (node-webkit), "
|
||||
"and is dependent on various third party libraries. These are "
|
||||
"automatically compiled from the system, requirements.txt "
|
||||
"and packages.json and listed below.",
|
||||
width=79) + "\n")
|
||||
|
||||
|
||||
def dump_runtime():
|
||||
print_title("Runtime Dependencies")
|
||||
print_table_header()
|
||||
print_row("Python", "3.8+", "PSF", "https://www.python.org/")
|
||||
print_row("Electron", "30.0.5", "MIT",
|
||||
"https://www.npmjs.com/package/electron")
|
||||
|
||||
# Make sure to change the count of hardcoded_deps if we will
|
||||
# manually add some more dependencies in future.
|
||||
get_js_deps(is_runtime=True, hardcoded_deps=2)
|
||||
|
||||
|
||||
def dump_python():
|
||||
print_title("Python Dependencies")
|
||||
print_table_header()
|
||||
|
||||
get_python_deps()
|
||||
|
||||
|
||||
def dump_js():
|
||||
print_title("Javascript Dependencies")
|
||||
print_table_header()
|
||||
|
||||
get_js_deps()
|
||||
|
||||
|
||||
# Let's do this thing!
|
||||
dump_header()
|
||||
dump_runtime()
|
||||
dump_python()
|
||||
dump_js()
|
||||
@@ -0,0 +1,495 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
"""
|
||||
Parses a pgAdmin release note file in ReStructuredText (RST) format
|
||||
and converts it into Email (HTML), Markdown, and HTML (web) formats.
|
||||
Issue links are always omitted from lists in all outputs.
|
||||
Allows skipping specific issue numbers via command line.
|
||||
The Email HTML output can optionally be saved to a file.
|
||||
|
||||
Usage:
|
||||
python release_converter.py <input_rst_file_path> \\
|
||||
[--output-email-html <output_path.html>] \\
|
||||
[--skip-issues ISSUE_NUM [ISSUE_NUM ...]]
|
||||
|
||||
Examples:
|
||||
# Default: No issue links, don't skip issues, print all to console
|
||||
python release_converter.py path/to/notes.rst
|
||||
|
||||
# Skip issues 8602 and 8603
|
||||
python release_converter.py path/to/notes.rst --skip-issues 8602 8603
|
||||
|
||||
# Save email output, default skip behavior
|
||||
python release_converter.py path/to/notes.rst --output-email-html email.html
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import html
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
# --- PARSING FUNCTION (parse_rst_release_note) ---
|
||||
|
||||
|
||||
def parse_rst_release_note(rst_text):
|
||||
"""Parses the RST release note text to extract key information."""
|
||||
data = {
|
||||
'version': None,
|
||||
'release_date': None,
|
||||
'features': [],
|
||||
'bug_fixes': [],
|
||||
'housekeeping': []
|
||||
}
|
||||
|
||||
version_match = re.search(r'Version\s+([^\n\*]+)', rst_text)
|
||||
if version_match:
|
||||
data['version'] = version_match.group(1).strip()
|
||||
else:
|
||||
print("Warning: Could not parse version.", file=sys.stderr)
|
||||
|
||||
date_match = re.search(r'Release date:\s*(\d{4}-\d{2}-\d{2})', rst_text)
|
||||
if date_match:
|
||||
data['release_date'] = date_match.group(1).strip()
|
||||
else:
|
||||
print("Warning: Could not parse release date.", file=sys.stderr)
|
||||
|
||||
current_section_list = None
|
||||
lines = rst_text.splitlines()
|
||||
|
||||
for i, line_raw in enumerate(lines):
|
||||
line_stripped = line_raw.strip()
|
||||
if i > 0:
|
||||
prev_line_stripped = lines[i - 1].strip()
|
||||
# Check if the previous line looks like an RST section underline
|
||||
if len(prev_line_stripped) > 3 and \
|
||||
all(c == '*' for c in prev_line_stripped):
|
||||
if i > 1:
|
||||
# Header text is two lines above the current line
|
||||
header_text_line = lines[i - 2].strip().lower()
|
||||
if "new features" in header_text_line:
|
||||
current_section_list = data['features']
|
||||
elif "bug fixes" in header_text_line:
|
||||
current_section_list = data['bug_fixes']
|
||||
elif "housekeeping" in header_text_line:
|
||||
current_section_list = data['housekeeping']
|
||||
else:
|
||||
# Not a section we track, keep previous section active
|
||||
pass
|
||||
# Skip the (usually blank) line after the underline
|
||||
continue
|
||||
|
||||
# Parse items only if we are within a known section
|
||||
if current_section_list is not None and line_stripped.startswith('|'):
|
||||
line_to_parse = line_stripped
|
||||
# Try matching the standard 'Issue #' format
|
||||
item_match = re.match(
|
||||
r'\|\s*`Issue\s+#(\d+)\s+<([^>]+)>`_\s*-\s*(.*)',
|
||||
line_to_parse
|
||||
)
|
||||
if item_match:
|
||||
issue_num, url, description = item_match.groups()
|
||||
item_data = {
|
||||
'issue': issue_num.strip(),
|
||||
'url': url.strip(),
|
||||
'description': description.strip().rstrip('.')
|
||||
}
|
||||
current_section_list.append(item_data)
|
||||
else:
|
||||
# Fallback for items starting with '|' but without Issue link
|
||||
simple_match = re.match(r'\|\s*(.*)', line_to_parse)
|
||||
simple_text = (simple_match.group(1).strip().rstrip('.')
|
||||
if simple_match else None)
|
||||
if simple_text:
|
||||
item_data = {
|
||||
'issue': None,
|
||||
'url': None,
|
||||
'description': simple_text
|
||||
}
|
||||
current_section_list.append(item_data)
|
||||
|
||||
# Combine bug fixes and housekeeping for unified output sections
|
||||
data['bugs_housekeeping'] = data['bug_fixes'] + data['housekeeping']
|
||||
|
||||
# Add warnings if sections seem empty after parsing
|
||||
if not data['features']:
|
||||
print("Warning: No 'New features' items parsed.", file=sys.stderr)
|
||||
if not data['bugs_housekeeping']:
|
||||
print("Warning: No 'Bug fixes' or 'Housekeeping' items parsed.",
|
||||
file=sys.stderr)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
# --- Helper for Plurals ---
|
||||
|
||||
|
||||
def pluralize(count, singular, plural=None):
|
||||
"""Adds 's' for pluralization if count is not 1."""
|
||||
if count == 1:
|
||||
return f"{count} {singular}"
|
||||
else:
|
||||
plural_form = plural if plural else singular + 's'
|
||||
return f"{count} {plural_form}"
|
||||
|
||||
|
||||
# --- Formatting Functions ---
|
||||
|
||||
|
||||
def format_email_html(data, skip_issues_set=None):
|
||||
"""Formats the extracted data into HTML suitable for email."""
|
||||
if skip_issues_set is None:
|
||||
skip_issues_set = set()
|
||||
if not data.get('version'):
|
||||
return "<p>Error: Version not found in parsed data.</p>"
|
||||
|
||||
version = data['version']
|
||||
release_url = (
|
||||
f"https://www.pgadmin.org/docs/pgadmin4/{version}/"
|
||||
f"release_notes_{version.replace('.', '_')}.html"
|
||||
)
|
||||
download_url = "https://www.pgadmin.org/download/"
|
||||
website_url = "https://www.pgadmin.org/"
|
||||
|
||||
# Filter lists first based on skip_issues_set
|
||||
filtered_features = [
|
||||
item for item in data.get('features', [])
|
||||
if item.get('issue') not in skip_issues_set
|
||||
]
|
||||
filtered_bugs = [
|
||||
item for item in data.get('bugs_housekeeping', [])
|
||||
if item.get('issue') not in skip_issues_set
|
||||
]
|
||||
num_features = len(filtered_features)
|
||||
num_bugs_housekeeping = len(filtered_bugs)
|
||||
|
||||
# Build HTML output
|
||||
output = f"<h2><strong>pgAdmin 4 v{version} Released</strong></h2>\n"
|
||||
output += (
|
||||
f"<p>The pgAdmin Development Team is pleased to announce "
|
||||
f"pgAdmin 4 version {version}.</p>\n"
|
||||
)
|
||||
output += (
|
||||
f"<p>This release of pgAdmin 4 includes "
|
||||
f"{pluralize(num_features, 'new feature')} and "
|
||||
f"{pluralize(num_bugs_housekeeping, 'bug fix', 'bug fixes')}/"
|
||||
f"housekeeping change"
|
||||
f"{'s' if num_bugs_housekeeping != 1 else ''}. "
|
||||
)
|
||||
output += (
|
||||
f'For more details please see the '
|
||||
f'<a href="{release_url}">Release Notes</a>.</p>\n'
|
||||
)
|
||||
output += (
|
||||
'<p>pgAdmin is the leading Open Source graphical management '
|
||||
'tool for PostgreSQL. For more information, please see</p>\n'
|
||||
)
|
||||
# Note: Removed '	' (HTML tab) as it's non-standard; use CSS if needed
|
||||
output += f'<p><a href="{website_url}">{website_url}</a></p>\n'
|
||||
output += "<p>Notable changes in this release include:</p>\n"
|
||||
|
||||
# Add features section only if items remain after filtering
|
||||
if filtered_features:
|
||||
output += "<p><strong>Features</strong></p>\n<ul>\n"
|
||||
for item in filtered_features:
|
||||
desc = html.escape(item.get('description', 'N/A').strip())
|
||||
output += f" <li>{desc}.</li>\n"
|
||||
output += "</ul>\n"
|
||||
|
||||
# Add bugs section only if items remain after filtering
|
||||
if filtered_bugs:
|
||||
# Note: Heading was "Bugs/Housekeeping" in pasted code,
|
||||
# changed to "Bug fixes" to match GDoc style mentioned earlier
|
||||
output += "<p><strong>Bug fixes</strong></p>\n<ul>\n"
|
||||
for item in filtered_bugs:
|
||||
desc = html.escape(item.get('description', 'N/A').strip())
|
||||
output += f" <li>{desc}.</li>\n"
|
||||
output += "</ul>\n"
|
||||
|
||||
output += (
|
||||
"<p>Builds for Windows and macOS are available now, along with "
|
||||
"a Python Wheel,<br>"
|
||||
)
|
||||
output += (
|
||||
"Docker Container, RPM, DEB Package, and source code tarball from:<br>"
|
||||
)
|
||||
output += f'<a href="{download_url}">{download_url}</a></p>\n'
|
||||
# Note: Adjusted sign-off slightly from pasted code to match GDoc examples
|
||||
output += "<p>--<br>The pgAdmin Team</p>\n"
|
||||
|
||||
return output
|
||||
|
||||
|
||||
def format_markdown(data, skip_issues_set=None):
|
||||
"""Formats the extracted data into Markdown (no issue links in lists)."""
|
||||
if skip_issues_set is None:
|
||||
skip_issues_set = set()
|
||||
if not data.get('version'):
|
||||
return "Error: Version not found in parsed data."
|
||||
|
||||
version = data['version']
|
||||
release_url = (
|
||||
f"https://www.pgadmin.org/docs/pgadmin4/{version}/"
|
||||
f"release_notes_{version.replace('.', '_')}.html"
|
||||
)
|
||||
download_url = "https://www.pgadmin.org/download/"
|
||||
website_url = "https://www.pgadmin.org/"
|
||||
|
||||
filtered_features = [
|
||||
item for item in data.get('features', [])
|
||||
if item.get('issue') not in skip_issues_set
|
||||
]
|
||||
filtered_bugs = [
|
||||
item for item in data.get('bugs_housekeeping', [])
|
||||
if item.get('issue') not in skip_issues_set
|
||||
]
|
||||
num_features = len(filtered_features)
|
||||
num_bugs_housekeeping = len(filtered_bugs)
|
||||
|
||||
output = (
|
||||
f"The pgAdmin Development Team is pleased to announce "
|
||||
f"pgAdmin 4 version {version}. "
|
||||
)
|
||||
output += (
|
||||
f"This release of pgAdmin 4 includes "
|
||||
f"{pluralize(num_features, 'new feature')} and "
|
||||
f"{pluralize(num_bugs_housekeeping, 'bug fix', 'bug fixes')}/"
|
||||
f"housekeeping change"
|
||||
f"{'s' if num_bugs_housekeeping != 1 else ''}. "
|
||||
)
|
||||
output += (f"For more details, "
|
||||
f"please see the [release notes]({release_url}).")
|
||||
# Ensure markdown paragraph break
|
||||
output += "\n \n"
|
||||
output += (
|
||||
f"pgAdmin is the leading Open Source graphical management "
|
||||
f"tool for PostgreSQL. For more information, please see "
|
||||
f"[the website]({website_url})."
|
||||
)
|
||||
output += "\n\n"
|
||||
output += "Notable changes in this release include:\n \n"
|
||||
|
||||
if filtered_features:
|
||||
output += "### Features:\n"
|
||||
for item in filtered_features:
|
||||
desc = item.get('description', 'N/A').strip()
|
||||
output += f"* {desc}.\n" # Link logic removed
|
||||
output += "\n"
|
||||
|
||||
if filtered_bugs:
|
||||
output += "### Bugs/Housekeeping:\n"
|
||||
for item in filtered_bugs:
|
||||
desc = item.get('description', 'N/A').strip()
|
||||
output += f"* {desc}.\n" # Link logic removed
|
||||
output += "\n"
|
||||
|
||||
output += (
|
||||
f"Builds for Windows and macOS are available now, along with "
|
||||
f"a Python Wheel, Docker Container, RPM, DEB Package, and "
|
||||
f"source code tarball from the [download area]({download_url})."
|
||||
)
|
||||
|
||||
return output
|
||||
|
||||
|
||||
def format_html(data, skip_issues_set=None):
|
||||
"""Formats extracted data into HTML for web news articles."""
|
||||
if skip_issues_set is None:
|
||||
skip_issues_set = set()
|
||||
# Removed local import html, using global one
|
||||
|
||||
if not data.get('version'):
|
||||
return "<p>Error: Version not found in parsed data.</p>"
|
||||
|
||||
version = data['version']
|
||||
# Use relative paths for web article links
|
||||
release_url = (
|
||||
f"/docs/pgadmin4/{version}/"
|
||||
f"release_notes_{version.replace('.', '_')}.html"
|
||||
)
|
||||
download_url = "/download"
|
||||
|
||||
filtered_features = [
|
||||
item for item in data.get('features', [])
|
||||
if item.get('issue') not in skip_issues_set
|
||||
]
|
||||
filtered_bugs = [
|
||||
item for item in data.get('bugs_housekeeping', [])
|
||||
if item.get('issue') not in skip_issues_set
|
||||
]
|
||||
num_features = len(filtered_features)
|
||||
num_bugs_housekeeping = len(filtered_bugs)
|
||||
|
||||
output = (
|
||||
f"<p>The pgAdmin Development Team is pleased to announce "
|
||||
f"pgAdmin 4 version {version}. "
|
||||
)
|
||||
output += (
|
||||
f"This release of pgAdmin 4 includes "
|
||||
f"{pluralize(num_features, 'new feature')} and "
|
||||
f"{pluralize(num_bugs_housekeeping, 'bug fix', 'bug fixes')}/"
|
||||
f"housekeeping change"
|
||||
f"{'s' if num_bugs_housekeeping != 1 else ''}. "
|
||||
)
|
||||
output += (
|
||||
f'For more details, please see the '
|
||||
f'<a href="{release_url}">release notes</a>.</p>\n'
|
||||
)
|
||||
output += "<p>Notable changes in this release include:</p>\n"
|
||||
|
||||
if filtered_features:
|
||||
output += "<p><strong>Features:</strong></p>\n<ul>\n"
|
||||
for item in filtered_features:
|
||||
desc = html.escape(item.get('description', 'N/A').strip())
|
||||
# Link logic removed, keep bolding for features in news format
|
||||
output += f" <li><strong>{desc}.</strong></li>\n"
|
||||
output += "</ul>\n"
|
||||
|
||||
if filtered_bugs:
|
||||
output += "<p><strong>Bugs/Housekeeping:</strong></p>\n<ul>\n"
|
||||
for item in filtered_bugs:
|
||||
desc = html.escape(item.get('description', 'N/A').strip())
|
||||
# Link logic removed, no bolding for bugs in news format
|
||||
output += f" <li>{desc}.</li>\n"
|
||||
output += "</ul>\n"
|
||||
|
||||
output += f'<p><a href="{download_url}">Download</a> your copy now!</p>'
|
||||
|
||||
return output
|
||||
|
||||
|
||||
# --- Main Execution ---
|
||||
if __name__ == "__main__":
|
||||
# --- Setup Argument Parser ---
|
||||
parser = argparse.ArgumentParser(
|
||||
description=(
|
||||
"Converts pgAdmin RST release notes to Email (HTML), Markdown, "
|
||||
"and HTML (web) formats.\nIssue links are omitted from lists. "
|
||||
"Allows skipping specific issues."
|
||||
),
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog=(
|
||||
"Examples:\n"
|
||||
" # Default: Don't skip issues\n"
|
||||
" python release_converter.py path/to/notes.rst\n\n"
|
||||
" # Skip issues 8602 and 8603\n"
|
||||
" python release_converter.py path/to/notes.rst "
|
||||
"--skip-issues 8602 8603\n\n"
|
||||
" # Save email output, default skip behavior\n"
|
||||
" python release_converter.py path/to/notes.rst "
|
||||
"--output-email-html email.html"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"input_file",
|
||||
metavar="<input_rst_file_path>",
|
||||
type=str,
|
||||
help="Path to the input ReStructuredText (.rst) release note file."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output-email-html",
|
||||
metavar="<email_output_path.html>",
|
||||
type=str,
|
||||
default=None, # Use None as default for optional args
|
||||
help="Optional path to save the Email HTML output to a file."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--skip-issues",
|
||||
metavar="ISSUE_NUM",
|
||||
type=str,
|
||||
nargs='+', # Expect 1 or more arguments
|
||||
default=None, # Default to None if not provided
|
||||
help="List of issue numbers (e.g., 8602 8603) to skip from lists."
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# --- Read Input File ---
|
||||
input_rst_content = ""
|
||||
try:
|
||||
with open(args.input_file, "r", encoding="utf-8") as f:
|
||||
input_rst_content = f.read()
|
||||
print(f"Successfully read file: {args.input_file}", file=sys.stderr)
|
||||
except FileNotFoundError:
|
||||
print(f"Error: Input file not found at '{args.input_file}'",
|
||||
file=sys.stderr)
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"Error reading file '{args.input_file}': {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# --- Parse the input data ---
|
||||
print("Parsing release notes...", file=sys.stderr)
|
||||
parsed_data = parse_rst_release_note(input_rst_content)
|
||||
|
||||
if not parsed_data.get('version'):
|
||||
print("\nError: Parsing failed to find version. Cannot proceed.",
|
||||
file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# --- Create skip set ---
|
||||
# Handle default=None for skip_issues
|
||||
skip_issues_set = set(args.skip_issues) if args.skip_issues else set()
|
||||
if skip_issues_set:
|
||||
print(f"Attempting to skip issues: "
|
||||
f"{', '.join(sorted(list(skip_issues_set)))}", file=sys.stderr)
|
||||
|
||||
# --- Generate the different formats ---
|
||||
print("Generating output formats...", file=sys.stderr)
|
||||
email_html_output = format_email_html(
|
||||
parsed_data, skip_issues_set=skip_issues_set
|
||||
)
|
||||
markdown_output = format_markdown(
|
||||
parsed_data, skip_issues_set=skip_issues_set
|
||||
)
|
||||
news_html_output = format_html(
|
||||
parsed_data, skip_issues_set=skip_issues_set
|
||||
)
|
||||
print("Format generation complete.", file=sys.stderr)
|
||||
|
||||
# --- Handle Outputs ---
|
||||
if args.output_email_html:
|
||||
try:
|
||||
output_filename = args.output_email_html
|
||||
# Recommend .html extension, but allow user override
|
||||
if not output_filename.lower().endswith(('.html', '.htm')):
|
||||
print(f"Warning: Output file '{output_filename}' does not end "
|
||||
f"with .html or .htm. The content is HTML.",
|
||||
file=sys.stderr)
|
||||
|
||||
with open(output_filename, "w", encoding="utf-8") as f:
|
||||
f.write(email_html_output)
|
||||
print(f"Email HTML output successfully "
|
||||
f"saved to: {output_filename}",
|
||||
file=sys.stderr)
|
||||
except Exception as e:
|
||||
print(f"Error writing Email HTML output to file "
|
||||
f"'{args.output_email_html}': {e}", file=sys.stderr)
|
||||
# Print to console as fallback if write fails
|
||||
print("\n--- Email HTML Output ---")
|
||||
print(email_html_output)
|
||||
print("\n---------------------------------\n")
|
||||
else:
|
||||
# Default: Print email HTML to console
|
||||
print("\n--- Email HTML Output ---")
|
||||
print(email_html_output)
|
||||
print("\n---------------------------------\n")
|
||||
|
||||
# --- Output Other Formats (always to console) ---
|
||||
print("--- Markdown Output ---")
|
||||
print(markdown_output)
|
||||
print("\n---------------------------------\n")
|
||||
|
||||
print("--- News Article HTML Output ---")
|
||||
print(news_html_output)
|
||||
print("\n---------------------------------\n")
|
||||
|
||||
print("Script finished.", file=sys.stderr)
|
||||
@@ -7,7 +7,7 @@ then
|
||||
fi
|
||||
|
||||
echo Creating a blank environment...
|
||||
python3 -m venv venv || { echo 'ERROR: Failed to create the blank virtual env.' ; exit 1; }
|
||||
python3 -m venv --system-site-packages venv || { echo 'ERROR: Failed to create the blank virtual env.' ; exit 1; }
|
||||
|
||||
echo Activating the virtual environment...
|
||||
. venv/bin/activate || { echo 'ERROR: Failed to activate the virtual env.' ; exit 1; }
|
||||
@@ -18,8 +18,8 @@ pip install --upgrade pip
|
||||
if [ ${TEST} -eq 1 ];
|
||||
then
|
||||
echo Installing requirements for running Python tests...
|
||||
pip install --no-cache-dir wheel sphinx==7.4.7 sphinxcontrib-youtube -r web/regression/requirements.txt || { echo 'ERROR: Failed to install Python requirements.' ; exit 1; }
|
||||
pip install --force-reinstall --no-cache-dir wheel sphinx==7.4.7 sphinxcontrib-youtube -r web/regression/requirements.txt || { echo 'ERROR: Failed to install Python requirements.' ; exit 1; }
|
||||
else
|
||||
echo Installing requirements for executing and building only...
|
||||
pip install --no-cache-dir wheel sphinx==7.4.7 sphinxcontrib-youtube -r requirements.txt || { echo 'ERROR: Failed to install Python requirements.' ; exit 1; }
|
||||
pip install --force-reinstall --no-cache-dir wheel sphinx==7.4.7 sphinxcontrib-youtube -r requirements.txt || { echo 'ERROR: Failed to install Python requirements.' ; exit 1; }
|
||||
fi
|
||||
@@ -59,6 +59,7 @@ LANGUAGES = {
|
||||
'pt_BR': 'Portuguese (Brazilian)',
|
||||
'ru': 'Russian',
|
||||
'es': 'Spanish',
|
||||
'sv': 'Swedish'
|
||||
}
|
||||
|
||||
# DO NOT CHANGE UNLESS YOU KNOW WHAT YOU ARE DOING!
|
||||
@@ -364,6 +365,9 @@ SESSION_DB_PATH = os.path.join(DATA_DIR, 'sessions')
|
||||
|
||||
SESSION_COOKIE_NAME = 'pga4_session'
|
||||
|
||||
# Session digest method
|
||||
SESSION_DIGEST_METHOD = 'hashlib.sha1'
|
||||
|
||||
##########################################################################
|
||||
# Mail server settings
|
||||
##########################################################################
|
||||
@@ -464,12 +468,14 @@ DEFAULT_BINARY_PATHS = {
|
||||
"pg-15": "",
|
||||
"pg-16": "",
|
||||
"pg-17": "",
|
||||
"pg-18": "",
|
||||
"ppas": "",
|
||||
"ppas-13": "",
|
||||
"ppas-14": "",
|
||||
"ppas-15": "",
|
||||
"ppas-16": "",
|
||||
"ppas-17": ""
|
||||
"ppas-17": "",
|
||||
"ppas-18": ""
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
@@ -484,12 +490,14 @@ FIXED_BINARY_PATHS = {
|
||||
"pg-15": "",
|
||||
"pg-16": "",
|
||||
"pg-17": "",
|
||||
"pg-18": "",
|
||||
"ppas": "",
|
||||
"ppas-13": "",
|
||||
"ppas-14": "",
|
||||
"ppas-15": "",
|
||||
"ppas-16": "",
|
||||
"ppas-17": ""
|
||||
"ppas-17": "",
|
||||
"ppas-18": ""
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""
|
||||
|
||||
Revision ID: 1f0eddc8fc79
|
||||
Revises: e982c040d9b5
|
||||
Create Date: 2025-03-26 15:58:24.131719
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from pgadmin.utils.constants import RESTRICTION_TYPE_DATABASES
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '1f0eddc8fc79'
|
||||
down_revision = 'e982c040d9b5'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column('server',
|
||||
sa.Column('db_res_type', sa.String(length=32),
|
||||
server_default=RESTRICTION_TYPE_DATABASES))
|
||||
|
||||
# For adding custom role permissions
|
||||
op.add_column('role', sa.Column('permissions', sa.Text()))
|
||||
|
||||
# get metadata from current connection
|
||||
meta = sa.MetaData()
|
||||
# define table representation
|
||||
meta.reflect(op.get_bind(), only=('role',))
|
||||
role_table = sa.Table('role', meta)
|
||||
|
||||
from pgadmin.tools.user_management.PgAdminPermissions import (
|
||||
AllPermissionTypes)
|
||||
op.execute(
|
||||
role_table.update().where(role_table.c.name == 'User')
|
||||
.values(permissions=",".join(AllPermissionTypes.list())))
|
||||
|
||||
|
||||
def downgrade():
|
||||
# pgAdmin only upgrades, downgrade not implemented.
|
||||
pass
|
||||
@@ -26,8 +26,9 @@ depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
with op.batch_alter_table("server",
|
||||
table_kwargs={'sqlite_autoincrement': True}) as batch_op:
|
||||
with (op.batch_alter_table("server",
|
||||
table_kwargs={'sqlite_autoincrement': True})
|
||||
as batch_op):
|
||||
if context.get_impl().bind.dialect.name == "sqlite":
|
||||
batch_op.alter_column('id', autoincrement=True)
|
||||
batch_op.add_column(sa.Column('is_adhoc', sa.Integer(),
|
||||
|
||||