From 35dad52e83dcb729304a9555b10eb59bec72a113 Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Mon, 8 Jan 2024 12:00:49 +0100 Subject: [PATCH 001/284] [Fixes #11801] Upgrade to geoserver-restconfig 2.0.10 (#11802) * Upgrade to geoserver-restconfig 2.0.10 * relax version --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 81a794a4559..70d05aaf2f2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -97,7 +97,7 @@ geonode-user-messages==2.0.2 geonode-announcements==2.0.2 geonode-django-activity-stream==0.10.0 gn-arcrest==10.5.6 -geoserver-restconfig==2.0.9 +geoserver-restconfig~=2.0.10 gn-gsimporter==2.0.4 gisdata==0.5.4 diff --git a/setup.cfg b/setup.cfg index 37e8ae01318..5d2d9313fe1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -122,7 +122,7 @@ install_requires = geonode-announcements==2.0.2 geonode-django-activity-stream==0.10.0 gn-arcrest==10.5.6 - geoserver-restconfig==2.0.9 + geoserver-restconfig~=2.0.10 gn-gsimporter==2.0.4 gisdata==0.5.4 From 8d2dfbf7f71f0a186016b3fd8ef1180a57b45925 Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Tue, 9 Jan 2024 12:10:30 +0100 Subject: [PATCH 002/284] Don't quote JAVA_OPTS (#11807) --- .env.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.sample b/.env.sample index 962f5a82258..afc97264bc3 100644 --- a/.env.sample +++ b/.env.sample @@ -101,7 +101,7 @@ OGC_REQUEST_POOL_CONNECTIONS=10 # Java Options & Memory ENABLE_JSONP=true outFormat=text/javascript -GEOSERVER_JAVA_OPTS='-Djava.awt.headless=true -Xms4G -Xmx4G -Dgwc.context.suffix=gwc -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/var/log/jvm.log -XX:PerfDataSamplingInterval=500 -XX:SoftRefLRUPolicyMSPerMB=36000 -XX:-UseGCOverheadLimit -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Duser.timezone=GMT -Dorg.geotools.shapefile.datetime=false -DGS-SHAPEFILE-CHARSET=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL={geoserver_ui}/geoserver/pdf -DALLOW_ENV_PARAMETRIZATION=true -Xbootclasspath/a:/usr/local/tomcat/webapps/geoserver/WEB-INF/lib/marlin-0.9.3-Unsafe.jar -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine' +GEOSERVER_JAVA_OPTS=-Djava.awt.headless=true -Xms4G -Xmx4G -Dgwc.context.suffix=gwc -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/var/log/jvm.log -XX:PerfDataSamplingInterval=500 -XX:SoftRefLRUPolicyMSPerMB=36000 -XX:-UseGCOverheadLimit -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Duser.timezone=GMT -Dorg.geotools.shapefile.datetime=false -DGS-SHAPEFILE-CHARSET=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL={geoserver_ui}/geoserver/pdf -DALLOW_ENV_PARAMETRIZATION=true -Xbootclasspath/a:/usr/local/tomcat/webapps/geoserver/WEB-INF/lib/marlin-0.9.3-Unsafe.jar -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine # ################# # Security From 10c3cb1980b9da030be5e2b9de9b56f3d5caa052 Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Tue, 9 Jan 2024 12:58:22 +0100 Subject: [PATCH 003/284] Fix template variable for print base url (#11811) --- .env.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.sample b/.env.sample index afc97264bc3..6e5dd10da9d 100644 --- a/.env.sample +++ b/.env.sample @@ -101,7 +101,7 @@ OGC_REQUEST_POOL_CONNECTIONS=10 # Java Options & Memory ENABLE_JSONP=true outFormat=text/javascript -GEOSERVER_JAVA_OPTS=-Djava.awt.headless=true -Xms4G -Xmx4G -Dgwc.context.suffix=gwc -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/var/log/jvm.log -XX:PerfDataSamplingInterval=500 -XX:SoftRefLRUPolicyMSPerMB=36000 -XX:-UseGCOverheadLimit -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Duser.timezone=GMT -Dorg.geotools.shapefile.datetime=false -DGS-SHAPEFILE-CHARSET=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL={geoserver_ui}/geoserver/pdf -DALLOW_ENV_PARAMETRIZATION=true -Xbootclasspath/a:/usr/local/tomcat/webapps/geoserver/WEB-INF/lib/marlin-0.9.3-Unsafe.jar -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine +GEOSERVER_JAVA_OPTS=-Djava.awt.headless=true -Xms4G -Xmx4G -Dgwc.context.suffix=gwc -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/var/log/jvm.log -XX:PerfDataSamplingInterval=500 -XX:SoftRefLRUPolicyMSPerMB=36000 -XX:-UseGCOverheadLimit -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Duser.timezone=GMT -Dorg.geotools.shapefile.datetime=false -DGS-SHAPEFILE-CHARSET=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL={siteurl}/geoserver/pdf -DALLOW_ENV_PARAMETRIZATION=true -Xbootclasspath/a:/usr/local/tomcat/webapps/geoserver/WEB-INF/lib/marlin-0.9.3-Unsafe.jar -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine # ################# # Security From 30021d937ebc963639ef51d04c9f1e9fcc75f5a4 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 17:27:28 +0100 Subject: [PATCH 004/284] fix: requirements.txt to reduce vulnerabilities (#11812) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-CERTIFI-3164749 - https://snyk.io/vuln/SNYK-PYTHON-CERTIFI-5805047 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1066259 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1279042 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1290072 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1298665 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2312875 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2329158 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2329159 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2329160 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2389002 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2389021 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2606966 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2606969 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2940618 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2968205 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-3319450 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5496950 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5750790 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5880505 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5932095 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-6041515 - https://snyk.io/vuln/SNYK-PYTHON-DJANGORESTFRAMEWORK-1090569 - https://snyk.io/vuln/SNYK-PYTHON-OWSLIB-3356626 - https://snyk.io/vuln/SNYK-PYTHON-REQUESTS-5595532 - https://snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 Co-authored-by: snyk-bot --- requirements.txt | 4 ++-- setup.cfg | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index 70d05aaf2f2..ba6fed50342 100644 --- a/requirements.txt +++ b/requirements.txt @@ -159,7 +159,7 @@ pytest-bdd==6.1.1 splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.5.2 -setuptools>=59.1.1,<68.3.0 +setuptools>=65.5.1,<68.3.0 pip==23.2.1 Twisted==23.10.0 pixelmatch==0.3.0 @@ -174,6 +174,6 @@ mistune==3.0.2 protobuf==3.20.3 mako==1.2.4 paramiko==3.3.1 # not directly required, fixes Blowfish deprecation warning -certifi>=2022.12.7 # not directly required, pinned by Snyk to avoid a vulnerability +certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability cryptography>=41.0.0 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/setup.cfg b/setup.cfg index 5d2d9313fe1..532174a06b0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -184,7 +184,7 @@ install_requires = splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.5.2 - setuptools>=59.1.1,<68.3.0 + setuptools>=65.5.1,<68.3.0 pip==23.2.1 Twisted==23.10.0 pixelmatch==0.3.0 @@ -199,7 +199,7 @@ install_requires = protobuf==3.20.3 mako==1.2.4 paramiko==3.3.1 # not directly required, fixes Blowfish deprecation warning - certifi>=2022.12.7 # not directly required, pinned by Snyk to avoid a vulnerability + certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability cryptography>=41.0.0 # not directly required, pinned by Snyk to avoid a vulnerability From 14e00b2a0592b78f241342a9e59e1298dd673fd4 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 17:27:59 +0100 Subject: [PATCH 005/284] fix: requirements_dev.txt to reduce vulnerabilities (#11805) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 Co-authored-by: snyk-bot From 67ff070313508e93796dc2d3c2afec979d258711 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 17:29:15 +0100 Subject: [PATCH 006/284] fix: requirements_dev.txt to reduce vulnerabilities (#11809) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-IPYTHON-3318382 Co-authored-by: snyk-bot --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 3d86d31c018..96597acfbe0 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,5 +1,5 @@ ipdb pre-commit setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability -ipython>=7.16.3 # not directly required, pinned by Snyk to avoid a vulnerability +ipython>=8.10.0 # not directly required, pinned by Snyk to avoid a vulnerability pygments>=2.7.4 # not directly required, pinned by Snyk to avoid a vulnerability From c1f8aad78610b43783e1e5b5030ca8e185adf786 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 17:29:44 +0100 Subject: [PATCH 007/284] fix: geonode/monitoring/frontend/package.json to reduce vulnerabilities (#11796) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-AXIOS-6144788 Co-authored-by: snyk-bot --- geonode/monitoring/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geonode/monitoring/frontend/package.json b/geonode/monitoring/frontend/package.json index 18996bd0f60..844746d4ce9 100644 --- a/geonode/monitoring/frontend/package.json +++ b/geonode/monitoring/frontend/package.json @@ -41,7 +41,7 @@ "@material-ui/icons": "4.11.2", "@material-ui/lab": "4.0.0-alpha.57", "@material-ui/styles": "4.11.3", - "axios": "0.21.2", + "axios": "1.6.4", "babel-polyfill": "6.26.0", "chroma-js": "2.0.4", "clsx": "1.2.1", From 8e967b3932168d0557562a027a59ae5dc006e4e4 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:28:21 +0100 Subject: [PATCH 008/284] fix: geonode/static/package.json to reduce vulnerabilities (#11738) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-INFLIGHT-6095116 Co-authored-by: snyk-bot --- geonode/static/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/geonode/static/package.json b/geonode/static/package.json index ed52096b952..d521b0b2b8e 100644 --- a/geonode/static/package.json +++ b/geonode/static/package.json @@ -37,7 +37,7 @@ "mime": "^2.4.4", "moment": "^2.24.0", "moment-timezone": "^0.5.26", - "node-sass": "^4.9.0", + "node-sass": "^7.0.2", "openlayers": "^4.6.5", "patternfly-bootstrap-treeview": "2.1.10", "proj4": "^2.5.0", @@ -45,7 +45,7 @@ "raty-js": "^2.9.0", "requirejs": "^2.3.6", "requirejs-text": "^2.0.15", - "rimraf": "^3.0.2", + "rimraf": "^4.0.0", "select2": "4.0.10", "sortable": "^2.0.0", "timeago": "^1.6.7", From 4bac483127c52898568a2626fbd294bf1a61f499 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:29:24 +0100 Subject: [PATCH 009/284] [Snyk] Security upgrade paramiko from 3.3.1 to 3.4.0 (#11777) * fix: requirements.txt to reduce vulnerabilities The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-PARAMIKO-6130887 * [Dependencies] Align setup.cfg with requirements.txt --------- Co-authored-by: snyk-bot --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index ba6fed50342..2bb66c22427 100644 --- a/requirements.txt +++ b/requirements.txt @@ -173,7 +173,7 @@ webdriver_manager==4.0.1 mistune==3.0.2 protobuf==3.20.3 mako==1.2.4 -paramiko==3.3.1 # not directly required, fixes Blowfish deprecation warning +paramiko==3.4.0 # not directly required, fixes Blowfish deprecation warning certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability cryptography>=41.0.0 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/setup.cfg b/setup.cfg index 532174a06b0..ea41fa58acc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -198,7 +198,7 @@ install_requires = mistune==3.0.2 protobuf==3.20.3 mako==1.2.4 - paramiko==3.3.1 # not directly required, fixes Blowfish deprecation warning + paramiko==3.4.0 # not directly required, fixes Blowfish deprecation warning certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability cryptography>=41.0.0 # not directly required, pinned by Snyk to avoid a vulnerability From 04a56d149837d5f12c44c45547ab47d589cfe492 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:31:38 +0100 Subject: [PATCH 010/284] [Snyk] Fix for 6 vulnerabilities (#11816) * fix: requirements.txt to reduce vulnerabilities The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-AIOHTTP-6091621 - https://snyk.io/vuln/SNYK-PYTHON-AIOHTTP-6091622 - https://snyk.io/vuln/SNYK-PYTHON-PARAMIKO-6130887 - https://snyk.io/vuln/SNYK-PYTHON-PILLOW-5918878 - https://snyk.io/vuln/SNYK-PYTHON-PILLOW-6043904 - https://snyk.io/vuln/SNYK-PYTHON-SELENIUM-6062316 * [Dependencies] Align setup.cfg with requirements.txt --------- Co-authored-by: snyk-bot --- requirements.txt | 3 ++- setup.cfg | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2bb66c22427..62347bf144a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -165,7 +165,7 @@ Twisted==23.10.0 pixelmatch==0.3.0 factory-boy==3.3.0 flaky==3.7.0 -selenium>=4.1.0,<5.0.0 +selenium>=4.15.1,<5.0.0 selenium-requests==2.0.3 webdriver_manager==4.0.1 @@ -177,3 +177,4 @@ paramiko==3.4.0 # not directly required, fixes Blowfish deprecation warning certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability cryptography>=41.0.0 # not directly required, pinned by Snyk to avoid a vulnerability +aiohttp>=3.9.0 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/setup.cfg b/setup.cfg index ea41fa58acc..a23412cf817 100644 --- a/setup.cfg +++ b/setup.cfg @@ -190,7 +190,7 @@ install_requires = pixelmatch==0.3.0 factory-boy==3.3.0 flaky==3.7.0 - selenium>=4.1.0,<5.0.0 + selenium>=4.15.1,<5.0.0 selenium-requests==2.0.3 webdriver_manager==4.0.1 @@ -202,6 +202,7 @@ install_requires = certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability cryptography>=41.0.0 # not directly required, pinned by Snyk to avoid a vulnerability + aiohttp>=3.9.0 # not directly required, pinned by Snyk to avoid a vulnerability [options.packages.find] exclude = tests From dc391213c2c296357cdff52ba32784bde30a07e1 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:32:13 +0100 Subject: [PATCH 011/284] fix: requirements.txt to reduce vulnerabilities (#11733) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-AIOHTTP-6091621 - https://snyk.io/vuln/SNYK-PYTHON-AIOHTTP-6091622 Co-authored-by: snyk-bot From d372664b3dc7a100fd6b4e555ffeb237eebf6134 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:32:51 +0100 Subject: [PATCH 012/284] fix: geonode/monitoring/frontend/package.json to reduce vulnerabilities (#11720) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-ANSIREGEX-1583908 - https://snyk.io/vuln/SNYK-JS-REQUEST-3361831 - https://snyk.io/vuln/SNYK-JS-TOUGHCOOKIE-5672873 Co-authored-by: snyk-bot --- geonode/monitoring/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geonode/monitoring/frontend/package.json b/geonode/monitoring/frontend/package.json index 844746d4ce9..fba5c289867 100644 --- a/geonode/monitoring/frontend/package.json +++ b/geonode/monitoring/frontend/package.json @@ -53,7 +53,7 @@ "material-ui": "0.20.2", "mkdirp": "^1.0.4", "moment": "2.29.4", - "node-sass": "^4.14.1", + "node-sass": "^7.0.2", "numeral": "2.0.6", "radium": "0.25.2", "react": "16.9.0", From a6b9be5fbb2821836fbd79e51c8ab4bbcc1fd575 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:33:24 +0100 Subject: [PATCH 013/284] fix: requirements.txt to reduce vulnerabilities (#11704) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-SELENIUM-6062316 Co-authored-by: snyk-bot From ce4cb311444c0b7f05ae4c58ca3a72b8a2bc4d10 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:33:53 +0100 Subject: [PATCH 014/284] fix: geonode/static/package.json to reduce vulnerabilities (#11719) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-ANSIREGEX-1583908 - https://snyk.io/vuln/SNYK-JS-REQUEST-3361831 - https://snyk.io/vuln/SNYK-JS-TOUGHCOOKIE-5672873 - https://snyk.io/vuln/SNYK-JS-UNSETVALUE-2400660 Co-authored-by: snyk-bot --- geonode/static/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geonode/static/package.json b/geonode/static/package.json index d521b0b2b8e..3d6385b91c8 100644 --- a/geonode/static/package.json +++ b/geonode/static/package.json @@ -30,7 +30,7 @@ "jquery-ui-dist": "^1.12.1", "jquery-waypoints": "^2.0.5", "json2": "^0.4.0", - "liftoff": "^3.1.0", + "liftoff": "^4.0.0", "list": "^2.0.19", "list.js": "^1.5.0", "load-grunt-tasks": "^5.1.0", From 41c1678cfe6a28d695a5d11d3833eb37049684b0 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:35:00 +0100 Subject: [PATCH 015/284] fix: upgrade select2 from 4.0.10 to 4.0.13 (#11559) Snyk has created this PR to upgrade select2 from 4.0.10 to 4.0.13. See this package in npm: https://www.npmjs.com/package/select2 See this project in Snyk: https://app.snyk.io/org/afabiani/project/d1b20983-2094-4226-a267-facfc4a1bb97?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Giovanni Allegri --- geonode/static/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geonode/static/package.json b/geonode/static/package.json index 3d6385b91c8..74e93d2860e 100644 --- a/geonode/static/package.json +++ b/geonode/static/package.json @@ -46,7 +46,7 @@ "requirejs": "^2.3.6", "requirejs-text": "^2.0.15", "rimraf": "^4.0.0", - "select2": "4.0.10", + "select2": "4.0.13", "sortable": "^2.0.0", "timeago": "^1.6.7", "tinymce": "^5.5.0", From 0f1370a61906a343f2155ec72ffc9289b0f9e04b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:37:11 +0100 Subject: [PATCH 016/284] Bump follow-redirects in /geonode/monitoring/frontend (#11814) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.1 to 1.15.4. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.1...v1.15.4) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- geonode/monitoring/frontend/yarn.lock | 1119 +++++++++++++++++-------- 1 file changed, 775 insertions(+), 344 deletions(-) diff --git a/geonode/monitoring/frontend/yarn.lock b/geonode/monitoring/frontend/yarn.lock index d0fab64321f..9e4c2db0dbb 100644 --- a/geonode/monitoring/frontend/yarn.lock +++ b/geonode/monitoring/frontend/yarn.lock @@ -854,6 +854,11 @@ resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz#2dc8c57044de0340eb53a7ba602e59abf80dc799" integrity sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ== +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -990,6 +995,27 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/d3@3.5.38": version "3.5.38" resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.38.tgz#76f8f2e9159ae562965b2fa0e6fbee1aa643a1bc" @@ -1026,11 +1052,21 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + "@types/node@*": version "18.0.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1256,6 +1292,28 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1276,11 +1334,6 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -1328,6 +1381,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1344,18 +1404,31 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" argparse@^1.0.7: version "1.0.10" @@ -1379,11 +1452,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -1422,6 +1490,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1504,12 +1577,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@0.21.2: - version "0.21.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017" - integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg== +axios@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.4.tgz#184ee1f63d412caffcf30d2c50982253c3ee86e0" + integrity sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" babel-code-frame@^6.26.0: version "6.26.0" @@ -1725,13 +1800,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ== - dependencies: - inherits "~2.0.0" - bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -1964,6 +2032,30 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -1992,18 +2084,14 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ== +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" @@ -2034,7 +2122,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== @@ -2045,6 +2133,14 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -2094,6 +2190,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chroma-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.0.4.tgz#51ada59274856411630d45ea533d717018554cea" @@ -2127,6 +2228,11 @@ classnames@^2.2.5: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -2157,6 +2263,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2191,12 +2306,29 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -combined-stream@^1.0.6, combined-stream@~1.0.6: +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -2268,7 +2400,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== @@ -2410,13 +2542,14 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha512-eZ+m1WNhSZutOa/uRblAc9Ut5MQfukFrFMtPSm3bZCA888NmMd5AWXWdgRZ80zd+pTk1P2JrGjg9pUPTvl2PWQ== +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - lru-cache "^4.0.1" - which "^1.2.9" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" crypto-browserify@^3.11.0: version "3.12.0" @@ -2484,13 +2617,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== - dependencies: - array-find-index "^1.0.1" - cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -2805,6 +2931,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^3.1.1, debug@^3.2.5: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -2812,14 +2945,15 @@ debug@^3.1.1, debug@^3.2.5: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: - ms "2.1.2" + decamelize "^1.1.0" + map-obj "^1.0.0" -decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== @@ -3091,7 +3225,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.11: +encoding@^0.1.11, encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -3123,6 +3257,16 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -3130,7 +3274,7 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -3683,6 +3827,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + findup-sync@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -3720,10 +3872,10 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +follow-redirects@^1.0.0, follow-redirects@^1.15.4: + version "1.15.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" + integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== for-in@^1.0.2: version "1.0.2" @@ -3735,6 +3887,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -3778,6 +3939,13 @@ fs-extra@8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3806,21 +3974,16 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -3841,19 +4004,34 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: - aproba "^1.0.3" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" gaze@^1.0.0: version "1.1.3" @@ -3867,7 +4045,7 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -4031,6 +4209,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -4049,6 +4232,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -4066,6 +4254,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-property-descriptors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" @@ -4085,7 +4278,7 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -4145,6 +4338,13 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -4190,6 +4390,13 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -4205,6 +4412,11 @@ html-entities@^1.2.1: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -4236,6 +4448,15 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-middleware@^0.19.1: version "0.19.2" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz#ee73dcc8348165afefe8de2ff717751d181608ee" @@ -4269,6 +4490,21 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" @@ -4343,19 +4579,12 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -in-publish@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" - integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg== - dependencies: - repeating "^2.0.0" +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -4368,7 +4597,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4487,6 +4716,11 @@ ip@^1.1.0, ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -4558,6 +4792,13 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-core-module@^2.5.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -4621,11 +4862,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -4662,6 +4898,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -4705,6 +4946,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4751,11 +4997,6 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -4818,7 +5059,7 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -js-base64@^2.1.8: +js-base64@^2.4.9: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== @@ -5047,7 +5288,7 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -5072,17 +5313,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - loader-fs-cache@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" @@ -5141,6 +5371,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5156,7 +5393,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.4: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5173,22 +5410,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5196,6 +5417,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + magic-string@^0.22.4: version "0.22.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" @@ -5211,6 +5439,28 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -5228,11 +5478,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -5306,21 +5561,23 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA== +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" merge-descriptors@1.0.1: version "1.0.1" @@ -5405,6 +5662,11 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + mini-create-react-context@^0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.3.tgz#b1b2bc6604d3a6c5d9752bad7692615410ebb38e" @@ -5437,11 +5699,79 @@ minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -5466,14 +5796,14 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -mkdirp@^1.0.4: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -5505,7 +5835,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5555,7 +5885,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -5583,23 +5913,21 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" node-libs-browser@^2.2.1: version "2.2.1" @@ -5635,37 +5963,35 @@ node-releases@^2.0.6: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== -node-sass@^4.14.1: - version "4.14.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" - integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== +node-sass@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-7.0.3.tgz#7620bcd5559c2bf125c4fbb9087ba75cd2df2ab2" + integrity sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw== dependencies: async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" + chalk "^4.1.2" + cross-spawn "^7.0.3" gaze "^1.0.0" get-stdin "^4.0.1" glob "^7.0.3" - in-publish "^2.0.0" lodash "^4.17.15" - meow "^3.7.0" - mkdirp "^0.5.1" + meow "^9.0.0" nan "^2.13.2" - node-gyp "^3.8.0" - npmlog "^4.0.0" + node-gyp "^8.4.1" + npmlog "^5.0.0" request "^2.88.0" - sass-graph "2.2.5" + sass-graph "^4.0.1" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -5675,6 +6001,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -5694,15 +6030,25 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npmlog@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" number-is-nan@^1.0.0: version "1.0.1" @@ -5874,11 +6220,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== - os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -5888,19 +6229,11 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -osenv@0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -5916,7 +6249,7 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== -p-limit@^2.0.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -5930,11 +6263,25 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -5979,13 +6326,6 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -6033,6 +6373,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -6048,6 +6393,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -6065,15 +6415,6 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -6249,6 +6590,14 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -6273,16 +6622,16 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - psl@^1.1.28: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -6367,6 +6716,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + quote-stream@^1.0.1, quote-stream@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" @@ -6649,24 +7003,26 @@ reactjs-calendar-heatmap@0.0.10: resolved "https://registry.yarnpkg.com/reactjs-calendar-heatmap/-/reactjs-calendar-heatmap-0.0.10.tgz#711a9282ed5d7e51e8a2804efd2e628ea6f6af53" integrity sha512-ailKpUVakA4nkbirP4dzOE0Lz8QjleSdTMiRr7om9/DdBpWdhoWwqLNTa7syoMsx0xEboFqw2suFjJ4Upu0OIw== -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6738,13 +7094,13 @@ recompose@^0.26.0: hoist-non-react-statics "^2.3.1" symbol-observable "^1.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g== +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + indent-string "^4.0.0" + strip-indent "^3.0.0" reduce-css-calc@^1.3.0: version "1.3.0" @@ -6898,14 +7254,7 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== - dependencies: - is-finite "^1.0.0" - -request@^2.87.0, request@^2.88.0: +request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -7018,13 +7367,6 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -7032,6 +7374,13 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -7093,15 +7442,15 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-graph@2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" - integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== +sass-graph@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.1.tgz#2ff8ca477224d694055bf4093f414cf6cfad1d2e" + integrity sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA== dependencies: glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^13.3.2" + lodash "^4.17.11" + scss-tokenizer "^0.4.3" + yargs "^17.2.1" sass-loader@^7.1.0: version "7.3.1" @@ -7148,13 +7497,13 @@ schema-utils@^2.0.0, schema-utils@^2.0.1: ajv "^6.12.4" ajv-keywords "^3.5.2" -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q== +scss-tokenizer@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz#1058400ee7d814d71049c29923d2b25e61dc026c" + integrity sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw== dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" + js-base64 "^2.4.9" + source-map "^0.7.3" select-hose@^2.0.0: version "2.0.0" @@ -7183,10 +7532,12 @@ semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw== +semver@^7.3.4, semver@^7.3.5: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" send@0.18.0: version "0.18.0" @@ -7237,7 +7588,7 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== @@ -7313,11 +7664,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -7327,7 +7690,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -7346,6 +7709,11 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7396,6 +7764,23 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -7425,13 +7810,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A== - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -7530,6 +7908,13 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + static-eval@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.1.0.tgz#a16dbe54522d7fa5ef1389129d813fd47b148014" @@ -7623,7 +8008,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4": +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7702,31 +8087,24 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: - get-stdin "^4.0.1" + min-indent "^1.0.0" strip-json-comments@^3.0.1: version "3.1.1" @@ -7760,6 +8138,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -7785,14 +8170,17 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== +tar@^6.0.2, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" terser-webpack-plugin@^1.4.1: version "1.4.5" @@ -7977,10 +8365,10 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw== +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== "true-case-path@^1.0.2": version "1.0.3" @@ -8018,6 +8406,21 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -8454,14 +8857,21 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== -which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -8502,6 +8912,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -8524,16 +8943,21 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" @@ -8547,7 +8971,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.0, yargs-parser@^13.1.2: +yargs-parser@^13.1.0: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -8555,6 +8979,16 @@ yargs-parser@^13.1.0, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs@12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -8590,18 +9024,15 @@ yargs@13.2.4: y18n "^4.0.0" yargs-parser "^13.1.0" -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@^17.2.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" From 01c80c7004ec7e559eaaa556263eae1cc925622a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:38:31 +0100 Subject: [PATCH 017/284] Bump black from 23.11.0 to 23.12.1 (#11781) * Bump black from 23.11.0 to 23.12.1 Bumps [black](https://github.com/psf/black) from 23.11.0 to 23.12.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.11.0...23.12.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 62347bf144a..34791080703 100644 --- a/requirements.txt +++ b/requirements.txt @@ -153,7 +153,7 @@ invoke==2.2.0 coverage==7.3.1 requests-toolbelt==1.0.0 flake8==6.1.0 -black==23.11.0 +black==23.12.1 pytest==7.4.2 pytest-bdd==6.1.1 splinter==0.19.0 diff --git a/setup.cfg b/setup.cfg index a23412cf817..90aabdfa48b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -178,7 +178,7 @@ install_requires = coverage==7.3.1 requests-toolbelt==1.0.0 flake8==6.1.0 - black==23.11.0 + black==23.12.1 pytest==7.4.2 pytest-bdd==6.1.1 splinter==0.19.0 From 02ad3d41caff5103f404df2f399d96f887d0282d Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 9 Jan 2024 18:38:53 +0100 Subject: [PATCH 018/284] fix: geonode/monitoring/frontend/package.json to reduce vulnerabilities (#11819) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-REQUEST-3361831 - https://snyk.io/vuln/SNYK-JS-TOUGHCOOKIE-5672873 Co-authored-by: snyk-bot --- geonode/monitoring/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geonode/monitoring/frontend/package.json b/geonode/monitoring/frontend/package.json index fba5c289867..1152f72ddfe 100644 --- a/geonode/monitoring/frontend/package.json +++ b/geonode/monitoring/frontend/package.json @@ -53,7 +53,7 @@ "material-ui": "0.20.2", "mkdirp": "^1.0.4", "moment": "2.29.4", - "node-sass": "^7.0.2", + "node-sass": "^8.0.0", "numeral": "2.0.6", "radium": "0.25.2", "react": "16.9.0", From bb660a4aa6ededcd8a58e3032d4b6e00ad298f51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:40:27 +0100 Subject: [PATCH 019/284] Bump coverage from 7.3.1 to 7.4.0 (#11790) * Bump coverage from 7.3.1 to 7.4.0 Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.1 to 7.4.0. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.3.1...7.4.0) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump coverage from 7.3.1 to 7.4.0 Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.1 to 7.4.0. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.3.1...7.4.0) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 34791080703..770407ca67e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -150,7 +150,7 @@ docker==6.1.3 invoke==2.2.0 # tests -coverage==7.3.1 +coverage==7.4.0 requests-toolbelt==1.0.0 flake8==6.1.0 black==23.12.1 diff --git a/setup.cfg b/setup.cfg index 90aabdfa48b..af3393f49e5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -175,7 +175,7 @@ install_requires = invoke==2.2.0 # tests - coverage==7.3.1 + coverage==7.4.0 requests-toolbelt==1.0.0 flake8==6.1.0 black==23.12.1 From d9b1acc952b74e2e72db966752c06b1d66286a32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:43:59 +0100 Subject: [PATCH 020/284] Bump pip from 23.2.1 to 23.3.1 (#11628) * Bump pip from 23.2.1 to 23.3.1 Bumps [pip](https://github.com/pypa/pip) from 23.2.1 to 23.3.1. - [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/pip/compare/23.2.1...23.3.1) --- updated-dependencies: - dependency-name: pip dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 770407ca67e..9ba4e9c036c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -160,7 +160,7 @@ splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.5.2 setuptools>=65.5.1,<68.3.0 -pip==23.2.1 +pip==23.3.1 Twisted==23.10.0 pixelmatch==0.3.0 factory-boy==3.3.0 diff --git a/setup.cfg b/setup.cfg index af3393f49e5..b89b4921313 100644 --- a/setup.cfg +++ b/setup.cfg @@ -185,7 +185,7 @@ install_requires = pytest-splinter==3.3.2 pytest-django==4.5.2 setuptools>=65.5.1,<68.3.0 - pip==23.2.1 + pip==23.3.1 Twisted==23.10.0 pixelmatch==0.3.0 factory-boy==3.3.0 From 93d7f4e4692d014d04cc34737b48650882019db1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:12:30 +0100 Subject: [PATCH 021/284] Bump boto3 from 1.28.56 to 1.34.15 (#11815) * Bump boto3 from 1.28.56 to 1.34.15 Bumps [boto3](https://github.com/boto/boto3) from 1.28.56 to 1.34.15. - [Release notes](https://github.com/boto/boto3/releases) - [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/boto/boto3/compare/1.28.56...1.34.15) --- updated-dependencies: - dependency-name: boto3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9ba4e9c036c..735e7ea4dcd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -113,7 +113,7 @@ django-storages==1.14.1 dropbox==11.36.2 google-cloud-storage==2.11.0 google-cloud-core==2.3.3 -boto3==1.28.56 +boto3==1.34.15 # Django Caches python-memcached<=1.59 diff --git a/setup.cfg b/setup.cfg index b89b4921313..47af1e0a180 100644 --- a/setup.cfg +++ b/setup.cfg @@ -138,7 +138,7 @@ install_requires = dropbox==11.36.2 google-cloud-storage==2.11.0 google-cloud-core==2.3.3 - boto3==1.28.56 + boto3==1.34.15 # Django Caches python-memcached<=1.59 From 49be26e4fa5599d7de69295cb98b866bd318643f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:12:50 +0100 Subject: [PATCH 022/284] Bump lxml from 4.9.3 to 5.1.0 (#11804) * Bump lxml from 4.9.3 to 5.1.0 Bumps [lxml](https://github.com/lxml/lxml) from 4.9.3 to 5.1.0. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.3...lxml-5.1.0) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 735e7ea4dcd..94edaf0f675 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ # native dependencies Pillow==10.0.1 -lxml==4.9.3 +lxml==5.1.0 psycopg2==2.9.9 Django==3.2.23 diff --git a/setup.cfg b/setup.cfg index 47af1e0a180..fc31e61d3d0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -26,7 +26,7 @@ setup_requires = install_requires = # native dependencies Pillow==10.0.1 - lxml==4.9.3 + lxml==5.1.0 psycopg2==2.9.9 Django==3.2.23 From d00f2aa4b005aded7ea1baee6909a9ee52bd736f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:15:23 +0100 Subject: [PATCH 023/284] Bump flake8 from 6.1.0 to 7.0.0 (#11798) * Bump flake8 from 6.1.0 to 7.0.0 Bumps [flake8](https://github.com/pycqa/flake8) from 6.1.0 to 7.0.0. - [Commits](https://github.com/pycqa/flake8/compare/6.1.0...7.0.0) --- updated-dependencies: - dependency-name: flake8 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 94edaf0f675..0cd096ff1fe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -152,7 +152,7 @@ invoke==2.2.0 # tests coverage==7.4.0 requests-toolbelt==1.0.0 -flake8==6.1.0 +flake8==7.0.0 black==23.12.1 pytest==7.4.2 pytest-bdd==6.1.1 diff --git a/setup.cfg b/setup.cfg index fc31e61d3d0..5bcc9233223 100644 --- a/setup.cfg +++ b/setup.cfg @@ -177,7 +177,7 @@ install_requires = # tests coverage==7.4.0 requests-toolbelt==1.0.0 - flake8==6.1.0 + flake8==7.0.0 black==23.12.1 pytest==7.4.2 pytest-bdd==6.1.1 From 50edaae7999ea46bae4e3b02c7cf39d3db509b2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:15:57 +0100 Subject: [PATCH 024/284] Bump pytest from 7.4.2 to 7.4.4 (#11792) * Bump pytest from 7.4.2 to 7.4.4 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.2 to 7.4.4. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.2...7.4.4) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 0cd096ff1fe..c4d58f0be3c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -154,7 +154,7 @@ coverage==7.4.0 requests-toolbelt==1.0.0 flake8==7.0.0 black==23.12.1 -pytest==7.4.2 +pytest==7.4.4 pytest-bdd==6.1.1 splinter==0.19.0 pytest-splinter==3.3.2 diff --git a/setup.cfg b/setup.cfg index 5bcc9233223..9084ca6f860 100644 --- a/setup.cfg +++ b/setup.cfg @@ -179,7 +179,7 @@ install_requires = requests-toolbelt==1.0.0 flake8==7.0.0 black==23.12.1 - pytest==7.4.2 + pytest==7.4.4 pytest-bdd==6.1.1 splinter==0.19.0 pytest-splinter==3.3.2 From 5133da2bb989e2fe9ec9dc8bc3225020ec6e1b0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:16:15 +0100 Subject: [PATCH 025/284] Bump pymupdf from 1.23.4 to 1.23.8 (#11785) * Bump pymupdf from 1.23.4 to 1.23.8 Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.23.4 to 1.23.8. - [Release notes](https://github.com/pymupdf/pymupdf/releases) - [Changelog](https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt) - [Commits](https://github.com/pymupdf/pymupdf/compare/1.23.4...1.23.8) --- updated-dependencies: - dependency-name: pymupdf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index c4d58f0be3c..5d94388f62c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 smart_open==6.4.0 -PyMuPDF==1.23.4 +PyMuPDF==1.23.8 pathvalidate==3.2.0 # Django Apps diff --git a/setup.cfg b/setup.cfg index 9084ca6f860..e09dd9f18ae 100644 --- a/setup.cfg +++ b/setup.cfg @@ -51,7 +51,7 @@ install_requires = schema==0.7.5 rdflib==6.3.2 smart_open==6.4.0 - PyMuPDF==1.23.4 + PyMuPDF==1.23.8 pathvalidate==3.2.0 # Django Apps From 8449f467eb605d2885ba9b16cbb300cc39c1fef0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:42:53 +0100 Subject: [PATCH 026/284] Bump pytest-bdd from 6.1.1 to 7.0.1 (#11746) * Bump pytest-bdd from 6.1.1 to 7.0.1 Bumps [pytest-bdd](https://github.com/pytest-dev/pytest-bdd) from 6.1.1 to 7.0.1. - [Release notes](https://github.com/pytest-dev/pytest-bdd/releases) - [Changelog](https://github.com/pytest-dev/pytest-bdd/blob/master/CHANGES.rst) - [Commits](https://github.com/pytest-dev/pytest-bdd/compare/6.1.1...7.0.1) --- updated-dependencies: - dependency-name: pytest-bdd dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 5d94388f62c..e192ba5ad4f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -155,7 +155,7 @@ requests-toolbelt==1.0.0 flake8==7.0.0 black==23.12.1 pytest==7.4.4 -pytest-bdd==6.1.1 +pytest-bdd==7.0.1 splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.5.2 diff --git a/setup.cfg b/setup.cfg index e09dd9f18ae..a32b607e09f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -180,7 +180,7 @@ install_requires = flake8==7.0.0 black==23.12.1 pytest==7.4.4 - pytest-bdd==6.1.1 + pytest-bdd==7.0.1 splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.5.2 From 535f08cb5d2385b6e6d0aa0e314998a723f896ba Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Wed, 10 Jan 2024 09:59:47 +0100 Subject: [PATCH 027/284] [Fixes #11817] Drop Nginx and Letsencrypt Dockerfiles (#11818) * Drop Nginx and Letsencrypt Dockerfiles * align compose files * algin compose filew (2) --- docker-compose-dev.yml | 9 +- docker-compose-geoserver-server.yml | 4 +- docker-compose-test.yml | 10 +- docker-compose.yml | 10 +- scripts/docker/letsencrypt/Dockerfile | 18 --- scripts/docker/letsencrypt/README.md | 15 -- scripts/docker/letsencrypt/crontab | 8 -- .../docker/letsencrypt/docker-entrypoint.sh | 52 ------- scripts/docker/nginx/Dockerfile | 18 --- scripts/docker/nginx/docker-autoreload.sh | 37 ----- scripts/docker/nginx/docker-entrypoint.sh | 67 --------- scripts/docker/nginx/geonode.conf.envsubst | 134 ------------------ scripts/docker/nginx/nginx.conf.envsubst | 39 ----- .../nginx/nginx.https.available.conf.envsubst | 37 ----- 14 files changed, 14 insertions(+), 444 deletions(-) delete mode 100644 scripts/docker/letsencrypt/Dockerfile delete mode 100644 scripts/docker/letsencrypt/README.md delete mode 100644 scripts/docker/letsencrypt/crontab delete mode 100644 scripts/docker/letsencrypt/docker-entrypoint.sh delete mode 100644 scripts/docker/nginx/Dockerfile delete mode 100644 scripts/docker/nginx/docker-autoreload.sh delete mode 100644 scripts/docker/nginx/docker-entrypoint.sh delete mode 100644 scripts/docker/nginx/geonode.conf.envsubst delete mode 100644 scripts/docker/nginx/nginx.conf.envsubst delete mode 100644 scripts/docker/nginx/nginx.https.available.conf.envsubst diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 0ac801a9621..7c21d3ec374 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -52,7 +52,7 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: - image: geonode/nginx:1.25.1 + image: geonode/nginx:latest build: ./scripts/docker/nginx/ container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: @@ -71,7 +71,6 @@ services: # Gets and installs letsencrypt certificates letsencrypt: image: geonode/letsencrypt:latest - build: ./scripts/docker/letsencrypt/ container_name: letsencrypt4${COMPOSE_PROJECT_NAME} env_file: - .env @@ -81,7 +80,7 @@ services: # Geoserver backend geoserver: - image: geonode/geoserver:2.23.0 + image: geonode/geoserver:latest container_name: geoserver4${COMPOSE_PROJECT_NAME} healthcheck: test: "curl -m 10 --fail --silent --write-out 'HTTP CODE : %{http_code}\n' --output /dev/null http://geoserver:8080/geoserver/ows" @@ -107,7 +106,7 @@ services: condition: service_healthy data-dir-conf: - image: geonode/geoserver_data:2.23.0 + image: geonode/geoserver_data:latest container_name: gsconf4${COMPOSE_PROJECT_NAME} entrypoint: sleep infinity volumes: @@ -119,7 +118,7 @@ services: # PostGIS database. db: # use geonode official postgis 15 image - image: geonode/postgis:15 + image: geonode/postgis:latest command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}" container_name: db4${COMPOSE_PROJECT_NAME} env_file: diff --git a/docker-compose-geoserver-server.yml b/docker-compose-geoserver-server.yml index 10785a5794a..5a83f79b7c7 100644 --- a/docker-compose-geoserver-server.yml +++ b/docker-compose-geoserver-server.yml @@ -2,7 +2,7 @@ version: '2.2' services: data-dir-conf: - image: geonode/geoserver_data:2.23.0 + image: geonode/geoserver_data:latest restart: on-failure container_name: gsconf4${COMPOSE_PROJECT_NAME} labels: @@ -13,7 +13,7 @@ services: - geoserver-data-dir:/geoserver_data/data geoserver: - image: geonode/geoserver:2.23.0 + image: geonode/geoserver:latest restart: unless-stopped container_name: geoserver4${COMPOSE_PROJECT_NAME} stdin_open: true diff --git a/docker-compose-test.yml b/docker-compose-test.yml index 9bd764f8da3..22ac6dd0093 100644 --- a/docker-compose-test.yml +++ b/docker-compose-test.yml @@ -52,8 +52,7 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: - image: geonode/nginx:1.25.1 - build: ./scripts/docker/nginx/ + image: geonode/nginx:latest container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: - .env_test @@ -84,7 +83,6 @@ services: # Gets and installs letsencrypt certificates letsencrypt: image: geonode/letsencrypt:latest - build: ./scripts/docker/letsencrypt/ container_name: letsencrypt4${COMPOSE_PROJECT_NAME} env_file: - .env_test @@ -94,7 +92,7 @@ services: # Geoserver backend geoserver: - image: geonode/geoserver:2.23.0 + image: geonode/geoserver:latest container_name: geoserver4${COMPOSE_PROJECT_NAME} healthcheck: test: "curl -m 10 --fail --silent --write-out 'HTTP CODE : %{http_code}\n' --output /dev/null http://geoserver:8080/geoserver/ows" @@ -120,7 +118,7 @@ services: condition: service_healthy data-dir-conf: - image: geonode/geoserver_data:2.23.0 + image: geonode/geoserver_data:latest container_name: gsconf4${COMPOSE_PROJECT_NAME} entrypoint: sleep infinity volumes: @@ -132,7 +130,7 @@ services: # PostGIS database. db: # use geonode official postgis 15 image - image: geonode/postgis:15 + image: geonode/postgis:latest command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}" container_name: db4${COMPOSE_PROJECT_NAME} env_file: diff --git a/docker-compose.yml b/docker-compose.yml index 7cc150f129c..61b85d10503 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,8 +61,7 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: - image: geonode/nginx:1.25.1 - build: ./scripts/docker/nginx/ + image: geonode/nginx:latest container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: - .env @@ -80,7 +79,6 @@ services: # Gets and installs letsencrypt certificates letsencrypt: image: geonode/letsencrypt:latest - build: ./scripts/docker/letsencrypt/ container_name: letsencrypt4${COMPOSE_PROJECT_NAME} env_file: - .env @@ -90,7 +88,7 @@ services: # Geoserver backend geoserver: - image: geonode/geoserver:2.23.0 + image: geonode/geoserver:latest container_name: geoserver4${COMPOSE_PROJECT_NAME} healthcheck: test: "curl -m 10 --fail --silent --write-out 'HTTP CODE : %{http_code}\n' --output /dev/null http://geoserver:8080/geoserver/ows" @@ -116,7 +114,7 @@ services: condition: service_healthy data-dir-conf: - image: geonode/geoserver_data:2.23.0 + image: geonode/geoserver_data:latest container_name: gsconf4${COMPOSE_PROJECT_NAME} entrypoint: sleep infinity volumes: @@ -128,7 +126,7 @@ services: # PostGIS database. db: # use geonode official postgis 15 image - image: geonode/postgis:15 + image: geonode/postgis:latest command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}" container_name: db4${COMPOSE_PROJECT_NAME} env_file: diff --git a/scripts/docker/letsencrypt/Dockerfile b/scripts/docker/letsencrypt/Dockerfile deleted file mode 100644 index 1480342e8f1..00000000000 --- a/scripts/docker/letsencrypt/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM alpine:latest - -RUN apk add --no-cache certbot - -# Installing scripts -ADD docker-entrypoint.sh /docker-entrypoint.sh -RUN chmod +x /docker-entrypoint.sh - -# Installing cronjobs -ADD crontab /crontab -RUN /usr/bin/crontab /crontab && \ - rm /crontab - -# Setup the entrypoint -ENTRYPOINT ["./docker-entrypoint.sh"] - -# We run cron in foreground to update the certificates -CMD /usr/sbin/crond -f diff --git a/scripts/docker/letsencrypt/README.md b/scripts/docker/letsencrypt/README.md deleted file mode 100644 index d6b1ec2247e..00000000000 --- a/scripts/docker/letsencrypt/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Letsencrypt service for Geonode - -This service generates SSL certificates to be used by Nginx. - -## Let's Encrypt - -Upon startup, it generates one SSL certificate from Let's Encrypt using Certbot. It then starts cron (in foreground) to renew the certificates using Certbot renew. - -If for some reason getting the certificate fails, a placeholder certificate is generated. This certificate is invalid, but still allows to encrypt the data and to start the webserver. - -To avoid hitting Let's Encrypt very low rate limits when developping or doing tests, LETSENCRYPT_MODE env var can be set to "disabled" (which will completely bypass Let'sEncrypt, simulating a failure) or to "staging" (using Let'sEncrypt test certificates with higher rates). - -## Autoissued - -An auto-issued certificate is also generate to be used on the LAN if needed. It is also renewed every now and then using the same cron process than above. diff --git a/scripts/docker/letsencrypt/crontab b/scripts/docker/letsencrypt/crontab deleted file mode 100644 index 7ea7203b8f8..00000000000 --- a/scripts/docker/letsencrypt/crontab +++ /dev/null @@ -1,8 +0,0 @@ -# +------------- minute (0 - 59) -# ¦ +------------- hour (0 - 23) -# ¦ ¦ +------------- day of month (1 - 31) -# ¦ ¦ ¦ +------------- month (1 - 12) -# ¦ ¦ ¦ ¦ +------------- day of week (0 - 6) (Sunday to Saturday; 7 is also Sunday on some systems) -# ¦ ¦ ¦ ¦ ¦ - - 0 0,12 * * * date && echo "daily " && /docker-entrypoint.sh diff --git a/scripts/docker/letsencrypt/docker-entrypoint.sh b/scripts/docker/letsencrypt/docker-entrypoint.sh deleted file mode 100644 index d1c4541b075..00000000000 --- a/scripts/docker/letsencrypt/docker-entrypoint.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh - -# Exit script in case of error -set -e - -echo $"\n\n\n" -echo "-----------------------------------------------------" -echo "STARTING LETSENCRYPT ENTRYPOINT ---------------------" -date - -# We make the config dir -mkdir -p "/geonode-certificates/$LETSENCRYPT_MODE" - -# Do not exit script in case of error -set +e - -# We run the command -if [ "$LETSENCRYPT_MODE" == "staging" ]; then - printf "\nTrying to get STAGING certificate\n" - certbot --config-dir "/geonode-certificates/$LETSENCRYPT_MODE" certonly --webroot -w "/geonode-certificates" -d "$HTTPS_HOST" -m "$ADMIN_EMAIL" --agree-tos --non-interactive --test-cert -elif [ "$LETSENCRYPT_MODE" == "production" ]; then - printf "\nTrying to get PRODUCTION certificate\n" - certbot --config-dir "/geonode-certificates/$LETSENCRYPT_MODE" certonly --webroot -w "/geonode-certificates" -d "$HTTPS_HOST" -m "$ADMIN_EMAIL" --agree-tos --non-interactive --server https://acme-v02.api.letsencrypt.org/directory -elif [ "$LETSENCRYPT_MODE" == "disabled" ]; then - printf "\nNot trying to get certificate (because LETSENCRYPT_MODE variable is set to disabled) - and stop container\n" - exit 0 -else - printf "\nNot trying to get certificate (simulating failure, because LETSENCRYPT_MODE variable was neither staging nor production\n" - /bin/false -fi - -# If the certbot comand failed, we will create a placeholder certificate -if [ ! $? -eq 0 ]; then - # Exit script in case of error - set -e - - printf "\nFailed to get the certificates !\n" - - printf "\nWaiting 30s to avoid hitting Letsencrypt rate limits before it's even possible to react\n" - sleep 30 - - exit 1 -fi - -printf "\nCertificate have been created/renewed successfully\n" - -echo "-----------------------------------------------------" -echo "FINISHED LETSENCRYPT ENTRYPOINT ---------------------" -echo "-----------------------------------------------------" - -# Run the CMD -exec "$@" diff --git a/scripts/docker/nginx/Dockerfile b/scripts/docker/nginx/Dockerfile deleted file mode 100644 index 9b0fe5b4f30..00000000000 --- a/scripts/docker/nginx/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM nginx:1.25.3-alpine - -RUN apk add --no-cache openssl inotify-tools vim - -WORKDIR /etc/nginx/ - -RUN mkdir -p /etc/nginx/html -RUN touch /etc/nginx/html/index.html - -ADD nginx.conf.envsubst nginx.https.available.conf.envsubst ./ -ADD geonode.conf.envsubst ./sites-enabled/ - -ADD docker-autoreload.sh docker-entrypoint.sh / -ENTRYPOINT ["/docker-entrypoint.sh"] -RUN chmod +x /docker-autoreload.sh -RUN chmod +x /docker-entrypoint.sh - -CMD ["nginx", "-g", "daemon off;"] diff --git a/scripts/docker/nginx/docker-autoreload.sh b/scripts/docker/nginx/docker-autoreload.sh deleted file mode 100644 index 812cc76d723..00000000000 --- a/scripts/docker/nginx/docker-autoreload.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh - -# This will watch the /geonode-certificates folder and run nginx -s reload whenever there are some changes. -# We use this to reload nginx config when certificates changed. - -# inspired/copied from https://github.com/kubernetes/kubernetes/blob/master/examples/https-nginx/auto-reload-nginx.sh - -while true -do - inotifywait -e create -e modify -e delete -e move -r --exclude "\\.certbot\\.lock|\\.well-known" "/geonode-certificates/$LETSENCRYPT_MODE" - echo "Changes noticed in /geonode-certificates" - - echo "Waiting 5s for additionnal changes" - sleep 5 - - echo "Creating symbolic link for WAN host" - # for some reason, the ln -f flag doesn't work below... - rm -f /certificate_symlink - if [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/fullchain.pem" ] && [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/privkey.pem" ]; then - echo "Certbot certificate exists, we symlink to the live cert" - ln -sf "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST" /certificate_symlink - else - echo "Certbot certificate does not exist, we symlink to autoissued" - ln -sf "/geonode-certificates/autoissued" /certificate_symlink - fi - - # Test nginx configuration - nginx -t - # If it passes, we reload - if [ $? -eq 0 ] - then - echo "Configuration valid, we reload..." - nginx -s reload - else - echo "Configuration not valid, we do not reload." - fi -done diff --git a/scripts/docker/nginx/docker-entrypoint.sh b/scripts/docker/nginx/docker-entrypoint.sh deleted file mode 100644 index e6bec7a1db2..00000000000 --- a/scripts/docker/nginx/docker-entrypoint.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -# Exit script in case of error -set -e - -echo $"\n\n\n" -echo "-----------------------------------------------------" -echo "STARTING NGINX ENTRYPOINT ---------------------------" -date - -# We make the config dir -mkdir -p "/geonode-certificates/$LETSENCRYPT_MODE" - -echo "Creating autoissued certificates for HTTP host" -if [ ! -f "/geonode-certificates/autoissued/privkey.pem" ] || [[ $(find /geonode-certificates/autoissued/privkey.pem -mtime +365 -print) ]]; then - echo "Autoissued certificate does not exist or is too old, we generate one" - mkdir -p "/geonode-certificates/autoissued/" - openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout "/geonode-certificates/autoissued/privkey.pem" -out "/geonode-certificates/autoissued/fullchain.pem" -subj "/CN=${HTTP_HOST:-HTTPS_HOST}" -else - echo "Autoissued certificate already exists" -fi - -echo "Creating symbolic link for HTTPS certificate" -# for some reason, the ln -f flag doesn't work below... -# TODO : not DRY (reuse same scripts as docker-autoreload.sh) -rm -f /certificate_symlink -if [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/fullchain.pem" ] && [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/privkey.pem" ]; then - echo "Certbot certificate exists, we symlink to the live cert" - ln -sf "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST" /certificate_symlink -else - echo "Certbot certificate does not exist, we symlink to autoissued" - ln -sf "/geonode-certificates/autoissued" /certificate_symlink -fi - -if [ -z "${HTTPS_HOST}" ]; then - HTTP_SCHEME="http" -else - HTTP_SCHEME="https" -fi - -export HTTP_SCHEME=${HTTP_SCHEME:-http} -export GEONODE_LB_HOST_IP=${GEONODE_LB_HOST_IP:-django} -export GEONODE_LB_PORT=${GEONODE_LB_PORT:-8000} -export GEOSERVER_LB_HOST_IP=${GEOSERVER_LB_HOST_IP:-geoserver} -export GEOSERVER_LB_PORT=${GEOSERVER_LB_PORT:-8080} - -echo "Replacing environement variables" -envsubst '\$HTTP_HOST \$HTTPS_HOST \$HTTP_SCHEME \$GEONODE_LB_HOST_IP \$GEONODE_LB_PORT \$GEOSERVER_LB_HOST_IP \$GEOSERVER_LB_PORT \$RESOLVER' < /etc/nginx/nginx.conf.envsubst > /etc/nginx/nginx.conf -envsubst '\$HTTP_HOST \$HTTPS_HOST \$HTTP_SCHEME \$GEONODE_LB_HOST_IP \$GEONODE_LB_PORT \$GEOSERVER_LB_HOST_IP \$GEOSERVER_LB_PORT \$RESOLVER' < /etc/nginx/nginx.https.available.conf.envsubst > /etc/nginx/nginx.https.available.conf -envsubst '\$HTTP_HOST \$HTTPS_HOST \$HTTP_SCHEME \$GEONODE_LB_HOST_IP \$GEONODE_LB_PORT \$GEOSERVER_LB_HOST_IP \$GEOSERVER_LB_PORT' < /etc/nginx/sites-enabled/geonode.conf.envsubst > /etc/nginx/sites-enabled/geonode.conf - -echo "Enabling or not https configuration" -if [ -z "${HTTPS_HOST}" ]; then - echo "" > /etc/nginx/nginx.https.enabled.conf -else - ln -sf /etc/nginx/nginx.https.available.conf /etc/nginx/nginx.https.enabled.conf -fi - -echo "Loading nginx autoreloader" -sh /docker-autoreload.sh & - -echo "-----------------------------------------------------" -echo "FINISHED NGINX ENTRYPOINT ---------------------------" -echo "-----------------------------------------------------" - -# Run the CMD -exec "$@" diff --git a/scripts/docker/nginx/geonode.conf.envsubst b/scripts/docker/nginx/geonode.conf.envsubst deleted file mode 100644 index 1176ce2cc2b..00000000000 --- a/scripts/docker/nginx/geonode.conf.envsubst +++ /dev/null @@ -1,134 +0,0 @@ -include /etc/nginx/mime.types; - -# This is the main geonode conf -charset utf-8; - -# max upload size -client_max_body_size 100G; -client_body_buffer_size 256K; -client_body_timeout 600s; -large_client_header_buffers 4 64k; - -proxy_connect_timeout 600; -proxy_send_timeout 600; -proxy_read_timeout 600; -uwsgi_read_timeout 600; -send_timeout 600; - -fastcgi_hide_header Set-Cookie; - -etag on; - -# compression -gzip on; -gzip_vary on; -gzip_proxied any; -gzip_http_version 1.1; -gzip_disable "MSIE [1-6]\."; -gzip_buffers 16 8k; -gzip_min_length 1100; -gzip_comp_level 6; -gzip_types - text/css - text/javascript - text/xml - text/plain - application/xml - application/xml+rss - application/javascript - application/x-javascript - application/json; - -# GeoServer -location /geoserver { - # Using a variable is a trick to let Nginx start even if upstream host is not up yet - # (see https://sandro-keil.de/blog/2017/07/24/let-nginx-start-if-upstream-host-is-unavailable-or-down/) - set $upstream $GEOSERVER_LB_HOST_IP:$GEOSERVER_LB_PORT; - - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Server $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-Proto $HTTP_SCHEME; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_hide_header X-Frame-Options; - proxy_pass http://$upstream; - proxy_http_version 1.1; - proxy_redirect http://$upstream $HTTP_SCHEME://$HTTP_HOST; - proxy_request_buffering off; - client_max_body_size 0; -} - -# GeoNode -location /static/ { - alias /mnt/volumes/statics/static/; - - location ~* \.(?:html|js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|ttf|rtf|swf|ico|flv|txt|woff|woff2|svg|xml)$ { - gzip_static always; - expires 30d; - access_log off; - add_header Pragma "public"; - add_header Cache-Control "max-age=31536000, public"; - } -} - -location /uploaded/ { - alias /mnt/volumes/statics/uploaded/; - - location ~* \.(?:html|js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|ttf|rtf|swf|ico|flv|txt|woff|woff2|svg|xml)$ { - gzip_static always; - expires 30d; - access_log off; - add_header Pragma "public"; - add_header Cache-Control "max-age=31536000, public"; - } -} - -location / { - # Using a variable is a trick to let Nginx start even if upstream host is not up yet - # (see https://sandro-keil.de/blog/2017/07/24/let-nginx-start-if-upstream-host-is-unavailable-or-down/) - set $upstream $GEONODE_LB_HOST_IP:$GEONODE_LB_PORT; - - if ($request_method = OPTIONS) { - add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, OPTIONS"; - add_header Access-Control-Allow-Headers "Authorization, Content-Type, Accept"; - add_header Access-Control-Allow-Credentials true; - add_header Content-Length 0; - add_header Content-Type text/plain; - add_header Access-Control-Max-Age 1728000; - return 200; - } - - add_header Access-Control-Allow-Credentials false; - add_header Access-Control-Allow-Headers "Content-Type, Accept, Authorization, Origin, User-Agent"; - add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, OPTIONS"; - - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header Origin $HTTP_SCHEME://$host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-Host $server_name; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $HTTP_SCHEME; - proxy_hide_header X-Frame-Options; - proxy_request_buffering off; - - # uwsgi_params - include /etc/nginx/uwsgi_params; - - proxy_pass http://$upstream; - # uwsgi_pass $upstream; - - # when a client closes the connection then keep the channel to uwsgi open. Otherwise uwsgi throws an IOError - uwsgi_ignore_client_abort on; - uwsgi_request_buffering off; - - location ~* \.(?:js|jpg|jpeg|gif|png|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|ttf|rtf|swf|ico|flv|woff|woff2|svg|xml)$ { - gzip_static always; - expires 30d; - access_log off; - add_header Pragma "public"; - add_header Cache-Control "max-age=31536000, public"; - } -} diff --git a/scripts/docker/nginx/nginx.conf.envsubst b/scripts/docker/nginx/nginx.conf.envsubst deleted file mode 100644 index b6065209d51..00000000000 --- a/scripts/docker/nginx/nginx.conf.envsubst +++ /dev/null @@ -1,39 +0,0 @@ -# NOTE : $VARIABLES are env variables replaced by entrypoint.sh using envsubst -# not to be mistaken for nginx variables (also starting with $, but usually lowercase) - -worker_processes auto; - -events { - -} - -http { - server_names_hash_bucket_size 64; - - # Allow Nginx to resolve Docker host names (see https://sandro-keil.de/blog/2017/07/24/let-nginx-start-if-upstream-host-is-unavailable-or-down/) - resolver $RESOLVER; # it seems rancher uses 169.254.169.250 instead of 127.0.0.11 which works well in docker-compose (see /etc/resolv.conf) - - # https - listens on specific name - this uses letsencrypt cert - # this includes a symlink that links either to nginx.https.available.conf if https in enabled - # or to an empty file if https is disabled. - include nginx.https.enabled.conf; - - # http - listens to specific HTTP_HOST only - this is not encrypted (not ideal but admissible on LAN for instance) - # even if not used (HTTP_HOST empty), we must keep it as it's used for internal API calls between django and geoserver - # TODO : do not use unencrypted connection even on LAN, but is it possible to have browser not complaining about unknown authority ? - server { - listen 80; - server_name $HTTP_HOST 127.0.0.1; - - include sites-enabled/*.conf; - } - - # Default server closes the connection (we can connect only using HTTP_HOST and HTTPS_HOST) - server { - listen 80 default_server; - listen 443; - server_name _; - return 444; - } - -} diff --git a/scripts/docker/nginx/nginx.https.available.conf.envsubst b/scripts/docker/nginx/nginx.https.available.conf.envsubst deleted file mode 100644 index fcd1cb34367..00000000000 --- a/scripts/docker/nginx/nginx.https.available.conf.envsubst +++ /dev/null @@ -1,37 +0,0 @@ -# NOTE : $VARIABLES are env variables replaced by entrypoint.sh using envsubst -# not to be mistaken for nginx variables (also starting with $, but usually lowercase) - -# This file is to be included in the main nginx.conf configuration if HTTPS_HOST is set -ssl_session_cache shared:SSL:10m; -ssl_session_timeout 10m; - -# this is the actual HTTPS host -server { - listen 443 ssl; - server_name $HTTPS_HOST; - keepalive_timeout 70; - - ssl_certificate /certificate_symlink/fullchain.pem; - ssl_certificate_key /certificate_symlink/privkey.pem; - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_ciphers HIGH:!aNULL:!MD5; - - include sites-enabled/*.conf; -} - -# if we try to connect from http, we redirect to https -server { - listen 80; - server_name $HTTPS_HOST $HTTP_HOST; # TODO : once geoserver supports relative urls, we should allow access though both HTTP and HTTPS at the same time and hence remove HTTP_HOST from this line - - # Except for let's encrypt challenge - location /.well-known { - alias /geonode-certificates/.well-known; - include /etc/nginx/mime.types; - } - - # Redirect to https - location / { - return 302 https://$HTTPS_HOST$request_uri; # TODO : we should use 301 (permanent redirect, but not practical for debug) - } -} From 8ee1c0818b36c9d452ca3d3a6a6dcc053a385850 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:37:15 +0100 Subject: [PATCH 028/284] Bump ipython from 8.16.1 to 8.20.0 (#11803) * Bump ipython from 8.16.1 to 8.20.0 Bumps [ipython](https://github.com/ipython/ipython) from 8.16.1 to 8.20.0. - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/commits/8.20.0) --- updated-dependencies: - dependency-name: ipython dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e192ba5ad4f..85e5f94a827 100644 --- a/requirements.txt +++ b/requirements.txt @@ -145,7 +145,7 @@ pycountry # production uWSGI==2.0.22 gunicorn==21.2.0 -ipython==8.16.1 +ipython==8.20.0 docker==6.1.3 invoke==2.2.0 diff --git a/setup.cfg b/setup.cfg index a32b607e09f..7aedda8f0ab 100644 --- a/setup.cfg +++ b/setup.cfg @@ -170,7 +170,7 @@ install_requires = # production uWSGI==2.0.22 gunicorn==21.2.0 - ipython==8.16.1 + ipython==8.20.0 docker==6.1.3 invoke==2.2.0 From 6b3486c02e0641e1c0d09bc1798f6390342d5fa0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:39:02 +0100 Subject: [PATCH 029/284] Bump uwsgi from 2.0.22 to 2.0.23 (#11665) * Bump uwsgi from 2.0.22 to 2.0.23 Bumps [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) from 2.0.22 to 2.0.23. --- updated-dependencies: - dependency-name: uwsgi dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 85e5f94a827..6dac720d5c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -143,7 +143,7 @@ django-ipware<5.1 pycountry # production -uWSGI==2.0.22 +uWSGI==2.0.23 gunicorn==21.2.0 ipython==8.20.0 docker==6.1.3 diff --git a/setup.cfg b/setup.cfg index 7aedda8f0ab..798e45ff248 100644 --- a/setup.cfg +++ b/setup.cfg @@ -168,7 +168,7 @@ install_requires = pycountry # production - uWSGI==2.0.22 + uWSGI==2.0.23 gunicorn==21.2.0 ipython==8.20.0 docker==6.1.3 From 629e1742482d0d541fb77f186129cee56e6da299 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:43:09 +0100 Subject: [PATCH 030/284] Bump pytest-django from 4.5.2 to 4.7.0 (#11673) * Bump pytest-django from 4.5.2 to 4.7.0 Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.5.2 to 4.7.0. - [Release notes](https://github.com/pytest-dev/pytest-django/releases) - [Changelog](https://github.com/pytest-dev/pytest-django/blob/master/docs/changelog.rst) - [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.5.2...v4.7.0) --- updated-dependencies: - dependency-name: pytest-django dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 6dac720d5c4..86bffaffa96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -158,7 +158,7 @@ pytest==7.4.4 pytest-bdd==7.0.1 splinter==0.19.0 pytest-splinter==3.3.2 -pytest-django==4.5.2 +pytest-django==4.7.0 setuptools>=65.5.1,<68.3.0 pip==23.3.1 Twisted==23.10.0 diff --git a/setup.cfg b/setup.cfg index 798e45ff248..469d8402a5b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -183,7 +183,7 @@ install_requires = pytest-bdd==7.0.1 splinter==0.19.0 pytest-splinter==3.3.2 - pytest-django==4.5.2 + pytest-django==4.7.0 setuptools>=65.5.1,<68.3.0 pip==23.3.1 Twisted==23.10.0 From 306f69fc1e1245034111544aa94cfdbff326f690 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:44:54 +0100 Subject: [PATCH 031/284] Bump whitenoise from 6.5.0 to 6.6.0 (#11590) * Bump whitenoise from 6.5.0 to 6.6.0 Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.5.0 to 6.6.0. - [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst) - [Commits](https://github.com/evansd/whitenoise/compare/6.5.0...6.6.0) --- updated-dependencies: - dependency-name: whitenoise dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 86bffaffa96..1d46adb3996 100644 --- a/requirements.txt +++ b/requirements.txt @@ -117,7 +117,7 @@ boto3==1.34.15 # Django Caches python-memcached<=1.59 -whitenoise==6.5.0 +whitenoise==6.6.0 Brotli==1.1.0 # Contribs diff --git a/setup.cfg b/setup.cfg index 469d8402a5b..72063837efd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -142,7 +142,7 @@ install_requires = # Django Caches python-memcached<=1.59 - whitenoise==6.5.0 + whitenoise==6.6.0 Brotli==1.1.0 # Contribs From bd0b94b6a8d5021ebf8e32708c54216fede7b116 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:56:33 +0100 Subject: [PATCH 032/284] Bump pillow from 10.0.1 to 10.2.0 (#11800) * Bump pillow from 10.0.1 to 10.2.0 Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.0.1 to 10.2.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/10.0.1...10.2.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1d46adb3996..f2983cbd77a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # native dependencies -Pillow==10.0.1 +Pillow==10.2.0 lxml==5.1.0 psycopg2==2.9.9 Django==3.2.23 diff --git a/setup.cfg b/setup.cfg index 72063837efd..9d47bbfb7d6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -25,7 +25,7 @@ setup_requires = setuptools install_requires = # native dependencies - Pillow==10.0.1 + Pillow==10.2.0 lxml==5.1.0 psycopg2==2.9.9 Django==3.2.23 From 312f95070857024f87b2dd2410eae885dd6f2c8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:48:14 +0100 Subject: [PATCH 033/284] Bump markdown from 3.5 to 3.5.1 (#11660) * Bump markdown from 3.5 to 3.5.1 Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.5 to 3.5.1. - [Release notes](https://github.com/Python-Markdown/markdown/releases) - [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md) - [Commits](https://github.com/Python-Markdown/markdown/compare/3.5...3.5.1) --- updated-dependencies: - dependency-name: markdown dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index f2983cbd77a..8676fb096c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -82,7 +82,7 @@ drf-extensions==0.7.1 drf-writable-nested==0.7.0 drf-spectacular==0.26.5 dynamic-rest==2.1.2 -Markdown==3.5 +Markdown==3.5.1 pinax-notifications==6.0.0 pinax-ratings==4.0.0 diff --git a/setup.cfg b/setup.cfg index 9d47bbfb7d6..6dc3c219543 100644 --- a/setup.cfg +++ b/setup.cfg @@ -108,7 +108,7 @@ install_requires = drf-writable-nested==0.7.0 drf-spectacular==0.26.5 dynamic-rest==2.1.2 - Markdown==3.5 + Markdown==3.5.1 pinax-notifications==6.0.0 pinax-ratings==4.0.0 From 0c6be8e21748f369d643d08f199f0848c2eaca8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:48:43 +0100 Subject: [PATCH 034/284] Bump django-storages from 1.14.1 to 1.14.2 (#11600) * Bump django-storages from 1.14.1 to 1.14.2 Bumps [django-storages](https://github.com/jschneier/django-storages) from 1.14.1 to 1.14.2. - [Changelog](https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst) - [Commits](https://github.com/jschneier/django-storages/compare/1.14.1...1.14.2) --- updated-dependencies: - dependency-name: django-storages dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 8676fb096c9..53ed7a8e93e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -109,7 +109,7 @@ elasticsearch>=2.0.0,<9.0.0 django-bootstrap3-datetimepicker-2==2.8.3 # storage manager dependencies -django-storages==1.14.1 +django-storages==1.14.2 dropbox==11.36.2 google-cloud-storage==2.11.0 google-cloud-core==2.3.3 diff --git a/setup.cfg b/setup.cfg index 6dc3c219543..65444fe2adc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -134,7 +134,7 @@ install_requires = django-bootstrap3-datetimepicker-2==2.8.3 # storage manager dependencies - django-storages==1.14.1 + django-storages==1.14.2 dropbox==11.36.2 google-cloud-storage==2.11.0 google-cloud-core==2.3.3 From 3ce895c3a7c6f33e886eb23f027017a1c2d39295 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:51:09 +0100 Subject: [PATCH 035/284] Bump mako from 1.2.4 to 1.3.0 (#11692) * Bump mako from 1.2.4 to 1.3.0 Bumps [mako](https://github.com/sqlalchemy/mako) from 1.2.4 to 1.3.0. - [Release notes](https://github.com/sqlalchemy/mako/releases) - [Changelog](https://github.com/sqlalchemy/mako/blob/main/CHANGES) - [Commits](https://github.com/sqlalchemy/mako/commits) --- updated-dependencies: - dependency-name: mako dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 53ed7a8e93e..109dbae7d04 100644 --- a/requirements.txt +++ b/requirements.txt @@ -172,7 +172,7 @@ webdriver_manager==4.0.1 # Security and audit mistune==3.0.2 protobuf==3.20.3 -mako==1.2.4 +mako==1.3.0 paramiko==3.4.0 # not directly required, fixes Blowfish deprecation warning certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/setup.cfg b/setup.cfg index 65444fe2adc..80be793b81d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -197,7 +197,7 @@ install_requires = # Security and audit mistune==3.0.2 protobuf==3.20.3 - mako==1.2.4 + mako==1.3.0 paramiko==3.4.0 # not directly required, fixes Blowfish deprecation warning certifi>=2023.7.22 # not directly required, pinned by Snyk to avoid a vulnerability jwcrypto>=1.4 # not directly required, pinned by Snyk to avoid a vulnerability From b7e1e370804aa53005357a7486eb0319ef095687 Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Wed, 10 Jan 2024 16:05:57 +0100 Subject: [PATCH 036/284] Update Docker tags (#11823) --- docker-compose.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 61b85d10503..0348cb56f8c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,7 +61,7 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: - image: geonode/nginx:latest + image: geonode/nginx:1.25.3-latest container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: - .env @@ -78,7 +78,7 @@ services: # Gets and installs letsencrypt certificates letsencrypt: - image: geonode/letsencrypt:latest + image: geonode/letsencrypt:2.6.0-latest container_name: letsencrypt4${COMPOSE_PROJECT_NAME} env_file: - .env @@ -88,7 +88,7 @@ services: # Geoserver backend geoserver: - image: geonode/geoserver:latest + image: geonode/geoserver:2.23.3-latest container_name: geoserver4${COMPOSE_PROJECT_NAME} healthcheck: test: "curl -m 10 --fail --silent --write-out 'HTTP CODE : %{http_code}\n' --output /dev/null http://geoserver:8080/geoserver/ows" @@ -114,7 +114,7 @@ services: condition: service_healthy data-dir-conf: - image: geonode/geoserver_data:latest + image: geonode/geoserver_data:2.23.3-latest container_name: gsconf4${COMPOSE_PROJECT_NAME} entrypoint: sleep infinity volumes: @@ -126,7 +126,7 @@ services: # PostGIS database. db: # use geonode official postgis 15 image - image: geonode/postgis:latest + image: geonode/postgis:15.3-latest command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}" container_name: db4${COMPOSE_PROJECT_NAME} env_file: From 5ecdb38f78e94b93c5e2fccc2e5289354e4e602e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:12:30 +0100 Subject: [PATCH 037/284] Bump psutil from 5.9.5 to 5.9.7 (#11772) * Bump psutil from 5.9.5 to 5.9.7 Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.5 to 5.9.7. - [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst) - [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.5...release-5.9.7) --- updated-dependencies: - dependency-name: psutil dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump psutil from 5.9.5 to 5.9.7 Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.5 to 5.9.7. - [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst) - [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.5...release-5.9.7) --- updated-dependencies: - dependency-name: psutil dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 109dbae7d04..84674c2c18c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -133,7 +133,7 @@ pylibmc==1.6.3 sherlock==0.4.1 # required by monitoring -psutil==5.9.5 +psutil==5.9.7 django-cors-headers==4.2.0 user-agents django-user-agents diff --git a/setup.cfg b/setup.cfg index 80be793b81d..e4c01a0e5e0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -158,7 +158,7 @@ install_requires = sherlock==0.4.1 # required by monitoring - psutil==5.9.5 + psutil==5.9.7 django-cors-headers==4.2.0 user-agents django-user-agents From 398456e02d73b46a4b6a5983c2868e8486a06d94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:57:31 +0100 Subject: [PATCH 038/284] Bump geoip2 from 4.7.0 to 4.8.0 (#11766) * Bump geoip2 from 4.7.0 to 4.8.0 Bumps [geoip2](https://github.com/maxmind/GeoIP2-python) from 4.7.0 to 4.8.0. - [Release notes](https://github.com/maxmind/GeoIP2-python/releases) - [Changelog](https://github.com/maxmind/GeoIP2-python/blob/main/HISTORY.rst) - [Commits](https://github.com/maxmind/GeoIP2-python/compare/v4.7.0...v4.8.0) --- updated-dependencies: - dependency-name: geoip2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 1 - setup.cfg | 1 - 2 files changed, 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 84674c2c18c..e1dc6665c87 100644 --- a/requirements.txt +++ b/requirements.txt @@ -59,7 +59,6 @@ pycsw==2.6.1 SQLAlchemy==2.0.21 # required by PyCSW Shapely==1.8.5.post1 mercantile==1.2.1 -geoip2==4.7.0 numpy==1.26.* # # Apps with packages provided in GeoNode's PPA on Launchpad. diff --git a/setup.cfg b/setup.cfg index e4c01a0e5e0..19c44db6c39 100644 --- a/setup.cfg +++ b/setup.cfg @@ -85,7 +85,6 @@ install_requires = SQLAlchemy==2.0.21 # required by PyCSW Shapely==1.8.5.post1 mercantile==1.2.1 - geoip2==4.7.0 numpy==1.26.* # # Apps with packages provided in GeoNode's PPA on Launchpad. From 009d587928b8597853549ee839a6cf2f09843798 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:57:48 +0100 Subject: [PATCH 039/284] Bump celery from 5.3.5 to 5.3.6 (#11729) * Bump celery from 5.3.5 to 5.3.6 Bumps [celery](https://github.com/celery/celery) from 5.3.5 to 5.3.6. - [Release notes](https://github.com/celery/celery/releases) - [Changelog](https://github.com/celery/celery/blob/main/Changelog.rst) - [Commits](https://github.com/celery/celery/compare/v5.3.5...v5.3.6) --- updated-dependencies: - dependency-name: celery dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 4 ++-- setup.cfg | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index e1dc6665c87..0c6fff01d83 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,8 +14,8 @@ urllib3==1.26.18 Paver==1.3.4 python-slugify==8.0.1 decorator==5.1.1 -celery==5.3.5 -kombu==5.3.3 +celery==5.3.6 +kombu==5.3.4 vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 diff --git a/setup.cfg b/setup.cfg index 19c44db6c39..a8caad512da 100644 --- a/setup.cfg +++ b/setup.cfg @@ -40,8 +40,8 @@ install_requires = Paver==1.3.4 python-slugify==8.0.1 decorator==5.1.1 - celery==5.3.5 - kombu==5.3.3 + celery==5.3.6 + kombu==5.3.4 vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 From 3c712fbe8238b67b0b21901651062251805a6730 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:01:33 +0100 Subject: [PATCH 040/284] Bump kombu from 5.3.3 to 5.3.4 (#11705) * Bump kombu from 5.3.3 to 5.3.4 Bumps [kombu](https://github.com/celery/kombu) from 5.3.3 to 5.3.4. - [Release notes](https://github.com/celery/kombu/releases) - [Changelog](https://github.com/celery/kombu/blob/main/Changelog.rst) - [Commits](https://github.com/celery/kombu/compare/v5.3.3...v5.3.4) --- updated-dependencies: - dependency-name: kombu dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani From 268e80ec2adb77dbf41b08566647555bf61c68e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:30:18 +0100 Subject: [PATCH 041/284] Update python-memcached requirement from <=1.59 to <=1.61 (#11793) * Update python-memcached requirement from <=1.59 to <=1.61 Updates the requirements on [python-memcached](https://github.com/linsomniac/python-memcached) to permit the latest version. - [Release notes](https://github.com/linsomniac/python-memcached/releases) - [Changelog](https://github.com/linsomniac/python-memcached/blob/master/ChangeLog) - [Commits](https://github.com/linsomniac/python-memcached/compare/release-1.49...1.61) --- updated-dependencies: - dependency-name: python-memcached dependency-type: direct:production ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 0c6fff01d83..697a586ea7b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -115,7 +115,7 @@ google-cloud-core==2.3.3 boto3==1.34.15 # Django Caches -python-memcached<=1.59 +python-memcached<=1.61 whitenoise==6.6.0 Brotli==1.1.0 diff --git a/setup.cfg b/setup.cfg index a8caad512da..fc25ac79302 100644 --- a/setup.cfg +++ b/setup.cfg @@ -140,7 +140,7 @@ install_requires = boto3==1.34.15 # Django Caches - python-memcached<=1.59 + python-memcached<=1.61 whitenoise==6.6.0 Brotli==1.1.0 From ef176ccb17d9064a95e09041db858a055730c9bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:30:49 +0100 Subject: [PATCH 042/284] Bump jsonschema from 4.19.2 to 4.20.0 (#11706) * Bump jsonschema from 4.19.2 to 4.20.0 Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.19.2 to 4.20.0. - [Release notes](https://github.com/python-jsonschema/jsonschema/releases) - [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst) - [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.19.2...v4.20.0) --- updated-dependencies: - dependency-name: jsonschema dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 697a586ea7b..7f8f8b8367e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 wrapt==1.15.0 -jsonschema==4.19.2 +jsonschema==4.20.0 zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 diff --git a/setup.cfg b/setup.cfg index fc25ac79302..3393c20c3ed 100644 --- a/setup.cfg +++ b/setup.cfg @@ -46,7 +46,7 @@ install_requires = tqdm==4.66.1 Deprecated==1.2.14 wrapt==1.15.0 - jsonschema==4.19.2 + jsonschema==4.20.0 zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 From 7b7bcb5fcc6fe53e03958d7e8312f87a67c822bb Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Wed, 10 Jan 2024 17:31:58 +0100 Subject: [PATCH 043/284] fixed docker image tags for test and dev compose files (#11828) --- docker-compose-dev.yml | 10 +++++----- docker-compose-test.yml | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 7c21d3ec374..4525cb034be 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -52,7 +52,7 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: - image: geonode/nginx:latest + image: geonode/nginx:1.25.3-latest build: ./scripts/docker/nginx/ container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: @@ -70,7 +70,7 @@ services: # Gets and installs letsencrypt certificates letsencrypt: - image: geonode/letsencrypt:latest + image: geonode/letsencrypt:2.6.0-latest container_name: letsencrypt4${COMPOSE_PROJECT_NAME} env_file: - .env @@ -80,7 +80,7 @@ services: # Geoserver backend geoserver: - image: geonode/geoserver:latest + image: geonode/geoserver:2.23.3-latest container_name: geoserver4${COMPOSE_PROJECT_NAME} healthcheck: test: "curl -m 10 --fail --silent --write-out 'HTTP CODE : %{http_code}\n' --output /dev/null http://geoserver:8080/geoserver/ows" @@ -106,7 +106,7 @@ services: condition: service_healthy data-dir-conf: - image: geonode/geoserver_data:latest + image: geonode/geoserver_data:2.23.3-latest container_name: gsconf4${COMPOSE_PROJECT_NAME} entrypoint: sleep infinity volumes: @@ -118,7 +118,7 @@ services: # PostGIS database. db: # use geonode official postgis 15 image - image: geonode/postgis:latest + image: geonode/postgis:15.3-latest command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}" container_name: db4${COMPOSE_PROJECT_NAME} env_file: diff --git a/docker-compose-test.yml b/docker-compose-test.yml index 22ac6dd0093..86e699093e6 100644 --- a/docker-compose-test.yml +++ b/docker-compose-test.yml @@ -52,7 +52,7 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: - image: geonode/nginx:latest + image: geonode/nginx:1.25.3-latest container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: - .env_test @@ -82,7 +82,7 @@ services: # Gets and installs letsencrypt certificates letsencrypt: - image: geonode/letsencrypt:latest + image: geonode/letsencrypt:2.6.0-latest container_name: letsencrypt4${COMPOSE_PROJECT_NAME} env_file: - .env_test @@ -92,7 +92,7 @@ services: # Geoserver backend geoserver: - image: geonode/geoserver:latest + image: geonode/geoserver:2.23.3-latest container_name: geoserver4${COMPOSE_PROJECT_NAME} healthcheck: test: "curl -m 10 --fail --silent --write-out 'HTTP CODE : %{http_code}\n' --output /dev/null http://geoserver:8080/geoserver/ows" @@ -118,7 +118,7 @@ services: condition: service_healthy data-dir-conf: - image: geonode/geoserver_data:latest + image: geonode/geoserver_data:2.23.3-latest container_name: gsconf4${COMPOSE_PROJECT_NAME} entrypoint: sleep infinity volumes: @@ -130,7 +130,7 @@ services: # PostGIS database. db: # use geonode official postgis 15 image - image: geonode/postgis:latest + image: geonode/postgis:15.3-latest command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}" container_name: db4${COMPOSE_PROJECT_NAME} env_file: From b556709e24fde3122fb480757349afab2df3b1e4 Mon Sep 17 00:00:00 2001 From: Giovanni Allegri Date: Wed, 10 Jan 2024 18:55:03 +0100 Subject: [PATCH 044/284] Add long_description_content_type for Markdown (#11831) --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 498d391199e..2109bd21603 100644 --- a/setup.py +++ b/setup.py @@ -28,6 +28,7 @@ setup( version=__import__("geonode").get_version(), long_description=open("README.md").read(), + long_description_content_type="text/markdown", package_data={ "": ["*.*"], # noqa "": ["static/*.*"], # noqa From aab71bb5a0dbd1381d2e2bf36b835af2f81dad1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:41:35 +0100 Subject: [PATCH 045/284] Bump django-sequences from 2.8 to 2.9 (#11776) * Bump django-sequences from 2.8 to 2.9 Bumps [django-sequences](https://github.com/aaugustin/django-sequences) from 2.8 to 2.9. - [Commits](https://github.com/aaugustin/django-sequences/compare/2.8...2.9) --- updated-dependencies: - dependency-name: django-sequences dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 7f8f8b8367e..27eb0c4fe82 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,7 +47,7 @@ django-tinymce==3.6.1 django-grappelli==3.0.8 django-uuid-upload-path==1.0.0 django-widget-tweaks==1.5.0 -django-sequences==2.8 +django-sequences==2.9 oauthlib==3.2.2 pyopenssl==23.2.0 pyjwt==2.8.0 diff --git a/setup.cfg b/setup.cfg index 3393c20c3ed..b868a1eac09 100644 --- a/setup.cfg +++ b/setup.cfg @@ -73,7 +73,7 @@ install_requires = django-grappelli==3.0.8 django-uuid-upload-path==1.0.0 django-widget-tweaks==1.5.0 - django-sequences==2.8 + django-sequences==2.9 oauthlib==3.2.2 pyopenssl==23.2.0 pyjwt==2.8.0 From 6030079ef0120b6f3d507794434223dee9d3f19d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?z=C7=9D=CA=87=C9=B9o=C9=94=20o=C9=93=C4=B1=C9=B9po=C9=B9?= <28023409+roicort@users.noreply.github.com> Date: Thu, 11 Jan 2024 02:44:07 -0600 Subject: [PATCH 046/284] Delete docker-compose-dev reference to nginx script (#11834) --- docker-compose-dev.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 4525cb034be..5ac2b110948 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -53,7 +53,6 @@ services: # Nginx is serving django static and media files and proxies to django and geonode geonode: image: geonode/nginx:1.25.3-latest - build: ./scripts/docker/nginx/ container_name: nginx4${COMPOSE_PROJECT_NAME} env_file: - .env From 680e6d209eb87f695d65828f9214dcb808858cab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 10:40:19 +0100 Subject: [PATCH 047/284] Bump django-appconf from 1.0.5 to 1.0.6 (#11725) * Bump django-appconf from 1.0.5 to 1.0.6 Bumps [django-appconf](https://github.com/django-compressor/django-appconf) from 1.0.5 to 1.0.6. - [Release notes](https://github.com/django-compressor/django-appconf/releases) - [Changelog](https://github.com/django-compressor/django-appconf/blob/develop/docs/changelog.rst) - [Commits](https://github.com/django-compressor/django-appconf/compare/v1.0.5...v1.0.6) --- updated-dependencies: - dependency-name: django-appconf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 27eb0c4fe82..2bfb61a46bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ pathvalidate==3.2.0 # Django Apps django-allauth==0.54.0 -django-appconf==1.0.5 +django-appconf==1.0.6 django-celery-results==2.5.1 django-filter==23.3 django-imagekit==4.1.0 diff --git a/setup.cfg b/setup.cfg index b868a1eac09..0c949ea818d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -56,7 +56,7 @@ install_requires = # Django Apps django-allauth==0.54.0 - django-appconf==1.0.5 + django-appconf==1.0.6 django-celery-results==2.5.1 django-filter==23.3 django-imagekit==4.1.0 From 783883b30fde368c2fe1b57dbf86ae0fc5b84968 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 11:47:05 +0100 Subject: [PATCH 048/284] Bump google-cloud-core from 2.3.3 to 2.4.1 (#11764) * Bump google-cloud-core from 2.3.3 to 2.4.1 Bumps [google-cloud-core](https://github.com/googleapis/python-cloud-core) from 2.3.3 to 2.4.1. - [Release notes](https://github.com/googleapis/python-cloud-core/releases) - [Changelog](https://github.com/googleapis/python-cloud-core/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/python-cloud-core/compare/v2.3.3...v2.4.1) --- updated-dependencies: - dependency-name: google-cloud-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2bfb61a46bc..1e0ea986293 100644 --- a/requirements.txt +++ b/requirements.txt @@ -111,7 +111,7 @@ django-bootstrap3-datetimepicker-2==2.8.3 django-storages==1.14.2 dropbox==11.36.2 google-cloud-storage==2.11.0 -google-cloud-core==2.3.3 +google-cloud-core==2.4.1 boto3==1.34.15 # Django Caches diff --git a/setup.cfg b/setup.cfg index 0c949ea818d..35726bddbeb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -136,7 +136,7 @@ install_requires = django-storages==1.14.2 dropbox==11.36.2 google-cloud-storage==2.11.0 - google-cloud-core==2.3.3 + google-cloud-core==2.4.1 boto3==1.34.15 # Django Caches From 25a94ec7a1b6ccec9c20acf3317ab0f1205ff12f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 11:49:49 +0100 Subject: [PATCH 049/284] Bump google-cloud-storage from 2.11.0 to 2.14.0 (#11775) * Bump google-cloud-storage from 2.11.0 to 2.14.0 Bumps [google-cloud-storage](https://github.com/googleapis/python-storage) from 2.11.0 to 2.14.0. - [Release notes](https://github.com/googleapis/python-storage/releases) - [Changelog](https://github.com/googleapis/python-storage/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/python-storage/compare/v2.11.0...v2.14.0) --- updated-dependencies: - dependency-name: google-cloud-storage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1e0ea986293..e318cb1a7a0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -110,7 +110,7 @@ django-bootstrap3-datetimepicker-2==2.8.3 # storage manager dependencies django-storages==1.14.2 dropbox==11.36.2 -google-cloud-storage==2.11.0 +google-cloud-storage==2.14.0 google-cloud-core==2.4.1 boto3==1.34.15 diff --git a/setup.cfg b/setup.cfg index 35726bddbeb..54da5016aac 100644 --- a/setup.cfg +++ b/setup.cfg @@ -135,7 +135,7 @@ install_requires = # storage manager dependencies django-storages==1.14.2 dropbox==11.36.2 - google-cloud-storage==2.11.0 + google-cloud-storage==2.14.0 google-cloud-core==2.4.1 boto3==1.34.15 From 399a1d2835fd09130e16edd5faaf400b0adb5798 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:39:24 +0100 Subject: [PATCH 050/284] Bump django-cors-headers from 4.2.0 to 4.3.1 (#11709) * Bump django-cors-headers from 4.2.0 to 4.3.1 Bumps [django-cors-headers](https://github.com/adamchainz/django-cors-headers) from 4.2.0 to 4.3.1. - [Changelog](https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst) - [Commits](https://github.com/adamchainz/django-cors-headers/compare/4.2.0...4.3.1) --- updated-dependencies: - dependency-name: django-cors-headers dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e318cb1a7a0..076098c27ca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -133,7 +133,7 @@ sherlock==0.4.1 # required by monitoring psutil==5.9.7 -django-cors-headers==4.2.0 +django-cors-headers==4.3.1 user-agents django-user-agents xmljson diff --git a/setup.cfg b/setup.cfg index 54da5016aac..e47beea3506 100644 --- a/setup.cfg +++ b/setup.cfg @@ -158,7 +158,7 @@ install_requires = # required by monitoring psutil==5.9.7 - django-cors-headers==4.2.0 + django-cors-headers==4.3.1 user-agents django-user-agents xmljson From 0b70ae1d1eec7003fa5458aafd5a1ea38c5c334e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:40:29 +0100 Subject: [PATCH 051/284] Bump django-filter from 23.3 to 23.5 (#11768) * Bump django-filter from 23.3 to 23.5 Bumps [django-filter](https://github.com/carltongibson/django-filter) from 23.3 to 23.5. - [Release notes](https://github.com/carltongibson/django-filter/releases) - [Changelog](https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst) - [Commits](https://github.com/carltongibson/django-filter/compare/23.3...23.5) --- updated-dependencies: - dependency-name: django-filter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 076098c27ca..54e05d2ebb6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ pathvalidate==3.2.0 django-allauth==0.54.0 django-appconf==1.0.6 django-celery-results==2.5.1 -django-filter==23.3 +django-filter==23.5 django-imagekit==4.1.0 django-taggit==1.5.1 django-markdownify==0.9.3 diff --git a/setup.cfg b/setup.cfg index e47beea3506..8b65bda71d4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -58,7 +58,7 @@ install_requires = django-allauth==0.54.0 django-appconf==1.0.6 django-celery-results==2.5.1 - django-filter==23.3 + django-filter==23.5 django-imagekit==4.1.0 django-taggit==1.5.1 django-markdownify==0.9.3 From 56d12affc3c8db834b4392b467a4d6b320331b27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:41:41 +0100 Subject: [PATCH 052/284] Bump drf-spectacular from 0.26.5 to 0.27.0 (#11770) * Bump drf-spectacular from 0.26.5 to 0.27.0 Bumps [drf-spectacular](https://github.com/tfranzel/drf-spectacular) from 0.26.5 to 0.27.0. - [Release notes](https://github.com/tfranzel/drf-spectacular/releases) - [Changelog](https://github.com/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tfranzel/drf-spectacular/compare/0.26.5...0.27.0) --- updated-dependencies: - dependency-name: drf-spectacular dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump drf-spectacular from 0.26.5 to 0.27.0 Bumps [drf-spectacular](https://github.com/tfranzel/drf-spectacular) from 0.26.5 to 0.27.0. - [Release notes](https://github.com/tfranzel/drf-spectacular/releases) - [Changelog](https://github.com/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tfranzel/drf-spectacular/compare/0.26.5...0.27.0) --- updated-dependencies: - dependency-name: drf-spectacular dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 54e05d2ebb6..7e70bddfc1b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -79,7 +79,7 @@ djangorestframework-gis==1.0 djangorestframework-guardian==0.3.0 drf-extensions==0.7.1 drf-writable-nested==0.7.0 -drf-spectacular==0.26.5 +drf-spectacular==0.27.0 dynamic-rest==2.1.2 Markdown==3.5.1 diff --git a/setup.cfg b/setup.cfg index 8b65bda71d4..2b3191e0d68 100644 --- a/setup.cfg +++ b/setup.cfg @@ -105,7 +105,7 @@ install_requires = djangorestframework-guardian==0.3.0 drf-extensions==0.7.1 drf-writable-nested==0.7.0 - drf-spectacular==0.26.5 + drf-spectacular==0.27.0 dynamic-rest==2.1.2 Markdown==3.5.1 From 7f50834576a758f2b0b002e46d5eb6a0f45d842b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:42:59 +0100 Subject: [PATCH 053/284] Update django-invitations requirement from <2.0.1 to <2.1.1 (#11728) * Update django-invitations requirement from <2.0.1 to <2.1.1 Updates the requirements on [django-invitations](https://github.com/jazzband/django-invitations) to permit the latest version. - [Release notes](https://github.com/jazzband/django-invitations/releases) - [Changelog](https://github.com/jazzband/django-invitations/blob/master/docs/changelog.rst) - [Commits](https://github.com/jazzband/django-invitations/compare/0.1...2.1.0) --- updated-dependencies: - dependency-name: django-invitations dependency-type: direct:production ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 7e70bddfc1b..56445c43d7f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -70,7 +70,7 @@ django-select2==8.1.2 django-floppyforms<1.10.0 django-forms-bootstrap<=3.1.0 django-autocomplete-light==3.5.1 -django-invitations<2.0.1 +django-invitations<2.1.1 django-recaptcha==3.0.0 # REST diff --git a/setup.cfg b/setup.cfg index 2b3191e0d68..3477436cf53 100644 --- a/setup.cfg +++ b/setup.cfg @@ -96,7 +96,7 @@ install_requires = django-floppyforms<1.10.0 django-forms-bootstrap<=3.1.0 django-autocomplete-light==3.5.1 - django-invitations<2.0.1 + django-invitations<2.1.1 django-recaptcha==3.0.0 # REST From 0877b65ae98e387b091777527a32243058e4bc3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:44:06 +0100 Subject: [PATCH 054/284] Update django-ipware requirement from <5.1 to <6.1 (#11730) * Update django-ipware requirement from <5.1 to <6.1 Updates the requirements on [django-ipware](https://github.com/un33k/django-ipware) to permit the latest version. - [Changelog](https://github.com/un33k/django-ipware/blob/master/CHANGELOG.md) - [Commits](https://github.com/un33k/django-ipware/compare/0.0.1...v6.0.0) --- updated-dependencies: - dependency-name: django-ipware dependency-type: direct:production ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 56445c43d7f..33c91c2ee93 100644 --- a/requirements.txt +++ b/requirements.txt @@ -137,7 +137,7 @@ django-cors-headers==4.3.1 user-agents django-user-agents xmljson -django-ipware<5.1 +django-ipware<6.1 # no version here, use latest one with fresh data pycountry diff --git a/setup.cfg b/setup.cfg index 3477436cf53..7fd4e2dc987 100644 --- a/setup.cfg +++ b/setup.cfg @@ -162,7 +162,7 @@ install_requires = user-agents django-user-agents xmljson - django-ipware<5.1 + django-ipware<6.1 # no version here, use latest one with fresh data pycountry From 5fdc609c7996b23e4bb1719072e04d3e419e5cf1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:44:57 +0100 Subject: [PATCH 055/284] Update idna requirement from <3.5,>=2.5 to >=2.5,<3.7 (#11726) * Update idna requirement from <3.5,>=2.5 to >=2.5,<3.7 Updates the requirements on [idna](https://github.com/kjd/idna) to permit the latest version. - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst) - [Commits](https://github.com/kjd/idna/compare/v2.5...v3.6) --- updated-dependencies: - dependency-name: idna dependency-type: direct:production ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 33c91c2ee93..dd2184c0653 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ amqp==5.2.0 beautifulsoup4==4.12.2 httplib2<0.22.1 hyperlink==21.0.0 -idna>=2.5,<3.5 +idna>=2.5,<3.7 urllib3==1.26.18 Paver==1.3.4 python-slugify==8.0.1 diff --git a/setup.cfg b/setup.cfg index 7fd4e2dc987..26d2f1b1f25 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,7 +35,7 @@ install_requires = beautifulsoup4==4.12.2 httplib2<0.22.1 hyperlink==21.0.0 - idna>=2.5,<3.5 + idna>=2.5,<3.7 urllib3==1.26.18 Paver==1.3.4 python-slugify==8.0.1 From 8ece5126f4315033c2714351e7cd88a17fec7046 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:47:59 +0100 Subject: [PATCH 056/284] Update setuptools requirement from <68.3.0,>=59.1.1 to >=59.1.1,<69.1.0 (#11724) * Update setuptools requirement from <68.3.0,>=59.1.1 to >=59.1.1,<69.1.0 Updates the requirements on [setuptools](https://github.com/pypa/setuptools) to permit the latest version. - [Release notes](https://github.com/pypa/setuptools/releases) - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/setuptools/compare/v65.5.1...v69.0.2) --- updated-dependencies: - dependency-name: setuptools dependency-type: direct:production ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt * Merge branch 'master' into dependabot/pip/setuptools-gte-59.1.1-and-lt-69.1.0 --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index dd2184c0653..d02af128106 100644 --- a/requirements.txt +++ b/requirements.txt @@ -158,7 +158,7 @@ pytest-bdd==7.0.1 splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.7.0 -setuptools>=65.5.1,<68.3.0 +setuptools>=65.5.1,<69.1.0 pip==23.3.1 Twisted==23.10.0 pixelmatch==0.3.0 diff --git a/setup.cfg b/setup.cfg index 26d2f1b1f25..1972dce7fe3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -183,7 +183,7 @@ install_requires = splinter==0.19.0 pytest-splinter==3.3.2 pytest-django==4.7.0 - setuptools>=65.5.1,<68.3.0 + setuptools>=65.5.1,<69.1.0 pip==23.3.1 Twisted==23.10.0 pixelmatch==0.3.0 From ec4f8d23d9c269d66bfe04f546c000b3dd976650 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:50:03 +0100 Subject: [PATCH 057/284] Bump splinter from 0.19.0 to 0.20.1 (#11698) * Bump splinter from 0.19.0 to 0.20.1 Bumps [splinter](https://github.com/cobrateam/splinter) from 0.19.0 to 0.20.1. - [Release notes](https://github.com/cobrateam/splinter/releases) - [Changelog](https://github.com/cobrateam/splinter/blob/master/docs/news.rst) - [Commits](https://github.com/cobrateam/splinter/compare/0.19.0...0.20.1) --- updated-dependencies: - dependency-name: splinter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index d02af128106..2f52704fee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -155,7 +155,7 @@ flake8==7.0.0 black==23.12.1 pytest==7.4.4 pytest-bdd==7.0.1 -splinter==0.19.0 +splinter==0.20.1 pytest-splinter==3.3.2 pytest-django==4.7.0 setuptools>=65.5.1,<69.1.0 diff --git a/setup.cfg b/setup.cfg index 1972dce7fe3..2b923b37307 100644 --- a/setup.cfg +++ b/setup.cfg @@ -180,7 +180,7 @@ install_requires = black==23.12.1 pytest==7.4.4 pytest-bdd==7.0.1 - splinter==0.19.0 + splinter==0.20.1 pytest-splinter==3.3.2 pytest-django==4.7.0 setuptools>=65.5.1,<69.1.0 From 11e85d3eafd8d15be187772be980e4506923d093 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:51:29 +0100 Subject: [PATCH 058/284] Bump wrapt from 1.15.0 to 1.16.0 (#11691) * Bump wrapt from 1.15.0 to 1.16.0 Bumps [wrapt](https://github.com/GrahamDumpleton/wrapt) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/GrahamDumpleton/wrapt/releases) - [Changelog](https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst) - [Commits](https://github.com/GrahamDumpleton/wrapt/compare/1.15.0...1.16.0) --- updated-dependencies: - dependency-name: wrapt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2f52704fee2..18123a06676 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,7 +19,7 @@ kombu==5.3.4 vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 -wrapt==1.15.0 +wrapt==1.16.0 jsonschema==4.20.0 zipstream-new==1.1.8 schema==0.7.5 diff --git a/setup.cfg b/setup.cfg index 2b923b37307..5a007c33f98 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,7 +45,7 @@ install_requires = vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 - wrapt==1.15.0 + wrapt==1.16.0 jsonschema==4.20.0 zipstream-new==1.1.8 schema==0.7.5 From ac9f31bf67d449728cbf71b38ac2dd0c8319108a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:52:34 +0100 Subject: [PATCH 059/284] Bump pyopenssl from 23.2.0 to 23.3.0 (#11650) * Bump pyopenssl from 23.2.0 to 23.3.0 Bumps [pyopenssl](https://github.com/pyca/pyopenssl) from 23.2.0 to 23.3.0. - [Changelog](https://github.com/pyca/pyopenssl/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/pyopenssl/compare/23.2.0...23.3.0) --- updated-dependencies: - dependency-name: pyopenssl dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 18123a06676..92207c950ea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -49,7 +49,7 @@ django-uuid-upload-path==1.0.0 django-widget-tweaks==1.5.0 django-sequences==2.9 oauthlib==3.2.2 -pyopenssl==23.2.0 +pyopenssl==23.3.0 pyjwt==2.8.0 # geopython dependencies diff --git a/setup.cfg b/setup.cfg index 5a007c33f98..76a36779a07 100644 --- a/setup.cfg +++ b/setup.cfg @@ -75,7 +75,7 @@ install_requires = django-widget-tweaks==1.5.0 django-sequences==2.9 oauthlib==3.2.2 - pyopenssl==23.2.0 + pyopenssl==23.3.0 pyjwt==2.8.0 # geopython dependencies From d47842ebf52acd37fc8e61df76ae1b1e9411dd89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:53:24 +0100 Subject: [PATCH 060/284] Bump sqlalchemy from 2.0.21 to 2.0.22 (#11592) * Bump sqlalchemy from 2.0.21 to 2.0.22 Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.21 to 2.0.22. - [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases) - [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst) - [Commits](https://github.com/sqlalchemy/sqlalchemy/commits) --- updated-dependencies: - dependency-name: sqlalchemy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update setup.cfg --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Giovanni Allegri Co-authored-by: Alessio Fabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 92207c950ea..61e994a9b90 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,7 +56,7 @@ pyjwt==2.8.0 pyproj<3.7.0 OWSLib==0.29.3 pycsw==2.6.1 -SQLAlchemy==2.0.21 # required by PyCSW +SQLAlchemy==2.0.22 # required by PyCSW Shapely==1.8.5.post1 mercantile==1.2.1 numpy==1.26.* diff --git a/setup.cfg b/setup.cfg index 76a36779a07..8253169a0c4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -82,7 +82,7 @@ install_requires = pyproj<3.7.0 OWSLib==0.29.3 pycsw==2.6.1 - SQLAlchemy==2.0.21 # required by PyCSW + SQLAlchemy==2.0.22 # required by PyCSW Shapely==1.8.5.post1 mercantile==1.2.1 numpy==1.26.* From 9b76d443f8aa97d47f2bdf00c76480ab5a441666 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:59:28 +0100 Subject: [PATCH 061/284] Bump django-avatar from 7.1.1 to 8.0.0 (#11627) * Bump django-avatar from 7.1.1 to 8.0.0 Bumps [django-avatar](https://github.com/jazzband/django-avatar) from 7.1.1 to 8.0.0. - [Release notes](https://github.com/jazzband/django-avatar/releases) - [Changelog](https://github.com/jazzband/django-avatar/blob/main/CHANGELOG.rst) - [Commits](https://github.com/jazzband/django-avatar/compare/v7.1.1...v8.0.0) --- updated-dependencies: - dependency-name: django-avatar dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 61e994a9b90..dc3d265ae03 100644 --- a/requirements.txt +++ b/requirements.txt @@ -90,7 +90,7 @@ pinax-ratings==4.0.0 # django-geonode-mapstore-client==4.0.5 -e git+https://github.com/GeoNode/geonode-mapstore-client.git@master#egg=django_geonode_mapstore_client -e git+https://github.com/GeoNode/geonode-importer.git@master#egg=geonode-importer -django-avatar==7.1.1 +django-avatar==8.0.0 geonode-oauth-toolkit==2.2.2 geonode-user-messages==2.0.2 geonode-announcements==2.0.2 diff --git a/setup.cfg b/setup.cfg index 8253169a0c4..75d00bfb006 100644 --- a/setup.cfg +++ b/setup.cfg @@ -115,7 +115,7 @@ install_requires = # GeoNode org maintained apps. django-geonode-mapstore-client>=4.0.5,<5.0.0 geonode-importer>=1.0.2 - django-avatar==7.1.1 + django-avatar==8.0.0 geonode-oauth-toolkit==2.2.2 geonode-user-messages==2.0.2 geonode-announcements==2.0.2 From 20f654edd2eacc69406f8494d08fa293043bda3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:05:44 +0100 Subject: [PATCH 062/284] Bump docker from 6.1.3 to 7.0.0 (#11765) * Bump docker from 6.1.3 to 7.0.0 Bumps [docker](https://github.com/docker/docker-py) from 6.1.3 to 7.0.0. - [Release notes](https://github.com/docker/docker-py/releases) - [Commits](https://github.com/docker/docker-py/compare/6.1.3...7.0.0) --- updated-dependencies: - dependency-name: docker dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index dc3d265ae03..5201af49837 100644 --- a/requirements.txt +++ b/requirements.txt @@ -145,7 +145,7 @@ pycountry uWSGI==2.0.23 gunicorn==21.2.0 ipython==8.20.0 -docker==6.1.3 +docker==7.0.0 invoke==2.2.0 # tests diff --git a/setup.cfg b/setup.cfg index 75d00bfb006..a4dfd59205d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -170,7 +170,7 @@ install_requires = uWSGI==2.0.23 gunicorn==21.2.0 ipython==8.20.0 - docker==6.1.3 + docker==7.0.0 invoke==2.2.0 # tests From 7ef2e13858c4d2a4a37a4e7736cded3c3f291d36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:07:05 +0100 Subject: [PATCH 063/284] Bump django-recaptcha from 3.0.0 to 4.0.0 (#11708) * Bump django-recaptcha from 3.0.0 to 4.0.0 Bumps [django-recaptcha](https://github.com/torchbox/django-recaptcha) from 3.0.0 to 4.0.0. - [Release notes](https://github.com/torchbox/django-recaptcha/releases) - [Changelog](https://github.com/torchbox/django-recaptcha/blob/main/CHANGELOG.md) - [Commits](https://github.com/torchbox/django-recaptcha/compare/3.0.0...4.0.0) --- updated-dependencies: - dependency-name: django-recaptcha dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg with requirements.txt * [Dependencies] Align setup.cfg with requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- create-envfile.py | 2 +- geonode/people/forms.py | 5 ++++- geonode/settings.py | 4 ++-- requirements.txt | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/create-envfile.py b/create-envfile.py index c910e912618..db568f88234 100644 --- a/create-envfile.py +++ b/create-envfile.py @@ -124,7 +124,7 @@ def _get_vals_to_replace(args): prog="ENV file builder", description="Tool for generate environment file automatically. The information can be passed or via CLI or via JSON file ( --file /path/env.json)", usage="python create-envfile.py localhost -f /path/to/json/file.json", - allow_abbrev=False + allow_abbrev=False, ) parser.add_argument( "--noinput", diff --git a/geonode/people/forms.py b/geonode/people/forms.py index 07c851b85d1..94a5ca2e54a 100644 --- a/geonode/people/forms.py +++ b/geonode/people/forms.py @@ -24,7 +24,10 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm from django.utils.translation import ugettext as _ -from captcha.fields import ReCaptchaField +try: + from captcha.fields import ReCaptchaField +except ImportError: + from django_recaptcha.fields import ReCaptchaField # Ported in from django-registration attrs_dict = {"class": "required"} diff --git a/geonode/settings.py b/geonode/settings.py index 2224bce108f..6e0a10440a9 100644 --- a/geonode/settings.py +++ b/geonode/settings.py @@ -1404,8 +1404,8 @@ RECAPTCHA_ENABLED = ast.literal_eval(os.environ.get("RECAPTCHA_ENABLED", "False")) if RECAPTCHA_ENABLED: - if "captcha" not in INSTALLED_APPS: - INSTALLED_APPS += ("captcha",) + if "django_recaptcha" not in INSTALLED_APPS: + INSTALLED_APPS += ("django_recaptcha",) ACCOUNT_SIGNUP_FORM_CLASS = os.getenv( "ACCOUNT_SIGNUP_FORM_CLASS", "geonode.people.forms.AllauthReCaptchaSignupForm" ) diff --git a/requirements.txt b/requirements.txt index 5201af49837..bf6ae395a6a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -71,7 +71,7 @@ django-floppyforms<1.10.0 django-forms-bootstrap<=3.1.0 django-autocomplete-light==3.5.1 django-invitations<2.1.1 -django-recaptcha==3.0.0 +django-recaptcha==4.0.0 # REST djangorestframework==3.12.0 From 820af888e64782f1ec18b409e9d2e3b9ff5c97ef Mon Sep 17 00:00:00 2001 From: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com> Date: Fri, 12 Jan 2024 13:46:21 +0100 Subject: [PATCH 064/284] Update setup.cfg django-recaptcha to 4.0.0 (#11836) --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index a4dfd59205d..a0fc8690423 100644 --- a/setup.cfg +++ b/setup.cfg @@ -97,7 +97,7 @@ install_requires = django-forms-bootstrap<=3.1.0 django-autocomplete-light==3.5.1 django-invitations<2.1.1 - django-recaptcha==3.0.0 + django-recaptcha==4.0.0 # REST djangorestframework==3.12.0 From 07a73f8e241fa8910f269d975ba6e24ec16b47b9 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 16 Jan 2024 09:18:49 +0100 Subject: [PATCH 065/284] fix: requirements.txt to reduce vulnerabilities (#11837) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-CERTIFI-3164749 - https://snyk.io/vuln/SNYK-PYTHON-CERTIFI-5805047 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1066259 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1279042 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1290072 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1298665 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2312875 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2329158 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2329159 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2329160 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2389002 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2389021 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2606966 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2606969 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2940618 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-2968205 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-3319450 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5496950 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5750790 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5880505 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-5932095 - https://snyk.io/vuln/SNYK-PYTHON-DJANGO-6041515 - https://snyk.io/vuln/SNYK-PYTHON-DJANGORESTFRAMEWORK-1090569 - https://snyk.io/vuln/SNYK-PYTHON-OWSLIB-3356626 - https://snyk.io/vuln/SNYK-PYTHON-REQUESTS-5595532 - https://snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 Co-authored-by: snyk-bot From df69dbfc20c03c28638480a0069a02fa139f8a06 Mon Sep 17 00:00:00 2001 From: Alessio Fabiani Date: Tue, 16 Jan 2024 09:19:06 +0100 Subject: [PATCH 066/284] fix: requirements.txt to reduce vulnerabilities (#11838) The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-SELENIUM-6062316 Co-authored-by: snyk-bot From 20e1f1195b28071a0cb18b0d0b1d154d70793058 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 09:40:52 +0100 Subject: [PATCH 067/284] Bump kombu from 5.3.4 to 5.3.5 (#11841) * Bump kombu from 5.3.4 to 5.3.5 Bumps [kombu](https://github.com/celery/kombu) from 5.3.4 to 5.3.5. - [Release notes](https://github.com/celery/kombu/releases) - [Changelog](https://github.com/celery/kombu/blob/main/Changelog.rst) - [Commits](https://github.com/celery/kombu/compare/v5.3.4...v5.3.5) --- updated-dependencies: - dependency-name: kombu dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index bf6ae395a6a..abbb3cb9687 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ Paver==1.3.4 python-slugify==8.0.1 decorator==5.1.1 celery==5.3.6 -kombu==5.3.4 +kombu==5.3.5 vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 diff --git a/setup.cfg b/setup.cfg index a0fc8690423..85f11422c1e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -41,7 +41,7 @@ install_requires = python-slugify==8.0.1 decorator==5.1.1 celery==5.3.6 - kombu==5.3.4 + kombu==5.3.5 vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 From f62dae799fe0811e85f5d679db94ff926dda9a3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 09:43:08 +0100 Subject: [PATCH 068/284] Bump pip from 23.3.1 to 23.3.2 (#11843) * Bump pip from 23.3.1 to 23.3.2 Bumps [pip](https://github.com/pypa/pip) from 23.3.1 to 23.3.2. - [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/pip/compare/23.3.1...23.3.2) --- updated-dependencies: - dependency-name: pip dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump pip from 23.3.1 to 23.3.2 Bumps [pip](https://github.com/pypa/pip) from 23.3.1 to 23.3.2. - [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/pip/compare/23.3.1...23.3.2) --- updated-dependencies: - dependency-name: pip dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index abbb3cb9687..41b16794d38 100644 --- a/requirements.txt +++ b/requirements.txt @@ -159,7 +159,7 @@ splinter==0.20.1 pytest-splinter==3.3.2 pytest-django==4.7.0 setuptools>=65.5.1,<69.1.0 -pip==23.3.1 +pip==23.3.2 Twisted==23.10.0 pixelmatch==0.3.0 factory-boy==3.3.0 diff --git a/setup.cfg b/setup.cfg index 85f11422c1e..a531f889e1c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -184,7 +184,7 @@ install_requires = pytest-splinter==3.3.2 pytest-django==4.7.0 setuptools>=65.5.1,<69.1.0 - pip==23.3.1 + pip==23.3.2 Twisted==23.10.0 pixelmatch==0.3.0 factory-boy==3.3.0 From 59ae21751ed1a312ffa7b93763732607f87ff578 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 11:12:17 +0100 Subject: [PATCH 069/284] build(deps): bump pymupdf from 1.23.8 to 1.23.14 (#11846) * build(deps): bump pymupdf from 1.23.8 to 1.23.14 Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.23.8 to 1.23.14. - [Release notes](https://github.com/pymupdf/pymupdf/releases) - [Changelog](https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt) - [Commits](https://github.com/pymupdf/pymupdf/compare/1.23.8...1.23.14) --- updated-dependencies: - dependency-name: pymupdf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 41b16794d38..e78a5acc656 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 smart_open==6.4.0 -PyMuPDF==1.23.8 +PyMuPDF==1.23.14 pathvalidate==3.2.0 # Django Apps diff --git a/setup.cfg b/setup.cfg index a531f889e1c..d9ec96cb14d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -51,7 +51,7 @@ install_requires = schema==0.7.5 rdflib==6.3.2 smart_open==6.4.0 - PyMuPDF==1.23.8 + PyMuPDF==1.23.14 pathvalidate==3.2.0 # Django Apps From 3bcaa2e516eb02df80fa6f31ce4b02e5953faf83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:58:54 +0100 Subject: [PATCH 070/284] Bump markdown from 3.5.1 to 3.5.2 (#11839) * Bump markdown from 3.5.1 to 3.5.2 Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/Python-Markdown/markdown/releases) - [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md) - [Commits](https://github.com/Python-Markdown/markdown/compare/3.5.1...3.5.2) --- updated-dependencies: - dependency-name: markdown dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e78a5acc656..c7debb5043e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -81,7 +81,7 @@ drf-extensions==0.7.1 drf-writable-nested==0.7.0 drf-spectacular==0.27.0 dynamic-rest==2.1.2 -Markdown==3.5.1 +Markdown==3.5.2 pinax-notifications==6.0.0 pinax-ratings==4.0.0 diff --git a/setup.cfg b/setup.cfg index d9ec96cb14d..6f2552e34db 100644 --- a/setup.cfg +++ b/setup.cfg @@ -107,7 +107,7 @@ install_requires = drf-writable-nested==0.7.0 drf-spectacular==0.27.0 dynamic-rest==2.1.2 - Markdown==3.5.1 + Markdown==3.5.2 pinax-notifications==6.0.0 pinax-ratings==4.0.0 From 7a90e7ed8d775a4591101dc7adf2842318e90e16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 18:52:41 +0100 Subject: [PATCH 071/284] Update python-memcached requirement from <=1.61 to <=1.62 (#11844) * Update python-memcached requirement from <=1.61 to <=1.62 Updates the requirements on [python-memcached](https://github.com/linsomniac/python-memcached) to permit the latest version. - [Release notes](https://github.com/linsomniac/python-memcached/releases) - [Changelog](https://github.com/linsomniac/python-memcached/blob/master/ChangeLog) - [Commits](https://github.com/linsomniac/python-memcached/compare/release-1.49...1.62) --- updated-dependencies: - dependency-name: python-memcached dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Update python-memcached requirement from <=1.61 to <=1.62 Updates the requirements on [python-memcached](https://github.com/linsomniac/python-memcached) to permit the latest version. - [Release notes](https://github.com/linsomniac/python-memcached/releases) - [Changelog](https://github.com/linsomniac/python-memcached/blob/master/ChangeLog) - [Commits](https://github.com/linsomniac/python-memcached/compare/release-1.49...1.62) --- updated-dependencies: - dependency-name: python-memcached dependency-type: direct:production ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index c7debb5043e..450e65431d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -115,7 +115,7 @@ google-cloud-core==2.4.1 boto3==1.34.15 # Django Caches -python-memcached<=1.61 +python-memcached<=1.62 whitenoise==6.6.0 Brotli==1.1.0 diff --git a/setup.cfg b/setup.cfg index 6f2552e34db..23cb58eb07c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -140,7 +140,7 @@ install_requires = boto3==1.34.15 # Django Caches - python-memcached<=1.61 + python-memcached<=1.62 whitenoise==6.6.0 Brotli==1.1.0 From 81fde4f489678fe5440c1725e1dd85292973787e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 09:15:23 +0100 Subject: [PATCH 072/284] Bump sqlalchemy from 2.0.22 to 2.0.25 (#11842) * Bump sqlalchemy from 2.0.22 to 2.0.25 Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.22 to 2.0.25. - [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases) - [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst) - [Commits](https://github.com/sqlalchemy/sqlalchemy/commits) --- updated-dependencies: - dependency-name: sqlalchemy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Alert setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 450e65431d8..1e701bdbd58 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,7 +56,7 @@ pyjwt==2.8.0 pyproj<3.7.0 OWSLib==0.29.3 pycsw==2.6.1 -SQLAlchemy==2.0.22 # required by PyCSW +SQLAlchemy==2.0.25 # required by PyCSW Shapely==1.8.5.post1 mercantile==1.2.1 numpy==1.26.* diff --git a/setup.cfg b/setup.cfg index 23cb58eb07c..9c572b9f0e8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -82,7 +82,7 @@ install_requires = pyproj<3.7.0 OWSLib==0.29.3 pycsw==2.6.1 - SQLAlchemy==2.0.22 # required by PyCSW + SQLAlchemy==2.0.25 # required by PyCSW Shapely==1.8.5.post1 mercantile==1.2.1 numpy==1.26.* From cb99e30cd9303c1c30e03009402459bda22d58b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 09:55:32 +0100 Subject: [PATCH 073/284] Bump django-imagekit from 4.1.0 to 5.0.0 (#11542) * Bump django-imagekit from 4.1.0 to 5.0.0 Bumps [django-imagekit](https://github.com/matthewwithanm/django-imagekit) from 4.1.0 to 5.0.0. - [Release notes](https://github.com/matthewwithanm/django-imagekit/releases) - [Commits](https://github.com/matthewwithanm/django-imagekit/compare/4.1.0...5.0) --- updated-dependencies: - dependency-name: django-imagekit dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1e701bdbd58..72d21b062ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -33,7 +33,7 @@ django-allauth==0.54.0 django-appconf==1.0.6 django-celery-results==2.5.1 django-filter==23.5 -django-imagekit==4.1.0 +django-imagekit==5.0.0 django-taggit==1.5.1 django-markdownify==0.9.3 django-mptt==0.15.0 diff --git a/setup.cfg b/setup.cfg index 9c572b9f0e8..b1fdc889afc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -59,7 +59,7 @@ install_requires = django-appconf==1.0.6 django-celery-results==2.5.1 django-filter==23.5 - django-imagekit==4.1.0 + django-imagekit==5.0.0 django-taggit==1.5.1 django-markdownify==0.9.3 django-mptt==0.15.0 From 5aabd6c4e020abf86ba970e77f910a8ef83e8b1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 13:23:05 +0100 Subject: [PATCH 074/284] build(deps): bump boto3 from 1.34.15 to 1.34.20 (#11850) * build(deps): bump boto3 from 1.34.15 to 1.34.20 Bumps [boto3](https://github.com/boto/boto3) from 1.34.15 to 1.34.20. - [Release notes](https://github.com/boto/boto3/releases) - [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/boto/boto3/compare/1.34.15...1.34.20) --- updated-dependencies: - dependency-name: boto3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 72d21b062ac..7cc2ac33ed2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -112,7 +112,7 @@ django-storages==1.14.2 dropbox==11.36.2 google-cloud-storage==2.14.0 google-cloud-core==2.4.1 -boto3==1.34.15 +boto3==1.34.20 # Django Caches python-memcached<=1.62 diff --git a/setup.cfg b/setup.cfg index b1fdc889afc..df21b587f38 100644 --- a/setup.cfg +++ b/setup.cfg @@ -137,7 +137,7 @@ install_requires = dropbox==11.36.2 google-cloud-storage==2.14.0 google-cloud-core==2.4.1 - boto3==1.34.15 + boto3==1.34.20 # Django Caches python-memcached<=1.62 From 59507841d4bbc594dcccce2ee291f297c6255fb6 Mon Sep 17 00:00:00 2001 From: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com> Date: Wed, 17 Jan 2024 18:37:56 +0100 Subject: [PATCH 075/284] =?UTF-8?q?[Fixes=20#11847]=20Implement=20the=20op?= =?UTF-8?q?tion=20to=20hide=20resources=20from=20search=20and=E2=80=A6=20(?= =?UTF-8?q?#11848)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Fixes #11847] Implement the option to hide resources from search and catalogue listing * [Fixes #11847] Fix broken test * [Fixes #11847] Implement the option to hide resources from search and catalogue listing * [Fixes #11847] Implement the option to hide resources from search and catalogue listing * [Fixes #11847] Implement the option to hide resources from search and catalogue listing * [Fixes #11847] Implement the option to hide resources from search and catalogue listing --- geonode/base/api/serializers.py | 1 + geonode/base/api/tests.py | 90 +++++++++++++++++++ geonode/base/api/views.py | 36 ++++++++ .../0089_resourcebase_advertised.py | 18 ++++ geonode/base/models.py | 6 +- .../templates/layouts/doc_panels.html | 5 ++ .../geoapps/templates/layouts/app_panels.html | 5 ++ geonode/layers/templates/layouts/panels.html | 5 ++ .../maps/templates/layouts/map_panels.html | 5 ++ 9 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 geonode/base/migrations/0089_resourcebase_advertised.py diff --git a/geonode/base/api/serializers.py b/geonode/base/api/serializers.py index 01887f4fe4e..4d40deef932 100644 --- a/geonode/base/api/serializers.py +++ b/geonode/base/api/serializers.py @@ -546,6 +546,7 @@ def __init__(self, *args, **kwargs): self.fields["share_count"] = serializers.CharField(required=False) self.fields["rating"] = serializers.CharField(required=False) self.fields["featured"] = serializers.BooleanField(required=False) + self.fields["advertised"] = serializers.BooleanField(required=False) self.fields["is_published"] = serializers.BooleanField(required=False, read_only=True) self.fields["is_approved"] = serializers.BooleanField(required=False, read_only=True) self.fields["detail_url"] = DetailUrlField(read_only=True) diff --git a/geonode/base/api/tests.py b/geonode/base/api/tests.py index 4833a955484..b764e7be1f6 100644 --- a/geonode/base/api/tests.py +++ b/geonode/base/api/tests.py @@ -2511,6 +2511,96 @@ def test_base_resources_return_download_links_for_datasets(self): download_url = response.json().get("resource").get("download_urls") self.assertEqual(expected_payload, download_url) + def test_api_should_return_all_resources_for_admin(self): + """ + Api whould return all resources even if advertised=False. + """ + url = reverse("base-resources-list") + self.client.login(username="admin", password="admin") + payload = self.client.get(url) + prev_count = payload.json().get("total") + # update all the resource to advertised=False + Dataset.objects.update(advertised=False) + url = reverse("base-resources-list") + payload = self.client.get(url) + new_count = payload.json().get("total") + self.assertEqual(new_count, prev_count) + + Dataset.objects.update(advertised=True) + + def test_api_should_return_advertised_resource_if_anonymous(self): + """ + If anonymous user, only the advertised resoruces whould be returned by the API. + """ + url = reverse("base-resources-list") + payload = self.client.get(url) + prev_count = payload.json().get("total") + # update all the resource to advertised=False + Dataset.objects.update(advertised=False) + url = reverse("base-resources-list") + payload = self.client.get(url) + new_count = payload.json().get("total") + self.assertNotEqual(new_count, prev_count) + + Dataset.objects.update(advertised=True) + + def test_api_should_return_only_the_advertised_false_where_user_is_owner(self): + """ + Api Should return all the resource with advertised=True + And the resource with advertised=False if is owner of it + """ + # defining a new user + test_user_for_api = get_user_model().objects.create(username="test_user_for_api", password="password") + # creating a new resource for the user with advertised=False + dataset = create_single_dataset(name="test_resource_for_api", owner=test_user_for_api, advertised=False) + url = reverse("base-resources-list") + self.client.force_login(test_user_for_api) + payload = self.client.get(f"{url}?limit=1000") + # the uuid of the dataset is in the returned payload + self.assertTrue(dataset.uuid in [k["uuid"] for k in payload.json()["resources"]]) + # bobby is not able to see the dataset belonging to the previous user + self.client.login(username="bobby", password="bob") + payload = self.client.get(url) + self.assertFalse(dataset.uuid in [k["uuid"] for k in payload.json()["resources"]]) + + # cleanup + dataset.delete() + test_user_for_api.delete() + + def test_api_should_filter_by_advertised_param(self): + """ + If anonymous user, only the advertised resoruces whould be returned by the API. + """ + dts = create_single_dataset("advertised_false") + dts.advertised = False + dts.save() + # should show the result based on the logic + url = reverse("base-resources-list") + payload = self.client.get(url) + prev_count = payload.json().get("total") + # the user can see only the advertised resources + self.assertEqual(ResourceBase.objects.filter(advertised=True).count(), prev_count) + + payload = self.client.get(f"{url}?advertised=True") + # so if advertised is True, we dont see the advertised=False resource + new_count = payload.json().get("total") + # recheck the count + self.assertEqual(new_count, prev_count) + + payload = self.client.get(f"{url}?advertised=False") + # so if advertised is False, we see only the resource with advertised==False + new_count = payload.json().get("total") + # recheck the count + self.assertEqual(new_count, 1) + + # if all is requested, we will see all the resources + payload = self.client.get(f"{url}?advertised=all") + new_count = payload.json().get("total") + # recheck the count + self.assertEqual(new_count, prev_count + 1) + + Dataset.objects.update(advertised=True) + class TestExtraMetadataBaseApi(GeoNodeBaseTestSupport): def setUp(self): diff --git a/geonode/base/api/views.py b/geonode/base/api/views.py index 2721fd7c195..375dc18b0cd 100644 --- a/geonode/base/api/views.py +++ b/geonode/base/api/views.py @@ -17,6 +17,7 @@ # ######################################################################### import ast +from distutils.util import strtobool import json import re @@ -372,6 +373,41 @@ def _filtered(self, request, filter): serializer = ResourceBaseSerializer(result_page, embed=True, many=True) return paginator.get_paginated_response({"resources": serializer.data}) + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + + # advertised + # if superuser, all resources will be visible, otherwise only the advertised once and + # the resource which the user is owner will be returned + # if the filter{advertised} is sent, is going to be used after the list of the + # resources is generated + user = request.user + try: + _filter = request.query_params.get("advertised", "None") + advertised = strtobool(_filter) if _filter.lower() != "all" else "all" + except Exception: + advertised = None + + if advertised is not None and advertised != "all": + queryset = queryset.filter(advertised=advertised) + else: + is_admin = user.is_superuser if user and user.is_authenticated else False + + if advertised == "all": + pass + elif not is_admin and user and not user.is_anonymous: + queryset = (queryset.filter(advertised=True) | queryset.filter(owner=user)).distinct() + elif not user or user.is_anonymous: + queryset = queryset.filter(advertised=True) + + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + @extend_schema( methods=["get"], responses={200: ResourceBaseSerializer(many=True)}, diff --git a/geonode/base/migrations/0089_resourcebase_advertised.py b/geonode/base/migrations/0089_resourcebase_advertised.py new file mode 100644 index 00000000000..a15fc7a7d1c --- /dev/null +++ b/geonode/base/migrations/0089_resourcebase_advertised.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2024-01-16 14:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0088_auto_20231019_1244'), + ] + + operations = [ + migrations.AddField( + model_name='resourcebase', + name='advertised', + field=models.BooleanField(default=True, help_text='If False, will hide the resource from search results and catalog listings', verbose_name='Advertised'), + ), + ] diff --git a/geonode/base/models.py b/geonode/base/models.py index 5768df93281..1ab5b3d7d35 100644 --- a/geonode/base/models.py +++ b/geonode/base/models.py @@ -850,7 +850,11 @@ class ResourceBase(PolymorphicModel, PermissionLevelMixin, ItemBase): is_approved = models.BooleanField( _("Approved"), default=True, help_text=_("Is this resource validated from a publisher or editor?") ) - + advertised = models.BooleanField( + _("Advertised"), + default=True, + help_text=_("If False, will hide the resource from search results and catalog listings"), + ) # fields necessary for the apis thumbnail_url = models.TextField(_("Thumbnail url"), null=True, blank=True) thumbnail_path = models.TextField(_("Thumbnail path"), null=True, blank=True) diff --git a/geonode/documents/templates/layouts/doc_panels.html b/geonode/documents/templates/layouts/doc_panels.html index d354531d314..815347b9d79 100644 --- a/geonode/documents/templates/layouts/doc_panels.html +++ b/geonode/documents/templates/layouts/doc_panels.html @@ -56,6 +56,7 @@ #mdeditor_form #id_resource-metadata_uploaded_preserve, #mdeditor_form #id_resource-is_approved, #mdeditor_form #id_resource-is_published, +#mdeditor_form #id_resource-advertised, #mdeditor_form #id_resource-featured { float: right; } @@ -649,6 +650,10 @@ {{ document_form.featured }} {% endif %} +
+ + {{ document_form.advertised }} +
diff --git a/geonode/geoapps/templates/layouts/app_panels.html b/geonode/geoapps/templates/layouts/app_panels.html index b255bbe6ecd..d7570ec34dd 100644 --- a/geonode/geoapps/templates/layouts/app_panels.html +++ b/geonode/geoapps/templates/layouts/app_panels.html @@ -55,6 +55,7 @@ #mdeditor_form #id_resource-metadata_uploaded_preserve, #mdeditor_form #id_resource-is_approved, #mdeditor_form #id_resource-is_published, +#mdeditor_form #id_resource-advertised, #mdeditor_form #id_resource-featured { float: right; } @@ -577,6 +578,10 @@ {{ geoapp_form.featured }} {% endif %} +
+ + {{ geoapp_form.advertised }} +
diff --git a/geonode/layers/templates/layouts/panels.html b/geonode/layers/templates/layouts/panels.html index 40a9c3e4321..adccd088e6a 100644 --- a/geonode/layers/templates/layouts/panels.html +++ b/geonode/layers/templates/layouts/panels.html @@ -59,6 +59,7 @@ #mdeditor_form #id_resource-metadata_uploaded_preserve, #mdeditor_form #id_resource-is_approved, #mdeditor_form #id_resource-is_published, +#mdeditor_form #id_resource-advertised, #mdeditor_form #id_resource-featured { float: right; } @@ -702,6 +703,10 @@ {{ dataset_form.featured }} {% endif %} +
+ + {{ dataset_form.advertised }} +
diff --git a/geonode/maps/templates/layouts/map_panels.html b/geonode/maps/templates/layouts/map_panels.html index b6cbea5ceec..e01da677c83 100644 --- a/geonode/maps/templates/layouts/map_panels.html +++ b/geonode/maps/templates/layouts/map_panels.html @@ -58,6 +58,7 @@ #mdeditor_form #id_resource-metadata_uploaded_preserve, #mdeditor_form #id_resource-is_approved, #mdeditor_form #id_resource-is_published, +#mdeditor_form #id_resource-advertised, #mdeditor_form #id_resource-featured { float: right; } @@ -627,6 +628,10 @@ {{ map_form.featured }} {% endif %} +
+ + {{ map_form.advertised }} +
From 6704ca98a27a5e38697f76cd1799e013ccafaddb Mon Sep 17 00:00:00 2001 From: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com> Date: Thu, 18 Jan 2024 11:48:45 +0100 Subject: [PATCH 076/284] [Fixes #11855] Reduce log level in donwload handler (#11856) --- geonode/layers/download_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geonode/layers/download_handler.py b/geonode/layers/download_handler.py index d969a0d3703..09eb032a53a 100644 --- a/geonode/layers/download_handler.py +++ b/geonode/layers/download_handler.py @@ -97,7 +97,7 @@ def get_resource(self): _("You do not have download permissions for this dataset."), ) except Exception as e: - logger.exception(e) + logger.debug(e) return self._resource From e68d8c536fb42f4dfdc990dae77782b37e226635 Mon Sep 17 00:00:00 2001 From: "G. Allegri" Date: Mon, 22 Jan 2024 16:35:08 +0100 Subject: [PATCH 077/284] recreated .mo file for italian --- geonode/locale/it/LC_MESSAGES/django.mo | Bin 20525 -> 161424 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/geonode/locale/it/LC_MESSAGES/django.mo b/geonode/locale/it/LC_MESSAGES/django.mo index e76a048452590e26ad196fe83e0625f9356e8fdf..cc42b56d611c29c8119d59fe9df28ca870d02a55 100644 GIT binary patch literal 161424 zcmce<2Yggj*S9?hpj1JMbQpR93B3r09-2VtAV`}eLo$$L!b}1pRa68EAlOkv6a^JU z#4du0Vi!@thKeXEDmFwx(eL`7y@mvp`+mOXd*AQ;euwLTYj0(S32J3yB5}q^Z9OB@8jzvV9dA-Dp$$+bS; z5coK}0G1{(2m`PO+zG!{`bwW~9{dTmgVV3``RIag9h9AWVFApem+I01I12V7^Px&U z-)*oX@{oIczVdJpY!6q$+VCY<4So*G!sGC4SZY0eh1Fp**bz2?6JbSo8I&E@!EW$H zh>LxtHefR>52de~(GSZYw}5BD4sZbM3VXmSU}yLeY!2h^_4$^-WcWOM4E_aY-{|CsBvr$Rjw~Q3#LKoonZOXOr8tNk$x2{3vYy#;aVs?kC?m@%AOCP z>^=ZBKYxePTl#4?&(47jk()x#JQ2H7|^|uYwyzdTGE(q1H8BpuQQYd>i!wK+dsQR^@cXlKi z+e5YA-Pi}pPXjG~B$VGLLB&Z9RQq#aJiHRB{xwi`tb`@tT_&%G>gN+s^3F0@^>0k++@O9a2iznEP`rxt#PyEKL_iP zz7J~r{(uc(#TVSTwuSO%U#R?vQ0w7zct#xY4(lSXc+u_ao1ohN8LA)0q5N^?PM_~w zSOZEP2Bj|@s{KMJ`>ul};a#v4+yJHLLD(2R4X4BXup1oll52Mb?2h~{>!3*jcH{=^t$z57lluYy`8Q;^Zo*_2L#NyC1OhZBXO!29$k!p%=ICOym<# z<5%icmtP0Ujzp+(y`jpDhiWGimW5GEp9iZVFM=w+3QFG=DEnW9qv2tw@$K`Pi^l*| zei*iZE1=@#8Q31~f}LTh*Ev(b?ofW53+3;pq3n7NY8+pI>i=6%c76fN!y{1f7Wam; zyE;^ULzCN>oMIdZ6-VQs>PMi)e?FA`E1>6JsC8$X<$nSd$3Izqg*RRQ>Otx23CqE; zP<995Suht?fOB9)cqLSSZh9Z=)F4$7W;VO#hZybT_L&k)~>cR9cJ+imd=)$i$0 z@puJP{rjQXdjhKcolyGsK-u>ptPH<|8js_!A}s&5D_;k;L2d!1cLJ2X3!&m*36y_U zL)Cu}s@-Ry^u7UQ*M6vY`4y^MrFUGMHiWH_TR_=29!mc-DElH%`sYE#;WAhT-eUQ8 z!4AlqpdTKD>hGEFIyJ@>zdZ}9z&D}d{{WP~{(|y< z<@a5`>O!^K6sle)llwsRXEdw^GobX(g0k-_%fB9~-dd>kHbL371FGC>Q2pKmW&c5_ z^54R2cpR#oj1OFTK2-gACNF}TPuIZ#^!p}Q2l=xP85{T)90ezS zzw_Hh*a~?wOoX4os<8ZLZk=ra)z4I@^pQ~Zg`n)6Zk!31BhQ8E=UE4wz158Mp~f*0 zHiZ44?3@bahdCy%gqn}*pzMDLs{QAn#%VXK55IvuV7brTycq=Lmq}3e{NlcL<4_vbLaqvBe=8`xouTGif0HM}GRR@5 z`m^A}aDmC~54rC;=fRgre-Qqpa^JY|$@$jB^K@8}^g^h1E{3vm32Y5-fztmf)VjAD z#>20m%6|jpm*Y@zRPj6aeoz};hujke;T|YIq#Sl}*$YbVWT^JCpyKT!ldpyH^IE8N zWi#vqzkt$H_j@<4jiBsr0o8tMDF3Cv*2Kpccn$L6AKbW~^CPj1+!$&;d{>M#*DfQpZS#-MRNOd|beSRTG;d>bmhKQ;Les5mL}v)kvY!qvzFq3k|n{2r>@ z5m*}j1vTEKk2rh$P=0O>)&K5L<@&%1Fb!&+kGJ&sPv#Q);jD+322SAn;6GsP*GPD0}xpmHP-*hhIY3{g=trj=A(?C_nXq zUEn~t6)uA6N9u8B-$1B-jDkv^3e}J4umPL})$S@NyVgM2{{WQzPeIM=ozM^8gX;e= zWBl*V-{p+8q4czXnwOnnb2t#zfHPnnxD0Ci?uWJDYf$Zd3FpC|VKR*T;p|xhW#>ky zes6~7z{jENdlRbNPoc);FjPN&gVI~-gv&o0s(gL81-6FL`vsJphhRNe?N3*(J(R!t zz!q>YRQXw!J`ZXgT?FNqB~boeVY~+_-k*jV&sX6E@Bmbtru;=r!a-2^Yv8%?aj1U$ z2N*Qw^$LjiLOO1XaHa zl-^-b?N5O6V-{4o0^>p`KP-or!t3D?STjD(cNIK~!#q>ScMD`m_N^!x=f&}5rJP;2 zK$#;*}nxwfz-OofW)iBR!46SjwQVF|byD$X7? zc_);fSE1II51{P%4k`|gTK*YjoE_Dm(i_5huq{;mVNiaW3}sIi)Os4M5**I_hHGyiU2h@3O5|sW+VM};D%z-;#C)lQ3oENttxD0tK zJRc4&ALpA4Z-UZu3@V=M^5fQ8I2vB4bl4e=IxEh5A6W)9|6YUg+pkdlEM3w0sUlQA zYna>!%KjvH8SDbp-)&IkUWHmW_dvz@w^05*V)6-C7r9g=*Y8G9<$6K&^L#i3J_fIZ z_0D$lV*^yX+o8(80oCpvDE*&7`RyCaKLORBQkCPp_46F4eszLcC%TDotN~Evva2|~ zv!LeRB~asj6;!`&vHW#VakmjFZXbryw;gI;z6(|V11NhxhqCJ@sQ4>MqtaU)YF%gw z)qWRC9|+aIaZquS4yFGxxE|gN)sJ4)oL>e&#oc6MK9s!+pz2=*TfvP`cJG7Ie*nsF z-$3a<0%b>;bDaKKPVySqd6I}NJc3!(OrX;5}8f{E}N%YO{2{7xvl-hrC` zpFpj9zeB}K3(La1@P!gxK@{JIlrJar$)VNQ9^25cjCAAeZ|hijnx@im+beT`hb0Bp@cBpXh_FE=-F?faU!eZC@8TqHov zmqD-v%!aMtbx`)~fb!p4Q2qTJ%D*KNoW3$p>r@S>^mfM1P;uHFsviSP9%}jHEPXOm zf3i#tL-}cjrC$zpF1f~dH3s>R{9Y)# zKZ1(qUtuCF(LBz3uTO@_$dh4rxD;w0ya5#-pTg#_a*H_c{j)1fL0$qo!WZEHcmm4L z{gPb#O@ob*mzw-A?18)oDsHML$NBs)87kh=pyDdeYJ z6<6z_*5l1kj-H{q4ANhha&6V&)U z38kmxxo-R`z#7b}`mi1{B{oD*2 z!grwh@hjB)i9gTnzh$82Wdo@8T0)I)SE%?I4plze^21Q`WggVHt%5552-LiI#rOe~ z{|-TKKT2`-R)>oFMo{HDK;`#=njfQ~)`!dBTzDgtebu@;dm2Km)8|6z83eue45;y& z303}bsC8@wRQzm!I%mHR<%i1MT>EvQ&SCZ{@n+?^#uBnOZ0GZV`FP$ z3Y6adQ1LR#50Hgk!M5g^M674<-Gomc~JJ>0h_~}CjSK6AlDe+;`@B4_3TnybGN-i~|}sy{ajarL*umdJ;p((4X&@3H-$ z_K8cN{PqMK3%`XLm%hWCy%)kR$XCFo@HykxP=2g5+}YI&YF(QKmA({e-fV}h;fGNE zEkDA|v(8Zc90L2mT$3M$YUeGe`S2Umdh#b!{8b<6_QeEaKPdfEpzOa9D$ag{iofGf z@l|$|<5|YaupQ~=K$SZmYW|NiIUgz>7Z{hp3z1ht&DY~l>u&sL=g<0(ZNoPfYJC_F zWkHd}?%o^G|OmKM#OP z&xEq?GN|?HYN&C)8)`o7g7W7PsCpH~x^YW@sy`4aeHv7JFM`^)wpspusC7JUoNK2B z)cWR!WndGi@n{9r{$wb7E{2*P3!(h58ET$C2j!<-P~-7FRQU=Qy8cyzl50c7OCzXw z?g?c_zU5y5wcaj+^6#xs@$xuSJ1;}U(_W~0`=I=O1Zq7hJwA?alk6KX59UIxYac6)`sB`Gomfm!-TMt@6^>ZkcA0|TSp9a<6YoW$-Jye|Uhtm5i)cWEJ zxcSinDy~~W#q%I2KMaBL>uA^=Mxf@^W~lOyTK?Nm@$fxV+#P|PVZC&>eqR8UKNm{> zLa4a89BMq4LFv8I^6!C)%X^{5=@qDW_{j1$cB2@cR z;37B;%Ko3AA6CqC?X`wukcUE@!`DNtZ#$vZ??ccJdjy?d0#I=<7plFtU|IM9)VO>B zW%tieaq>IV_{2?d=j&!r^JNIs_=TY2WCqmuEP?9h7UNTv{~T0%??UPS7;61F2-WUS zP~*l2aqsW(>%a+!lVBR$3cJGc*{=TiQ1ypHwLcLmo~J{N!%8UoABO7R6Hs>TfEu?~ zq1Kl-VK4ZV$t^;z-BdW5^tDjqeGDodD@=9sx)D^I4u{%Du7ZlUtx$1%0;*osX)YcT zp#0bcDvl;Y#obh>_3}EX_Wzk4$0k|&QmDAR8A{J;cn^FEUKhvT zzvQt_VDN8Y{DWL6LOS^aqMUX&zO)%}zQd$%o*C!;cNuqF!l9p{@y`Nc2`9)VFfeomZkCENuSCz*5Oyx)NyhU1aT&x`Z*g&|lHy_;YJ z`H}hVJ5Is^cP^UI>vL2uoH z^5d^i;}DN?y!F})-_!@ls#yIc4b6Inf>sQ&EoqyAy#`#g$3_b-F*9V~D z@Ho`|TlE&lR#5xK`Opt9f(_x#Q2l<|(m#TYkx#%Du;D6KKMgAWLQw126~?=v)|D5a z+Wi44?#kZk$~QCifr`@%sPZd}TP^)7m_&N@+gyGsTthsBp~kP$?at0rVrCEZ@)uC^wk1|G~>Rk(E?uvG`D18@0t&2CA zyv4X1%D+EA^{dL-IM3c5P&+pkI5-NmK2+G?){k?H^^8rS;<_c&`rHdPfTN(!J2Ro?$6|OETxnbj zRsJF44ygIF7wTN`HI$!@8LQmu=3z2aeqX5g8V%LXY$$zKL(R+Eq5ScP$)7^mc@(OA z+54QH+ED2&pxW;al|Rgw4qGEfq2}pbQ04B0(*HEnxPJ*X9wqO0zrWUplacdbXZRMB zedRW~c~%c$V;%PM0e4h`O!P{Xg*lLq2 zHwnrgbD`F=o1px(7Rs(|#y2c~A5{G>q3o&tkn?wAsQ7OVW&dC(|Bto&X(msHvj0-3 z^>!7Mzn_JgpYK48*UwPnTW_=5S6V^IcS4ol0@eSWP~*K1o&gU)_2UrKcpZT%_Xkw{ z$`3m>g7L`hq3U;nir21C=aIos<%dD_C*AV%pytUu;}WRxz7EPCw?X;)Ua0n8G46&M z#}AYdvcD)NV?w>%}dl>eCB_4D72SBxVA=JDsfb#FnQ2u`q zs^5=7+4BrcguCDk@HiX^uYKHo-#rKiAh&(OorCAVfhrFb4|Sf5^Zp+0JlF{NWvKD` z4ywJMjmM$lJ?<%Ie{(3iIzx@)5GZ>lLycDiYFuYSwR44~-wid79)ud_SE2g52Wp;t z4^_YH(@uXCsB(!={%a5A|87v@I2=k}K5PcBh7q{M zdJT4gXFTK9t)8$u@(QSScSHI8Bgl5)`y47BzcwC)>Tii{u0Iu_>`s6h?{+5lf~q$d zs{L_L{+SL{ZaGw3+zvJVTTFi6+5ak>|3 zoSriIb*OefhMJe(LG|xPsB%YP4_NxyINu9!0IbNwuK1j5ul^3#UN5NexBx01XF#>L z25LQd2x@-qfYSdClzs0*wSUm$U!d%df5Ek11GYnM4qL;CP~)%+s^2$4?GyJy&GQ$b z*B>Z7-x*8180VcAYC@%Vfhso?YMduQ#o_Hx zdd2m-I#j)mP=4%b90ye{3gcN9FNT`mb6<5_1l9gBsQ#{j8qbHJ`t>^0y7~iDxeBkj zajOSqS2C18dP4PUgfScXk>^77e>K#3;87?&JD|$H3)RmrN1haUlXAG z*AlLT-JtaBh8mXx#_yo?{t6Z6<==?&O{Cvv!`8_8Z@TY@cfc&Avm{_4Kp#nJhnxq3sP#%m0e z-tkcOO@l4r94P(wLB+>r$TsbJ3Ca(zLXGE#Q1yR>t>GC5+tvfxS znU z8Rz>F`BA8GTm6+w-vrgaXQ0-NcVH{{36xzGzjkq!1SJoGi7*7UKCFbQcL$U|?uQzm zm!Rz24ST?k;Z|7xkn8_GDE}XX8s~4I^!)`jFDiWF^dvyd%eE%>gBq7%Q2x6Bc7)kb zcHD01_d+i|p~mMmlRt!-$KM%!-@5!NP;u4}DvmlswbK)x5BppCN+`dtGI_mm6Vy8O zI8=Y0fogZRrSFIG>z6PYR{zeOH~PRN?C+hQ&ViB>pvEm3s@={|>;F(Fzm0?;m<83| zTTt=y0o1tt0M+kuKR7?uGB$+rTXU#5>IBu!NT_j~Z29>n&xP{iHBj^N4&!Dh|2z-X zzhlsg8>oI)_|fT4f_~%yQ0Y^l>|Fu}!4>cs_zBc_ul~u|b2n7Go1y&rqVaX8xPJ%A zPk%zidx@W&-uh5-0+gRpq1qi|`7@03q4Y0?^4qOY{of2#?>VS=eiv%pE`P+Wi%p>) zITgx(K`4JNgtOr?sQs$kFHV0OsCn22s((YE_USQD{>+D}e+iTwOQHODm!)rpD!0w@ zcfmK24?^|-(W5Rto`Tx1c0<+w1!`PN{OaPZB9z~|K;`#_T1SVOJQ5}#r$gCy6_h=9 znfxT2g8VkrI?&}e_kJ)0$`5Pc7`PRxoodINAL>EvkEu}Ok_qMK1+W2J4i&GPq1t~P zs@grLTh;r+1**`^@+)R6HMriqmTG@!mX7fEu?>Q1fvpRQ_lv zJt51V2{j(eq5QWA_J>=c)|WF%#C!2x7D{dmr6&PuoX&$9-_cO(`XtMr4i%@DS^D)* z<9iQOyu1wMr;nk=;R~p7`o-k9lJVX;cQ%y%1lS6;fz4pR!&?a1NXgHJ|^0qhY%<;=S|Nm2ez#+?ny-d&_vJ^<@X_3J=4lU=sf$Wh(a- zYy*3jiTCw_g;4E04&{%pp!|Ovsvo|xuAgO~Yn`DZ)3 zWXce`=IQrRN49O9H@TQgR(!-m}>cxp!8-z>6-;L4=#m@|C^xf zUJn(=k3o&gUMRaifvSI26<5v=<7Fn$2#*Mr7C zjFqdp@lAkgFAZwmPKJKC5X$a5p~m-dsP>+PD)%9j-6vooELF|fH|2{st(2KW==<^528nk3NI)N10mA5A~qNtrgUGr$Ff$4K?mT*b!a`AEa{Lme$e^cOKxERX5Jy7

Q1;$r@>+O4@-g6eO3I2Lw= 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⪙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 From 59fd76ed5fa9cdbfd0aec3477a1bc2a55d2909e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:11:17 +0100 Subject: [PATCH 078/284] build(deps): bump beautifulsoup4 from 4.12.2 to 4.12.3 (#11865) * build(deps): bump beautifulsoup4 from 4.12.2 to 4.12.3 Bumps [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) from 4.12.2 to 4.12.3. --- updated-dependencies: - dependency-name: beautifulsoup4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [Dependencies] Align setup.cfg to requirements.txt * Code formatting / validate --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- geonode/api/resourcebase_api.py | 6 ----- geonode/api/tests.py | 1 - geonode/base/api/permissions.py | 5 ---- geonode/base/api/serializers.py | 2 +- geonode/base/api/tests.py | 6 ++--- geonode/base/forms.py | 1 - geonode/base/tests.py | 1 - geonode/catalogue/metadataxsl/tests.py | 1 - geonode/context_processors.py | 18 +++++++------- geonode/documents/forms.py | 1 - geonode/documents/models.py | 1 - geonode/documents/views.py | 8 ++++--- geonode/geoapps/models.py | 1 - geonode/geoapps/tests.py | 1 - geonode/geoapps/views.py | 8 ++++--- geonode/geoserver/createlayer/tests.py | 1 - geonode/geoserver/tests/integration.py | 2 -- .../harvesting/harvesters/geonodeharvester.py | 24 +++++++++---------- geonode/layers/models.py | 4 ---- geonode/layers/tests.py | 1 - geonode/layers/views.py | 8 ++++--- geonode/maps/models.py | 2 -- geonode/maps/tests.py | 1 - geonode/maps/views.py | 8 ++++--- geonode/monitoring/models.py | 3 --- geonode/security/middleware.py | 1 - geonode/security/models.py | 1 - geonode/security/oauth2_grant_types.py | 1 - geonode/security/oauth2_servers.py | 1 - geonode/security/oauth2_validators.py | 1 - geonode/security/tests.py | 1 - geonode/services/models.py | 1 - geonode/tests/utils.py | 2 -- geonode/upload/upload.py | 1 - geonode/upload/utils.py | 1 - geonode/utils.py | 2 -- requirements.txt | 2 +- setup.cfg | 2 +- 38 files changed, 48 insertions(+), 84 deletions(-) diff --git a/geonode/api/resourcebase_api.py b/geonode/api/resourcebase_api.py index d3a17d08c8a..794a29c884e 100644 --- a/geonode/api/resourcebase_api.py +++ b/geonode/api/resourcebase_api.py @@ -593,7 +593,6 @@ def hydrate_title(self, bundle): class ResourceBaseResource(CommonModelApi): - """ResourceBase api""" class Meta(CommonMetaApi): @@ -607,7 +606,6 @@ class Meta(CommonMetaApi): class FeaturedResourceBaseResource(CommonModelApi): - """Only the featured resourcebases""" class Meta(CommonMetaApi): @@ -620,7 +618,6 @@ class Meta(CommonMetaApi): class LayerResource(CommonModelApi): - """Dataset API""" links = fields.ListField(attribute="links", null=True, use_in="all", default=[]) @@ -756,7 +753,6 @@ class Meta(CommonMetaApi): class MapResource(CommonModelApi): - """Maps API""" def build_filters(self, filters=None, ignore_bad_filters=False, **kwargs): @@ -822,7 +818,6 @@ class Meta(CommonMetaApi): class GeoAppResource(CommonModelApi): - """GeoApps API""" def format_objects(self, objects): @@ -874,7 +869,6 @@ class Meta(CommonMetaApi): class DocumentResource(CommonModelApi): - """Documents API""" def build_filters(self, filters=None, ignore_bad_filters=False, **kwargs): diff --git a/geonode/api/tests.py b/geonode/api/tests.py index 39a428c21fb..61c9214a2c5 100644 --- a/geonode/api/tests.py +++ b/geonode/api/tests.py @@ -386,7 +386,6 @@ def test_tags_lockdown(self): class SearchApiTests(ResourceTestCaseMixin, GeoNodeBaseTestSupport): - """Test the search""" # loading test thesausuri and initial data diff --git a/geonode/base/api/permissions.py b/geonode/base/api/permissions.py index 5dff5b1d33b..75d19ea36d3 100644 --- a/geonode/base/api/permissions.py +++ b/geonode/base/api/permissions.py @@ -41,7 +41,6 @@ class IsSelf(permissions.BasePermission): - """Grant permission only if the current instance is the request user. Used to allow users to edit their own account, nothing to others (even superusers). @@ -62,7 +61,6 @@ def has_object_permission(self, request, view, obj): class IsSelfOrReadOnly(IsSelf): - """Grant permissions if instance *IS* the request user, or read-only. Used to allow users to edit their own account, and others to read. """ @@ -75,7 +73,6 @@ def has_object_permission(self, request, view, obj): class IsSelfOrAdmin(IsSelf): - """Grant R/W to self and superusers/staff members. Deny others.""" def has_permission(self, request, view): @@ -94,7 +91,6 @@ def has_object_permission(self, request, view, obj): class IsSelfOrAdminOrReadOnly(IsSelfOrAdmin): - """Grant R/W to self and superusers/staff members, R/O to others.""" def has_permission(self, request, view): @@ -111,7 +107,6 @@ def has_object_permission(self, request, view, obj): class IsSelfOrAdminOrAuthenticatedReadOnly(IsSelfOrAdmin): - """Grant R/W to self and superusers/staff members, R/O to auth.""" def has_object_permission(self, request, view, obj): diff --git a/geonode/base/api/serializers.py b/geonode/base/api/serializers.py index 4d40deef932..261ce68c7c9 100644 --- a/geonode/base/api/serializers.py +++ b/geonode/base/api/serializers.py @@ -656,7 +656,7 @@ class Meta: "is_copyable", "blob", "metadata", - "executions" + "executions", # TODO # csw_typename, csw_schema, csw_mdsource, csw_insert_date, csw_type, csw_anytext, csw_wkt_geometry, # metadata_uploaded, metadata_uploaded_preserve, metadata_xml, diff --git a/geonode/base/api/tests.py b/geonode/base/api/tests.py index b764e7be1f6..037b882e1f4 100644 --- a/geonode/base/api/tests.py +++ b/geonode/base/api/tests.py @@ -1951,10 +1951,10 @@ def test_set_resource_thumbnail(self): self.assertEqual(response.json(), "The url must be of an image with format (png, jpeg or jpg)") # using Base64 data as an ASCII byte string - data[ - "file" - ] = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABHNCSVQICAgI\ + data["file"] = ( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABHNCSVQICAgI\ fAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAANSURBVAiZYzAxMfkPAALYAZzx61+bAAAAAElFTkSuQmCC" + ) with patch("geonode.base.models.is_monochromatic_image") as _mck: _mck.return_value = False response = self.client.put(url, data=data, format="json") diff --git a/geonode/base/forms.py b/geonode/base/forms.py index 8c6bd6bd816..8152da290e5 100644 --- a/geonode/base/forms.py +++ b/geonode/base/forms.py @@ -412,7 +412,6 @@ def build_attrs(self, base_attrs=None, extra_attrs=None, **kwargs): class ResourceBaseForm(TranslationModelForm, LinkedResourceForm): - """Base form for metadata, should be inherited by childres classes of ResourceBase""" abstract = forms.CharField(label=_("Abstract"), required=False, widget=TinyMCE()) diff --git a/geonode/base/tests.py b/geonode/base/tests.py index f3741425074..bcadaa07931 100644 --- a/geonode/base/tests.py +++ b/geonode/base/tests.py @@ -166,7 +166,6 @@ def test_add_missing_metadata_author_or_poc(self): class TestCreationOfContactRolesByDifferentInputTypes(ThumbnailTests): - """ Test that contact roles can be set as people profile """ diff --git a/geonode/catalogue/metadataxsl/tests.py b/geonode/catalogue/metadataxsl/tests.py index e09c1291a5f..bce9b262c6e 100644 --- a/geonode/catalogue/metadataxsl/tests.py +++ b/geonode/catalogue/metadataxsl/tests.py @@ -25,7 +25,6 @@ class MetadataXSLTest(GeoNodeBaseTestSupport): - """ Tests geonode.catalogue.metadataxsl app/module """ diff --git a/geonode/context_processors.py b/geonode/context_processors.py index e4ce5757521..1230a20cbf8 100644 --- a/geonode/context_processors.py +++ b/geonode/context_processors.py @@ -86,15 +86,17 @@ def resource_urls(request): EXIF_ENABLED=getattr(settings, "EXIF_ENABLED", False), FAVORITE_ENABLED=getattr(settings, "FAVORITE_ENABLED", False), SEARCH_FILTERS=getattr(settings, "SEARCH_FILTERS", False), - THESAURI_FILTERS=[ - t["name"] - for t in [ - settings.THESAURUS, + THESAURI_FILTERS=( + [ + t["name"] + for t in [ + settings.THESAURUS, + ] + if t.get("filter") ] - if t.get("filter") - ] - if hasattr(settings, "THESAURUS") - else [t.identifier for t in thesaurus], + if hasattr(settings, "THESAURUS") + else [t.identifier for t in thesaurus] + ), MAP_CLIENT_USE_CROSS_ORIGIN_CREDENTIALS=getattr(settings, "MAP_CLIENT_USE_CROSS_ORIGIN_CREDENTIALS", False), SHOW_PROFILE_EMAIL=getattr(settings, "SHOW_PROFILE_EMAIL", False), OGC_SERVER=getattr(settings, "OGC_SERVER", None), diff --git a/geonode/documents/forms.py b/geonode/documents/forms.py index 42671e98172..7568dc6863b 100644 --- a/geonode/documents/forms.py +++ b/geonode/documents/forms.py @@ -117,7 +117,6 @@ class DocumentDescriptionForm(forms.Form): class DocumentCreateForm(TranslationModelForm): - """ The document upload form. """ diff --git a/geonode/documents/models.py b/geonode/documents/models.py index d7650f5b0ae..e4815dc8da9 100644 --- a/geonode/documents/models.py +++ b/geonode/documents/models.py @@ -37,7 +37,6 @@ class Document(ResourceBase): - """ A document is any kind of information that can be attached to a map such as pdf, images, videos, xls... """ diff --git a/geonode/documents/views.py b/geonode/documents/views.py index ca72be2f6a4..49a4c605b1b 100644 --- a/geonode/documents/views.py +++ b/geonode/documents/views.py @@ -322,9 +322,11 @@ def document_metadata( category_form = CategoryForm( request.POST, prefix="category_choice_field", - initial=int(request.POST["category_choice_field"]) - if "category_choice_field" in request.POST and request.POST["category_choice_field"] - else None, + initial=( + int(request.POST["category_choice_field"]) + if "category_choice_field" in request.POST and request.POST["category_choice_field"] + else None + ), ) if hasattr(settings, "THESAURUS"): diff --git a/geonode/geoapps/models.py b/geonode/geoapps/models.py index db57d96f3e3..a3edfff60e1 100644 --- a/geonode/geoapps/models.py +++ b/geonode/geoapps/models.py @@ -31,7 +31,6 @@ class GeoApp(ResourceBase): - """ A GeoApp it is a generic container for every client applications the user might want to create or define. diff --git a/geonode/geoapps/tests.py b/geonode/geoapps/tests.py index c42c1733af6..c4566d604e2 100644 --- a/geonode/geoapps/tests.py +++ b/geonode/geoapps/tests.py @@ -31,7 +31,6 @@ class GeoAppTests(GeoNodeBaseTestSupport): - """Tests geonode.geoapps module""" fixtures = ["initial_data.json", "group_test_data.json", "default_oauth_apps.json"] diff --git a/geonode/geoapps/views.py b/geonode/geoapps/views.py index f83457ae67e..6cb6814bb25 100644 --- a/geonode/geoapps/views.py +++ b/geonode/geoapps/views.py @@ -216,9 +216,11 @@ def geoapp_metadata( category_form = CategoryForm( request.POST, prefix="category_choice_field", - initial=int(request.POST["category_choice_field"]) - if "category_choice_field" in request.POST and request.POST["category_choice_field"] - else None, + initial=( + int(request.POST["category_choice_field"]) + if "category_choice_field" in request.POST and request.POST["category_choice_field"] + else None + ), ) if hasattr(settings, "THESAURUS"): diff --git a/geonode/geoserver/createlayer/tests.py b/geonode/geoserver/createlayer/tests.py index 87d40a4d56d..eb18bc45b34 100644 --- a/geonode/geoserver/createlayer/tests.py +++ b/geonode/geoserver/createlayer/tests.py @@ -33,7 +33,6 @@ class CreateLayerCoreTest(GeoNodeBaseTestSupport): - """ Test createlayer application. """ diff --git a/geonode/geoserver/tests/integration.py b/geonode/geoserver/tests/integration.py index 7fd155210ca..39d8040e80f 100644 --- a/geonode/geoserver/tests/integration.py +++ b/geonode/geoserver/tests/integration.py @@ -56,7 +56,6 @@ def _log(msg, *args): @override_settings(SITEURL="http://localhost:8001/") class GeoNodeGeoServerSync(GeoNodeLiveTestSupport): - """ Tests GeoNode/GeoServer syncronization """ @@ -104,7 +103,6 @@ def test_set_attributes_from_geoserver(self): @override_settings(SITEURL="http://localhost:8002/") class GeoNodeGeoServerCapabilities(GeoNodeLiveTestSupport): - """ Tests GeoNode/GeoServer GetCapabilities per layer, user, category and map """ diff --git a/geonode/harvesting/harvesters/geonodeharvester.py b/geonode/harvesting/harvesters/geonodeharvester.py index 0f9de873476..dad1571b920 100644 --- a/geonode/harvesting/harvesters/geonodeharvester.py +++ b/geonode/harvesting/harvesters/geonodeharvester.py @@ -433,14 +433,14 @@ def _get_resource_list_params(self, offset: typing.Optional[int] = 0) -> typing. result["filter{title.icontains}"] = self.resource_title_filter if self.start_date_filter is not None: start_date = dateutil.parser.parse(self.start_date_filter) - result[ - "filter{date.gte}" - ] = f"{start_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + result["filter{date.gte}"] = ( + f"{start_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + ) if self.end_date_filter is not None: end_date = dateutil.parser.parse(self.end_date_filter) - result[ - "filter{date.lte}" - ] = f"{end_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + result["filter{date.lte}"] = ( + f"{end_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + ) if self.keywords_filter is not None: result["filter{keywords.slug.in}"] = self.keywords_filter if self.categories_filter is not None: @@ -738,14 +738,14 @@ def _get_resource_list_params(self, offset: typing.Optional[int] = 0) -> typing. result["title__icontains"] = self.resource_title_filter if self.start_date_filter is not None: start_date = dateutil.parser.parse(self.start_date_filter) - result[ - "date__gte" - ] = f"{start_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + result["date__gte"] = ( + f"{start_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + ) if self.end_date_filter is not None: end_date = dateutil.parser.parse(self.end_date_filter) - result[ - "date__lte" - ] = f"{end_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + result["date__lte"] = ( + f"{end_date.astimezone(dt.timezone.utc).replace(microsecond=0).isoformat().split('+')[0]}Z" + ) if self.keywords_filter is not None: result["keywords__slug__in"] = ",".join(self.keywords_filter) if self.categories_filter is not None: diff --git a/geonode/layers/models.py b/geonode/layers/models.py index 22eb2eff0cd..bed803f7220 100644 --- a/geonode/layers/models.py +++ b/geonode/layers/models.py @@ -61,7 +61,6 @@ class Style(models.Model, PermissionLevelMixin): - """Model for storing styles.""" name = models.CharField(_("style name"), max_length=255, unique=True) @@ -103,7 +102,6 @@ def __init__(self): class Dataset(ResourceBase): - """ Dataset (inherits ResourceBase fields) """ @@ -376,7 +374,6 @@ def view_count_up(self, user, do_local=False): class AttributeManager(models.Manager): - """Helper class to access filtered attributes""" def visible(self): @@ -384,7 +381,6 @@ def visible(self): class Attribute(models.Model): - """ Auxiliary model for storing layer attributes. diff --git a/geonode/layers/tests.py b/geonode/layers/tests.py index c4d0bf88f0b..bc7d6ff27b6 100644 --- a/geonode/layers/tests.py +++ b/geonode/layers/tests.py @@ -90,7 +90,6 @@ class DatasetsTest(GeoNodeBaseTestSupport): - """Tests geonode.layers app/module""" type = "dataset" diff --git a/geonode/layers/views.py b/geonode/layers/views.py index f7729d2ce09..8b0c585af9c 100644 --- a/geonode/layers/views.py +++ b/geonode/layers/views.py @@ -414,9 +414,11 @@ def dataset_metadata( category_form = CategoryForm( request.POST, prefix="category_choice_field", - initial=int(request.POST["category_choice_field"]) - if "category_choice_field" in request.POST and request.POST["category_choice_field"] - else None, + initial=( + int(request.POST["category_choice_field"]) + if "category_choice_field" in request.POST and request.POST["category_choice_field"] + else None + ), ) if not category_form.is_valid(): logger.error(f"Dataset Category form is not valid: {category_form.errors}") diff --git a/geonode/maps/models.py b/geonode/maps/models.py index 546b71fb8ce..ad7630abc99 100644 --- a/geonode/maps/models.py +++ b/geonode/maps/models.py @@ -37,7 +37,6 @@ class Map(ResourceBase): - """ A Map aggregates several layers together and annotates them with a viewport configuration. @@ -231,7 +230,6 @@ class Meta(ResourceBase.Meta): class MapLayer(models.Model): - """ The MapLayer model represents a layer included in a map. This doesn't just identify the dataset, but also extra options such as which style to load diff --git a/geonode/maps/tests.py b/geonode/maps/tests.py index fdb5d74bb42..9d0748a8db2 100644 --- a/geonode/maps/tests.py +++ b/geonode/maps/tests.py @@ -79,7 +79,6 @@ class MapsTest(NotificationsTestsHelper): - """Tests geonode.maps app/module""" fixtures = ["initial_data.json", "group_test_data.json", "default_oauth_apps.json"] diff --git a/geonode/maps/views.py b/geonode/maps/views.py index bc4271b8799..a82c1741e74 100644 --- a/geonode/maps/views.py +++ b/geonode/maps/views.py @@ -107,9 +107,11 @@ def map_metadata( category_form = CategoryForm( request.POST, prefix="category_choice_field", - initial=int(request.POST["category_choice_field"]) - if "category_choice_field" in request.POST and request.POST["category_choice_field"] - else None, + initial=( + int(request.POST["category_choice_field"]) + if "category_choice_field" in request.POST and request.POST["category_choice_field"] + else None + ), ) if hasattr(settings, "THESAURUS"): diff --git a/geonode/monitoring/models.py b/geonode/monitoring/models.py index 18f302c73dc..dd28350f81a 100644 --- a/geonode/monitoring/models.py +++ b/geonode/monitoring/models.py @@ -69,7 +69,6 @@ def get_geoip(): class Host(models.Model): - """ Describes one physical instance """ @@ -83,7 +82,6 @@ def __str__(self): class ServiceType(models.Model): - """ Service Type list """ @@ -129,7 +127,6 @@ def is_system_monitor(self): class Service(models.Model): - """ Service is a entity describing deployed processes. """ diff --git a/geonode/security/middleware.py b/geonode/security/middleware.py index 07fa80ed745..82bdc6ea9b3 100644 --- a/geonode/security/middleware.py +++ b/geonode/security/middleware.py @@ -70,7 +70,6 @@ class LoginRequiredMiddleware(MiddlewareMixin): - """ Requires a user to be logged in to access any page that is not white-listed. diff --git a/geonode/security/models.py b/geonode/security/models.py index b89a00c2782..2a878368827 100644 --- a/geonode/security/models.py +++ b/geonode/security/models.py @@ -57,7 +57,6 @@ class PermissionLevelError(Exception): class PermissionLevelMixin: - """ Mixin for adding "Permission Level" methods to a model class -- eg role systems where a diff --git a/geonode/security/oauth2_grant_types.py b/geonode/security/oauth2_grant_types.py index 63b865269a6..7ab3575fca1 100644 --- a/geonode/security/oauth2_grant_types.py +++ b/geonode/security/oauth2_grant_types.py @@ -76,7 +76,6 @@ def code_challenge_method_plain(verifier, challenge): class OAuth2AuthorizationCodeGrant(GrantTypeBase): - """`Authorization Code Grant`_ The authorization code grant type is used to obtain both access diff --git a/geonode/security/oauth2_servers.py b/geonode/security/oauth2_servers.py index ead8a714e5b..5a1890aefd6 100644 --- a/geonode/security/oauth2_servers.py +++ b/geonode/security/oauth2_servers.py @@ -46,7 +46,6 @@ class OIDCServer( AuthorizationEndpoint, IntrospectEndpoint, TokenEndpoint, ResourceEndpoint, RevocationEndpoint, UserInfoEndpoint ): - """An all-in-one endpoint featuring all four major grant types.""" def __init__( diff --git a/geonode/security/oauth2_validators.py b/geonode/security/oauth2_validators.py index 0b93b6ed0c6..c5b0bfea230 100644 --- a/geonode/security/oauth2_validators.py +++ b/geonode/security/oauth2_validators.py @@ -34,7 +34,6 @@ class OIDCValidator(OAuth2Validator): - """e.g. Check username and password correspond to a valid and active User, if fails try Facebook token authentication diff --git a/geonode/security/tests.py b/geonode/security/tests.py index f80a0ef8a52..433f4aa6de7 100644 --- a/geonode/security/tests.py +++ b/geonode/security/tests.py @@ -104,7 +104,6 @@ def write(self, buf): class SecurityTests(ResourceTestCaseMixin, GeoNodeBaseTestSupport): - """ Tests for the Geonode security app. """ diff --git a/geonode/services/models.py b/geonode/services/models.py index db56adba495..c6ccf3874b4 100644 --- a/geonode/services/models.py +++ b/geonode/services/models.py @@ -118,7 +118,6 @@ class Meta: class ServiceProfileRole(models.Model): - """ ServiceProfileRole is an intermediate model to bind Profiles and Services and apply roles. """ diff --git a/geonode/tests/utils.py b/geonode/tests/utils.py index 4466f76a6e2..b861f2a0e8a 100644 --- a/geonode/tests/utils.py +++ b/geonode/tests/utils.py @@ -62,7 +62,6 @@ def upload_step(step=None): class Client(DjangoTestClient): - """client for making http requests""" def __init__(self, url, user, passwd, *args, **kwargs): @@ -310,7 +309,6 @@ def check_dataset(uploaded): from pinax.notifications.models import NoticeQueueBatch class NotificationsTestsHelper(GeoNodeBaseTestSupport): - """ Helper class for notification tests This provides: diff --git a/geonode/upload/upload.py b/geonode/upload/upload.py index 0777cb83d3a..4a3feb25d7b 100644 --- a/geonode/upload/upload.py +++ b/geonode/upload/upload.py @@ -39,7 +39,6 @@ class UploaderSession: - """All objects held must be able to survive a good pickling""" # the gsimporter session object diff --git a/geonode/upload/utils.py b/geonode/upload/utils.py index d81f63e9ba5..ea8189e47b9 100644 --- a/geonode/upload/utils.py +++ b/geonode/upload/utils.py @@ -111,7 +111,6 @@ def _log(msg, *args, level="error"): class JSONResponse(HttpResponse): - """JSON response class.""" def __init__(self, obj="", json_opts=None, content_type="application/json", *args, **kwargs): diff --git a/geonode/utils.py b/geonode/utils.py index d15dafe3162..ffa931c3cf4 100755 --- a/geonode/utils.py +++ b/geonode/utils.py @@ -137,7 +137,6 @@ class ServerDoesNotExist(Exception): class OGC_Server(object): # LGTM: @property will not work in old-style classes - """ OGC Server object. """ @@ -211,7 +210,6 @@ def __str__(self): class OGC_Servers_Handler: - """ OGC Server Settings Convenience dict. """ diff --git a/requirements.txt b/requirements.txt index 7cc2ac33ed2..e98d4b45c4a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ Django==3.2.23 # Other amqp==5.2.0 -beautifulsoup4==4.12.2 +beautifulsoup4==4.12.3 httplib2<0.22.1 hyperlink==21.0.0 idna>=2.5,<3.7 diff --git a/setup.cfg b/setup.cfg index df21b587f38..953c86b001d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,7 +32,7 @@ install_requires = # Other amqp==5.2.0 - beautifulsoup4==4.12.2 + beautifulsoup4==4.12.3 httplib2<0.22.1 hyperlink==21.0.0 idna>=2.5,<3.7 From abcf317cba6af7d16afb428d10a01767ed65acfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:26:49 +0100 Subject: [PATCH 079/284] build(deps): bump black from 23.12.1 to 24.1.1 (#11899) * build(deps): bump black from 23.12.1 to 24.1.1 Bumps [black](https://github.com/psf/black) from 23.12.1 to 24.1.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.12.1...24.1.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e98d4b45c4a..80e172afc6f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -152,7 +152,7 @@ invoke==2.2.0 coverage==7.4.0 requests-toolbelt==1.0.0 flake8==7.0.0 -black==23.12.1 +black==24.1.1 pytest==7.4.4 pytest-bdd==7.0.1 splinter==0.20.1 diff --git a/setup.cfg b/setup.cfg index 953c86b001d..9d0e5f611c8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -177,7 +177,7 @@ install_requires = coverage==7.4.0 requests-toolbelt==1.0.0 flake8==7.0.0 - black==23.12.1 + black==24.1.1 pytest==7.4.4 pytest-bdd==7.0.1 splinter==0.20.1 From 714ae2f4b70e26a61a8475c9f4926d638e76f47b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:48:53 +0100 Subject: [PATCH 080/284] build(deps): bump boto3 from 1.34.20 to 1.34.30 (#11905) * build(deps): bump boto3 from 1.34.20 to 1.34.30 Bumps [boto3](https://github.com/boto/boto3) from 1.34.20 to 1.34.30. - [Release notes](https://github.com/boto/boto3/releases) - [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/boto/boto3/compare/1.34.20...1.34.30) --- updated-dependencies: - dependency-name: boto3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 80e172afc6f..63aa73ea3ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -112,7 +112,7 @@ django-storages==1.14.2 dropbox==11.36.2 google-cloud-storage==2.14.0 google-cloud-core==2.4.1 -boto3==1.34.20 +boto3==1.34.30 # Django Caches python-memcached<=1.62 diff --git a/setup.cfg b/setup.cfg index 9d0e5f611c8..2a12ae08551 100644 --- a/setup.cfg +++ b/setup.cfg @@ -137,7 +137,7 @@ install_requires = dropbox==11.36.2 google-cloud-storage==2.14.0 google-cloud-core==2.4.1 - boto3==1.34.20 + boto3==1.34.30 # Django Caches python-memcached<=1.62 From 3c9569134f54006c4d9e96a5fae0a81f2ea00ae5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:51:53 +0100 Subject: [PATCH 081/284] build(deps): bump coverage from 7.4.0 to 7.4.1 (#11897) * build(deps): bump coverage from 7.4.0 to 7.4.1 Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.4.0 to 7.4.1. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.4.0...7.4.1) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 63aa73ea3ac..93b2cd21174 100644 --- a/requirements.txt +++ b/requirements.txt @@ -149,7 +149,7 @@ docker==7.0.0 invoke==2.2.0 # tests -coverage==7.4.0 +coverage==7.4.1 requests-toolbelt==1.0.0 flake8==7.0.0 black==24.1.1 diff --git a/setup.cfg b/setup.cfg index 2a12ae08551..188c60737c4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -174,7 +174,7 @@ install_requires = invoke==2.2.0 # tests - coverage==7.4.0 + coverage==7.4.1 requests-toolbelt==1.0.0 flake8==7.0.0 black==24.1.1 From 6a05c694e9f94c0103d04975bd9975868a1127bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 11:56:29 +0100 Subject: [PATCH 082/284] build(deps): bump django-mptt from 0.15.0 to 0.16.0 (#11868) * build(deps): bump django-mptt from 0.15.0 to 0.16.0 Bumps [django-mptt](https://github.com/django-mptt/django-mptt) from 0.15.0 to 0.16.0. - [Release notes](https://github.com/django-mptt/django-mptt/releases) - [Changelog](https://github.com/django-mptt/django-mptt/blob/main/CHANGELOG.rst) - [Commits](https://github.com/django-mptt/django-mptt/compare/0.15...0.16) --- updated-dependencies: - dependency-name: django-mptt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 93b2cd21174..fe6299863fb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,7 +36,7 @@ django-filter==23.5 django-imagekit==5.0.0 django-taggit==1.5.1 django-markdownify==0.9.3 -django-mptt==0.15.0 +django-mptt==0.16.0 django-modeltranslation>=0.11,<0.19.0 django-treebeard==4.7 django-guardian<2.4.1 diff --git a/setup.cfg b/setup.cfg index 188c60737c4..a6202e7fd17 100644 --- a/setup.cfg +++ b/setup.cfg @@ -62,7 +62,7 @@ install_requires = django-imagekit==5.0.0 django-taggit==1.5.1 django-markdownify==0.9.3 - django-mptt==0.15.0 + django-mptt==0.16.0 django-modeltranslation>=0.11,<0.19.0 django-treebeard==4.7 django-guardian<2.4.1 From f27a30b655664b92a14492a3bb832c8ed8d33564 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 15:13:42 +0100 Subject: [PATCH 083/284] build(deps): bump drf-spectacular from 0.27.0 to 0.27.1 (#11870) * build(deps): bump drf-spectacular from 0.27.0 to 0.27.1 Bumps [drf-spectacular](https://github.com/tfranzel/drf-spectacular) from 0.27.0 to 0.27.1. - [Release notes](https://github.com/tfranzel/drf-spectacular/releases) - [Changelog](https://github.com/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tfranzel/drf-spectacular/compare/0.27.0...0.27.1) --- updated-dependencies: - dependency-name: drf-spectacular dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index fe6299863fb..7afad3d9c27 100644 --- a/requirements.txt +++ b/requirements.txt @@ -79,7 +79,7 @@ djangorestframework-gis==1.0 djangorestframework-guardian==0.3.0 drf-extensions==0.7.1 drf-writable-nested==0.7.0 -drf-spectacular==0.27.0 +drf-spectacular==0.27.1 dynamic-rest==2.1.2 Markdown==3.5.2 diff --git a/setup.cfg b/setup.cfg index a6202e7fd17..831b6329b7d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -105,7 +105,7 @@ install_requires = djangorestframework-guardian==0.3.0 drf-extensions==0.7.1 drf-writable-nested==0.7.0 - drf-spectacular==0.27.0 + drf-spectacular==0.27.1 dynamic-rest==2.1.2 Markdown==3.5.2 From 43c7d9d59aa554725bcdbe2f2f020311f999a776 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:48:49 +0100 Subject: [PATCH 084/284] build(deps): bump jsonschema from 4.20.0 to 4.21.1 (#11867) * build(deps): bump jsonschema from 4.20.0 to 4.21.1 Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.20.0 to 4.21.1. - [Release notes](https://github.com/python-jsonschema/jsonschema/releases) - [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst) - [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.20.0...v4.21.1) --- updated-dependencies: - dependency-name: jsonschema dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 7afad3d9c27..8c9118abe79 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ vine==5.1.0 tqdm==4.66.1 Deprecated==1.2.14 wrapt==1.16.0 -jsonschema==4.20.0 +jsonschema==4.21.1 zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 diff --git a/setup.cfg b/setup.cfg index 831b6329b7d..ee18cf76414 100644 --- a/setup.cfg +++ b/setup.cfg @@ -46,7 +46,7 @@ install_requires = tqdm==4.66.1 Deprecated==1.2.14 wrapt==1.16.0 - jsonschema==4.20.0 + jsonschema==4.21.1 zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 From beea873151fb453cac2e06290a616b7ae374bc5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 18:38:09 +0100 Subject: [PATCH 085/284] build(deps): bump psutil from 5.9.7 to 5.9.8 (#11869) * build(deps): bump psutil from 5.9.7 to 5.9.8 Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.7 to 5.9.8. - [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst) - [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.7...release-5.9.8) --- updated-dependencies: - dependency-name: psutil dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 8c9118abe79..f4270939cbd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -132,7 +132,7 @@ pylibmc==1.6.3 sherlock==0.4.1 # required by monitoring -psutil==5.9.7 +psutil==5.9.8 django-cors-headers==4.3.1 user-agents django-user-agents diff --git a/setup.cfg b/setup.cfg index ee18cf76414..99723aef62a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -157,7 +157,7 @@ install_requires = sherlock==0.4.1 # required by monitoring - psutil==5.9.7 + psutil==5.9.8 django-cors-headers==4.3.1 user-agents django-user-agents From 07e350e7dab412451d53b3238a3d10a2371d8b91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 19:27:10 +0100 Subject: [PATCH 086/284] build(deps): bump pymupdf from 1.23.14 to 1.23.20 (#11906) * build(deps): bump pymupdf from 1.23.14 to 1.23.20 Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.23.14 to 1.23.20. - [Release notes](https://github.com/pymupdf/pymupdf/releases) - [Changelog](https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt) - [Commits](https://github.com/pymupdf/pymupdf/compare/1.23.14...1.23.20) --- updated-dependencies: - dependency-name: pymupdf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index f4270939cbd..8f26c9d5b49 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ zipstream-new==1.1.8 schema==0.7.5 rdflib==6.3.2 smart_open==6.4.0 -PyMuPDF==1.23.14 +PyMuPDF==1.23.20 pathvalidate==3.2.0 # Django Apps diff --git a/setup.cfg b/setup.cfg index 99723aef62a..422e70dfafd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -51,7 +51,7 @@ install_requires = schema==0.7.5 rdflib==6.3.2 smart_open==6.4.0 - PyMuPDF==1.23.14 + PyMuPDF==1.23.20 pathvalidate==3.2.0 # Django Apps From e608505f1accc65470dfca5adce77c8df39d460c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 08:53:37 +0100 Subject: [PATCH 087/284] build(deps): bump pyopenssl from 23.3.0 to 24.0.0 (#11894) * build(deps): bump pyopenssl from 23.3.0 to 24.0.0 Bumps [pyopenssl](https://github.com/pyca/pyopenssl) from 23.3.0 to 24.0.0. - [Changelog](https://github.com/pyca/pyopenssl/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/pyopenssl/compare/23.3.0...24.0.0) --- updated-dependencies: - dependency-name: pyopenssl dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 8f26c9d5b49..02a3c0e5bcc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -49,7 +49,7 @@ django-uuid-upload-path==1.0.0 django-widget-tweaks==1.5.0 django-sequences==2.9 oauthlib==3.2.2 -pyopenssl==23.3.0 +pyopenssl==24.0.0 pyjwt==2.8.0 # geopython dependencies diff --git a/setup.cfg b/setup.cfg index 422e70dfafd..5fb390d47a0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -75,7 +75,7 @@ install_requires = django-widget-tweaks==1.5.0 django-sequences==2.9 oauthlib==3.2.2 - pyopenssl==23.3.0 + pyopenssl==24.0.0 pyjwt==2.8.0 # geopython dependencies From 82812778d26942e36b2ef51c56aa4f7f7696512f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 09:36:56 +0100 Subject: [PATCH 088/284] build(deps): bump pytest from 7.4.4 to 8.0.0 (#11896) * build(deps): bump pytest from 7.4.4 to 8.0.0 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.4 to 8.0.0. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.4...8.0.0) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * build(deps): bump pytest from 7.4.4 to 8.0.0 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.4 to 8.0.0. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.4...8.0.0) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 02a3c0e5bcc..a76bc3875bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -153,7 +153,7 @@ coverage==7.4.1 requests-toolbelt==1.0.0 flake8==7.0.0 black==24.1.1 -pytest==7.4.4 +pytest==8.0.0 pytest-bdd==7.0.1 splinter==0.20.1 pytest-splinter==3.3.2 diff --git a/setup.cfg b/setup.cfg index 5fb390d47a0..90203b31ce0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -178,7 +178,7 @@ install_requires = requests-toolbelt==1.0.0 flake8==7.0.0 black==24.1.1 - pytest==7.4.4 + pytest==8.0.0 pytest-bdd==7.0.1 splinter==0.20.1 pytest-splinter==3.3.2 From 6125725c233386f0697b81dd9c148d496f92b68a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 10:20:14 +0100 Subject: [PATCH 089/284] build(deps): bump python-slugify from 8.0.1 to 8.0.2 (#11898) * build(deps): bump python-slugify from 8.0.1 to 8.0.2 Bumps [python-slugify](https://github.com/un33k/python-slugify) from 8.0.1 to 8.0.2. - [Changelog](https://github.com/un33k/python-slugify/blob/master/CHANGELOG.md) - [Commits](https://github.com/un33k/python-slugify/compare/v8.0.1...v8.0.2) --- updated-dependencies: - dependency-name: python-slugify dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index a76bc3875bf..ee3feec4093 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ hyperlink==21.0.0 idna>=2.5,<3.7 urllib3==1.26.18 Paver==1.3.4 -python-slugify==8.0.1 +python-slugify==8.0.2 decorator==5.1.1 celery==5.3.6 kombu==5.3.5 diff --git a/setup.cfg b/setup.cfg index 90203b31ce0..c8ce95af799 100644 --- a/setup.cfg +++ b/setup.cfg @@ -38,7 +38,7 @@ install_requires = idna>=2.5,<3.7 urllib3==1.26.18 Paver==1.3.4 - python-slugify==8.0.1 + python-slugify==8.0.2 decorator==5.1.1 celery==5.3.6 kombu==5.3.5 From 4bc8e5f564c7b401cdcf984af03c5006a2176977 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 11:04:19 +0100 Subject: [PATCH 090/284] build(deps): bump splinter from 0.20.1 to 0.21.0 (#11871) * build(deps): bump splinter from 0.20.1 to 0.21.0 Bumps [splinter](https://github.com/cobrateam/splinter) from 0.20.1 to 0.21.0. - [Release notes](https://github.com/cobrateam/splinter/releases) - [Changelog](https://github.com/cobrateam/splinter/blob/master/docs/news.rst) - [Commits](https://github.com/cobrateam/splinter/compare/0.20.1...0.21.0) --- updated-dependencies: - dependency-name: splinter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * - Align setup.cfg to requirements.txt --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: afabiani --- requirements.txt | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index ee3feec4093..a83c029ce96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -155,7 +155,7 @@ flake8==7.0.0 black==24.1.1 pytest==8.0.0 pytest-bdd==7.0.1 -splinter==0.20.1 +splinter==0.21.0 pytest-splinter==3.3.2 pytest-django==4.7.0 setuptools>=65.5.1,<69.1.0 diff --git a/setup.cfg b/setup.cfg index c8ce95af799..1887a323e28 100644 --- a/setup.cfg +++ b/setup.cfg @@ -180,7 +180,7 @@ install_requires = black==24.1.1 pytest==8.0.0 pytest-bdd==7.0.1 - splinter==0.20.1 + splinter==0.21.0 pytest-splinter==3.3.2 pytest-django==4.7.0 setuptools>=65.5.1,<69.1.0 From ab14ce6ca947409c1d94915ae2900a75b6556557 Mon Sep 17 00:00:00 2001 From: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com> Date: Wed, 31 Jan 2024 18:38:05 +0100 Subject: [PATCH 091/284] [Fixes #11821] GNIP 98: Django upgrade to 4.2 LTS (#11829) * Upgrade to django 4.2 * Upgrade to django 4.2 * Fix tests * black and flake fix * Drop support of pinax-ratings * Drop support of pinax-ratings * black and flake fix * black and flake fix * remove support to HAYSTACK_SEARCH * remove support to HAYSTACK_SEARCH * remove pinax_ratings_tags * Fix warning on lock acquire * [Fixes #11821] rollback SKIP_PERMS_FILTER * [Fixes #11821] fix dependencies * [Fixes #11821] remove unused test of raitings * [Fixes #11821] use geonode fork for dynamic rest * [Fixes #11821] use geonode fork for dynamic rest * [Fixes #11821] use geonode fork for dynamic rest * [Fixes #11821] Fix setup.cfg * [Fixes #11821] fix dependencies * [Fixes #11821] fix dependencies * [Fixes #11821] fix dependencies * [Fixes #11821] fix dependencies * [Fixes #11821] fix setup.cfg * [Fixes #11821] fix setup.cfg * [Fixes #11821] fix setup.cfg * [Fixes #11821] fix setup.cfg * [Fixes #11821] fix requirements.txt * remove default_app_config since is deprecated since django 3.2 * Define apps.py for app registration according to Django 4.2 * Define apps.py for app registration according to Django 4.2 * [Fixes #11821] Fix tests * [Fixes #11821] Add apps.py and fix test import * [Fixes #11821] Add apps.py and fix test import * [Fixes #11821] Add apps.py and fix test import * merge with master * upgrade requirement * Update setup.cfg * Update setup.cfg * Fix select autocomplete light --------- Co-authored-by: Giovanni Allegri --- .env.sample | 4 - .env_dev | 4 - .env_local | 4 - .env_test | 4 - docker-compose-test.yml | 2 +- geonode/__init__.py | 5 +- geonode/api/__init__.py | 1 - geonode/api/api.py | 13 +- geonode/api/resourcebase_api.py | 257 +----------------- geonode/base/__init__.py | 22 -- geonode/base/api/tests.py | 41 --- geonode/base/api/views.py | 61 +---- geonode/base/apps.py | 38 +++ geonode/base/enumerations.py | 2 +- geonode/base/forms.py | 20 +- ...89_alter_resourcebase_polymorphic_ctype.py | 25 ++ .../0089_resourcebase_advertised.py | 2 +- geonode/base/models.py | 13 +- .../base/user_and_group_permissions.html | 5 +- geonode/base/templatetags/base_tags.py | 14 +- geonode/base/templatetags/user_messages.py | 2 +- geonode/base/urls.py | 22 +- geonode/base/views.py | 2 +- geonode/br/__init__.py | 10 - geonode/br/apps.py | 25 ++ geonode/catalogue/__init__.py | 2 +- geonode/catalogue/metadataxsl/__init__.py | 1 - geonode/catalogue/metadataxsl/urls.py | 4 +- geonode/catalogue/metadataxsl/views.py | 2 +- geonode/catalogue/urls.py | 10 +- geonode/client/__init__.py | 1 - geonode/client/apps.py | 2 +- geonode/context_processors.py | 2 - geonode/custom_translations.py | 2 +- geonode/documents/__init__.py | 60 ---- geonode/documents/apps.py | 58 ++++ geonode/documents/exif/__init__.py | 1 - geonode/documents/forms.py | 2 +- geonode/documents/models.py | 2 +- geonode/documents/search_indexes.py | 81 ------ .../documents/document_metadata_advanced.html | 13 +- .../templates/layouts/doc_panels.html | 9 +- geonode/documents/tests.py | 12 +- geonode/documents/urls.py | 22 +- geonode/documents/utils.py | 2 +- geonode/documents/views.py | 2 +- geonode/facets/__init__.py | 2 - geonode/favorite/__init__.py | 1 - geonode/geoapps/__init__.py | 61 ----- geonode/geoapps/apps.py | 59 ++++ geonode/geoapps/models.py | 2 +- .../templates/apps/app_metadata_advanced.html | 13 +- .../geoapps/templates/layouts/app_panels.html | 9 +- geonode/geoapps/urls.py | 16 +- geonode/geoapps/views.py | 2 +- geonode/geoserver/__init__.py | 65 ----- geonode/geoserver/apps.py | 81 ++++++ geonode/geoserver/createlayer/__init__.py | 1 - geonode/geoserver/createlayer/forms.py | 2 +- geonode/geoserver/createlayer/urls.py | 4 +- geonode/geoserver/helpers.py | 12 +- geonode/geoserver/ows.py | 2 +- geonode/geoserver/processing/__init__.py | 1 - geonode/geoserver/signals.py | 4 +- geonode/geoserver/tasks.py | 5 - geonode/geoserver/urls.py | 50 ++-- geonode/geoserver/views.py | 2 +- geonode/groups/__init__.py | 2 - geonode/groups/forms.py | 2 +- geonode/groups/models.py | 2 +- geonode/groups/search_indexes.py | 61 ----- geonode/groups/urls.py | 42 +-- geonode/harvesting/__init__.py | 2 - geonode/harvesting/apps.py | 4 +- geonode/invitations/forms.py | 2 +- geonode/invitations/urls.py | 8 +- geonode/invitations/views.py | 2 +- geonode/layers/__init__.py | 62 ----- geonode/layers/apps.py | 63 +++++ geonode/layers/download_handler.py | 2 +- geonode/layers/models.py | 2 +- geonode/layers/search_indexes.py | 96 ------- .../templates/datasets/dataset_append.html | 1 - .../datasets/dataset_metadata_advanced.html | 13 +- .../datasets/dataset_metadata_upload.html | 1 - .../templates/datasets/dataset_replace.html | 1 - .../datasets/dataset_style_upload.html | 1 - geonode/layers/templates/layouts/panels.html | 9 +- geonode/layers/tests.py | 29 +- geonode/layers/urls.py | 44 +-- geonode/layers/utils.py | 2 +- geonode/layers/views.py | 2 +- geonode/management_commands_http/__init__.py | 9 - geonode/management_commands_http/apps.py | 24 ++ geonode/management_commands_http/models.py | 2 +- .../management_commands_http/utils/jobs.py | 2 +- geonode/maps/__init__.py | 43 --- geonode/maps/apps.py | 59 ++++ geonode/maps/contants.py | 2 +- geonode/maps/models.py | 2 +- geonode/maps/search_indexes.py | 81 ------ geonode/maps/signals.py | 2 +- .../maps/templates/layouts/map_panels.html | 9 +- .../templates/maps/map_metadata_advanced.html | 13 +- geonode/maps/tests.py | 12 +- geonode/maps/urls.py | 22 +- geonode/messaging/__init__.py | 50 ---- geonode/messaging/apps.py | 66 +++++ .../management/commands/runmessaging.py | 2 +- geonode/messaging/producer.py | 2 +- geonode/messaging/tests.py | 2 +- geonode/messaging/urls.py | 4 +- geonode/monitoring/__init__.py | 69 ----- geonode/monitoring/apps.py | 85 ++++++ geonode/monitoring/collector.py | 4 +- geonode/monitoring/forms.py | 2 +- .../management/commands/collect_metrics.py | 2 +- .../management/commands/render_metrics.py | 2 +- .../management/commands/updategeoip.py | 2 +- .../0034_alter_notificationcheck_metrics.py | 21 ++ geonode/monitoring/models.py | 6 +- geonode/monitoring/urls.py | 38 +-- geonode/notifications_backend.py | 4 +- geonode/notifications_helper.py | 3 +- geonode/people/__init__.py | 29 -- geonode/people/admin.py | 6 +- geonode/people/apps.py | 42 +++ geonode/people/enumerations.py | 2 +- geonode/people/forms.py | 2 +- geonode/people/models.py | 2 +- geonode/people/search_indexes.py | 45 --- .../templates/people/profile_detail.html | 6 +- geonode/people/urls.py | 16 +- geonode/people/views.py | 2 +- geonode/proxy/__init__.py | 1 - geonode/proxy/templatetags/proxy_lib_tags.py | 2 +- geonode/proxy/tests.py | 1 + geonode/proxy/urls.py | 8 +- geonode/proxy/views.py | 2 +- geonode/resource/__init__.py | 2 - geonode/resource/apps.py | 4 +- geonode/resource/manager.py | 10 - geonode/resource/processing/__init__.py | 1 - geonode/resource/processing/apps.py | 2 +- ...bstractprocessingtask_polymorphic_ctype.py | 25 ++ geonode/resource/processing/models.py | 2 +- geonode/resource/tests.py | 6 - geonode/resource/utils.py | 2 +- geonode/security/__init__.py | 1 - geonode/security/middleware.py | 4 +- geonode/security/urls.py | 18 +- geonode/security/views.py | 14 +- geonode/services/__init__.py | 3 - geonode/services/forms.py | 2 +- geonode/services/models.py | 2 +- .../services/serviceprocessors/__init__.py | 2 +- geonode/services/serviceprocessors/arcgis.py | 2 +- geonode/services/serviceprocessors/wms.py | 2 +- geonode/services/tests.py | 2 +- geonode/services/urls.py | 18 +- geonode/services/views.py | 2 +- geonode/settings.py | 23 -- geonode/social/__init__.py | 3 - geonode/social/signals.py | 13 +- geonode/social/templatetags/social_tags.py | 2 +- geonode/social/tests.py | 2 +- geonode/social/urls.py | 6 +- geonode/static/geonode/js/search/search.js | 181 +++--------- geonode/storage/__init__.py | 2 - geonode/tasks/__init__.py | 1 - geonode/templates/actstream/actor.html | 4 +- geonode/templates/base.html | 2 +- .../notifications/account_approve/full.txt | 2 +- geonode/templates/search/search_scripts.html | 2 - .../user_messages/thread_detail.html | 2 +- geonode/themes/__init__.py | 1 - geonode/themes/apps.py | 2 +- geonode/themes/models.py | 2 +- geonode/upload/__init__.py | 43 --- geonode/upload/api/exceptions.py | 2 +- geonode/upload/api/views.py | 2 +- geonode/upload/apps.py | 58 ++++ geonode/upload/files.py | 2 +- geonode/upload/forms.py | 2 +- geonode/upload/models.py | 2 +- geonode/upload/upload_validators.py | 2 +- geonode/upload/urls.py | 6 +- geonode/upload/utils.py | 2 +- geonode/urls.py | 128 ++++----- geonode/utils.py | 18 +- package/debian/changelog | 6 +- package/support/geonode.local_settings | 27 -- requirements.txt | 28 +- setup.cfg | 25 +- 194 files changed, 1197 insertions(+), 2081 deletions(-) create mode 100644 geonode/base/apps.py create mode 100644 geonode/base/migrations/0089_alter_resourcebase_polymorphic_ctype.py create mode 100644 geonode/br/apps.py create mode 100644 geonode/documents/apps.py delete mode 100644 geonode/documents/search_indexes.py create mode 100644 geonode/geoapps/apps.py create mode 100644 geonode/geoserver/apps.py delete mode 100644 geonode/groups/search_indexes.py create mode 100644 geonode/layers/apps.py delete mode 100644 geonode/layers/search_indexes.py create mode 100644 geonode/management_commands_http/apps.py create mode 100644 geonode/maps/apps.py delete mode 100644 geonode/maps/search_indexes.py create mode 100644 geonode/messaging/apps.py create mode 100644 geonode/monitoring/apps.py create mode 100644 geonode/monitoring/migrations/0034_alter_notificationcheck_metrics.py create mode 100644 geonode/people/apps.py delete mode 100644 geonode/people/search_indexes.py create mode 100644 geonode/resource/processing/migrations/0003_alter_abstractprocessingtask_polymorphic_ctype.py create mode 100644 geonode/upload/apps.py diff --git a/.env.sample b/.env.sample index 6e5dd10da9d..6f51754db13 100644 --- a/.env.sample +++ b/.env.sample @@ -49,10 +49,6 @@ ALLOWED_HOSTS="['django', '{hostname}']" DEFAULT_BACKEND_UPLOADER=geonode.importer TIME_ENABLED=True MOSAIC_ENABLED=False -HAYSTACK_SEARCH=False -HAYSTACK_ENGINE_URL=http://elasticsearch:9200/ -HAYSTACK_ENGINE_INDEX_NAME=haystack -HAYSTACK_SEARCH_RESULTS_PER_PAGE=200 # ################# # nginx diff --git a/.env_dev b/.env_dev index 029bd5c9de7..0b81ed6529d 100644 --- a/.env_dev +++ b/.env_dev @@ -49,10 +49,6 @@ ALLOWED_HOSTS="['django', '*']" DEFAULT_BACKEND_UPLOADER=geonode.importer TIME_ENABLED=True MOSAIC_ENABLED=False -HAYSTACK_SEARCH=False -HAYSTACK_ENGINE_URL=http://elasticsearch:9200/ -HAYSTACK_ENGINE_INDEX_NAME=haystack -HAYSTACK_SEARCH_RESULTS_PER_PAGE=200 # ################# # nginx diff --git a/.env_local b/.env_local index 7fe89de6cae..ce456cf8641 100644 --- a/.env_local +++ b/.env_local @@ -49,10 +49,6 @@ ALLOWED_HOSTS="['django', '*']" DEFAULT_BACKEND_UPLOADER=geonode.importer TIME_ENABLED=True MOSAIC_ENABLED=False -HAYSTACK_SEARCH=False -HAYSTACK_ENGINE_URL=http://elasticsearch:9200/ -HAYSTACK_ENGINE_INDEX_NAME=haystack -HAYSTACK_SEARCH_RESULTS_PER_PAGE=200 # ################# # nginx diff --git a/.env_test b/.env_test index b2fd6ebb6a0..6dcbc35ccc5 100644 --- a/.env_test +++ b/.env_test @@ -49,10 +49,6 @@ ALLOWED_HOSTS="['django', 'localhost', '127.0.0.1']" DEFAULT_BACKEND_UPLOADER=geonode.importer TIME_ENABLED=True MOSAIC_ENABLED=False -HAYSTACK_SEARCH=False -HAYSTACK_ENGINE_URL=http://elasticsearch:9200/ -HAYSTACK_ENGINE_INDEX_NAME=haystack -HAYSTACK_SEARCH_RESULTS_PER_PAGE=200 # ################# # nginx diff --git a/docker-compose-test.yml b/docker-compose-test.yml index 86e699093e6..009d7c596e8 100644 --- a/docker-compose-test.yml +++ b/docker-compose-test.yml @@ -32,7 +32,7 @@ services: start_period: 60s interval: 60s timeout: 10s - retries: 2 + retries: 5 environment: - IS_CELERY=False entrypoint: ["/usr/src/geonode/entrypoint.sh"] diff --git a/geonode/__init__.py b/geonode/__init__.py index 9b1e32fbb4d..3d789dbdeb3 100644 --- a/geonode/__init__.py +++ b/geonode/__init__.py @@ -19,10 +19,7 @@ import os -__version__ = (4, 2, 0, "dev", 0) - - -default_app_config = "geonode.apps.AppConfig" +__version__ = (5, 0, 0, "dev", 0) def get_version(): diff --git a/geonode/api/__init__.py b/geonode/api/__init__.py index 55b0b0cb9fd..79177e00bdd 100644 --- a/geonode/api/__init__.py +++ b/geonode/api/__init__.py @@ -16,4 +16,3 @@ # along with this program. If not, see . # ######################################################################### -default_app_config = "geonode.api.apps.GeoNodeApiAppConfig" diff --git a/geonode/api/api.py b/geonode/api/api.py index c80c699ed48..316510bb5f0 100644 --- a/geonode/api/api.py +++ b/geonode/api/api.py @@ -22,7 +22,6 @@ from django.apps import apps from django.db.models import Q -from django.conf.urls import url from django.contrib.auth import get_user_model from django.contrib.auth.models import Group from django.urls import reverse @@ -61,7 +60,6 @@ from tastypie import fields from tastypie.resources import ModelResource from tastypie.constants import ALL, ALL_WITH_RELATIONS -from tastypie.utils import trailing_slash from geonode.utils import check_ogc_backend from geonode.security.utils import get_visible_resources @@ -548,16 +546,7 @@ def dehydrate(self, bundle): return bundle def prepend_urls(self): - if settings.HAYSTACK_SEARCH: - return [ - url( - r"^(?P{})/search{}$".format(self._meta.resource_name, trailing_slash()), - self.wrap_view("get_search"), - name="api_get_search", - ), - ] - else: - return [] + return [] def serialize(self, request, data, format, options=None): if options is None: diff --git a/geonode/api/resourcebase_api.py b/geonode/api/resourcebase_api.py index 794a29c884e..b152b30aa2f 100644 --- a/geonode/api/resourcebase_api.py +++ b/geonode/api/resourcebase_api.py @@ -17,7 +17,6 @@ # ######################################################################### from geonode.base.enumerations import LAYER_TYPES -import re import logging from django.db.models import Q @@ -29,13 +28,7 @@ from tastypie.constants import ALL, ALL_WITH_RELATIONS from tastypie.resources import ModelResource from tastypie import fields -from tastypie.utils import trailing_slash -from guardian.shortcuts import get_objects_for_user - -from django.conf.urls import url -from django.core.paginator import Paginator, InvalidPage -from django.http import Http404 from django.core.exceptions import ObjectDoesNotExist from django.forms.models import model_to_dict @@ -67,9 +60,6 @@ from .paginator import CrossSiteXHRPaginator from django.utils.translation import gettext as _ -if settings.HAYSTACK_SEARCH: - from haystack.query import SearchQuerySet # noqa - logger = logging.getLogger(__name__) @@ -246,242 +236,6 @@ def filter_h_keywords(self, queryset, keywords): filtered = queryset return filtered - def build_haystack_filters(self, parameters): - from haystack.inputs import Raw - from haystack.query import SearchQuerySet, SQ # noqa - - sqs = None - - # Retrieve Query Params - - # Text search - query = parameters.get("q", None) - - # Types and subtypes to filter (map, layer, vector, etc) - type_facets = parameters.getlist("type__in", []) - - # If coming from explore page, add type filter from resource_name - resource_filter = self._meta.resource_name.rstrip("s") - if resource_filter != "base" and resource_filter not in type_facets: - type_facets.append(resource_filter) - - # Publication date range (start,end) - date_end = parameters.get("date__lte", None) - date_start = parameters.get("date__gte", None) - - # Topic category filter - category = parameters.getlist("category__identifier__in") - - # Keyword filter - keywords = parameters.getlist("keywords__slug__in") - - # Region filter - regions = parameters.getlist("regions__name__in") - - # Owner filters - owner = parameters.getlist("owner__username__in") - - # Sort order - sort = parameters.get("order_by", "relevance") - - # Geospatial Elements - bbox = parameters.get("extent", None) - - # Filter by Type and subtype - if type_facets is not None: - types = [] - subtypes = [] - - for type in type_facets: - if type in {"map", "layer", "document", "user"}: - # Type is one of our Major Types (not a sub type) - types.append(type) - elif type in LAYER_TYPES: - subtypes.append(type) - - if "vector" in subtypes and "vector_time" not in subtypes: - subtypes.append("vector_time") - - if len(subtypes) > 0: - types.append("layer") - sqs = SearchQuerySet().narrow(f"subtype:{','.join(map(str, subtypes))}") - - if len(types) > 0: - sqs = (SearchQuerySet() if sqs is None else sqs).narrow(f"type:{','.join(map(str, types))}") - - # Filter by Query Params - # haystack bug? if boosted fields aren't included in the - # query, then the score won't be affected by the boost - if query: - if query.startswith('"') or query.startswith("'"): - # Match exact phrase - phrase = query.replace('"', "") - sqs = (SearchQuerySet() if sqs is None else sqs).filter( - SQ(title__exact=phrase) | SQ(description__exact=phrase) | SQ(content__exact=phrase) - ) - else: - words = [w for w in re.split(r"\W", query, flags=re.UNICODE) if w] - for i, search_word in enumerate(words): - if i == 0: - sqs = (SearchQuerySet() if sqs is None else sqs).filter( - SQ(title=Raw(search_word)) | SQ(description=Raw(search_word)) | SQ(content=Raw(search_word)) - ) - elif search_word in {"AND", "OR"}: - pass - elif words[i - 1] == "OR": # previous word OR this word - sqs = sqs.filter_or( - SQ(title=Raw(search_word)) | SQ(description=Raw(search_word)) | SQ(content=Raw(search_word)) - ) - else: # previous word AND this word - sqs = sqs.filter( - SQ(title=Raw(search_word)) | SQ(description=Raw(search_word)) | SQ(content=Raw(search_word)) - ) - - # filter by category - if category: - sqs = (SearchQuerySet() if sqs is None else sqs).narrow(f"category:{','.join(map(str, category))}") - - # filter by keyword: use filter_or with keywords_exact - # not using exact leads to fuzzy matching and too many results - # using narrow with exact leads to zero results if multiple keywords - # selected - if keywords: - for keyword in keywords: - sqs = (SearchQuerySet() if sqs is None else sqs).filter_or(keywords_exact=keyword) - - # filter by regions: use filter_or with regions_exact - # not using exact leads to fuzzy matching and too many results - # using narrow with exact leads to zero results if multiple keywords - # selected - if regions: - for region in regions: - sqs = (SearchQuerySet() if sqs is None else sqs).filter_or(regions_exact__exact=region) - - # filter by owner - if owner: - sqs = (SearchQuerySet() if sqs is None else sqs).narrow(f"owner__username:{','.join(map(str, owner))}") - - # filter by date - if date_start: - sqs = (SearchQuerySet() if sqs is None else sqs).filter(SQ(date__gte=date_start)) - - if date_end: - sqs = (SearchQuerySet() if sqs is None else sqs).filter(SQ(date__lte=date_end)) - - # Filter by geographic bounding box - if bbox: - left, bottom, right, top = bbox.split(",") - sqs = (SearchQuerySet() if sqs is None else sqs).exclude( - SQ(bbox_top__lte=bottom) - | SQ(bbox_bottom__gte=top) - | SQ(bbox_left__gte=right) - | SQ(bbox_right__lte=left) - ) - - # Apply sort - if sort.lower() == "-date": - sqs = (SearchQuerySet() if sqs is None else sqs).order_by("-date") - elif sort.lower() == "date": - sqs = (SearchQuerySet() if sqs is None else sqs).order_by("date") - elif sort.lower() == "title": - sqs = (SearchQuerySet() if sqs is None else sqs).order_by("title_sortable") - elif sort.lower() == "-title": - sqs = (SearchQuerySet() if sqs is None else sqs).order_by("-title_sortable") - elif sort.lower() == "-popular_count": - sqs = (SearchQuerySet() if sqs is None else sqs).order_by("-popular_count") - else: - sqs = (SearchQuerySet() if sqs is None else sqs).order_by("-date") - - return sqs - - def get_search(self, request, **kwargs): - self.method_check(request, allowed=["get"]) - self.is_authenticated(request) - self.throttle_check(request) - - # Get the list of objects that matches the filter - sqs = self.build_haystack_filters(request.GET) - - if not settings.SKIP_PERMS_FILTER: - filter_set = get_objects_for_user(request.user, "base.view_resourcebase") - - filter_set = get_visible_resources( - filter_set, - request.user if request else None, - admin_approval_required=settings.ADMIN_MODERATE_UPLOADS, - unpublished_not_visible=settings.RESOURCE_PUBLISHING, - private_groups_not_visibile=settings.GROUP_PRIVATE_RESOURCES, - ) - - filter_set_ids = filter_set.values_list("id") - # Do the query using the filterset and the query term. Facet the - # results - if len(filter_set) > 0: - sqs = ( - sqs.filter(id__in=filter_set_ids) - .facet("type") - .facet("subtype") - .facet("owner") - .facet("keywords") - .facet("regions") - .facet("category") - ) - else: - sqs = None - else: - sqs = sqs.facet("type").facet("subtype").facet("owner").facet("keywords").facet("regions").facet("category") - - if sqs: - # Build the Facet dict - facets = {} - for facet in sqs.facet_counts()["fields"]: - facets[facet] = {} - for item in sqs.facet_counts()["fields"][facet]: - facets[facet][item[0]] = item[1] - - # Paginate the results - paginator = Paginator(sqs, request.GET.get("limit")) - - try: - page = paginator.page(int(request.GET.get("offset") or 0) / int(request.GET.get("limit") or 0 + 1)) - except InvalidPage: - raise Http404("Sorry, no results on that page.") - - if page.has_previous(): - previous_page = page.previous_page_number() - else: - previous_page = 1 - if page.has_next(): - next_page = page.next_page_number() - else: - next_page = 1 - total_count = sqs.count() - objects = page.object_list - else: - next_page = 0 - previous_page = 0 - total_count = 0 - facets = {} - objects = [] - - object_list = { - "meta": { - "limit": settings.CLIENT_RESULTS_LIMIT, - "next": next_page, - "offset": int(getattr(request.GET, "offset", 0)), - "previous": previous_page, - "total_count": total_count, - "facets": facets, - }, - "objects": [self.get_haystack_api_fields(x) for x in objects], - } - - self.log_throttled_access(request) - return self.create_response(request, object_list) - - def get_haystack_api_fields(self, haystack_object): - return {k: v for k, v in haystack_object.get_stored_fields().items() if not re.search("_exact$|_sortable$", k)} - def get_list(self, request, **kwargs): """ Returns a serialized list of resources. @@ -574,16 +328,7 @@ def create_response(self, request, data, response_class=HttpResponse, response_o return response_class(content=serialized, content_type=build_content_type(desired_format), **response_kwargs) def prepend_urls(self): - if settings.HAYSTACK_SEARCH: - return [ - url( - r"^(?P{})/search{}$".format(self._meta.resource_name, trailing_slash()), - self.wrap_view("get_search"), - name="api_get_search", - ), - ] - else: - return [] + return [] def hydrate_title(self, bundle): title = bundle.data.get("title", None) diff --git a/geonode/base/__init__.py b/geonode/base/__init__.py index 48ab2e6d723..dba87a5d75e 100644 --- a/geonode/base/__init__.py +++ b/geonode/base/__init__.py @@ -19,25 +19,6 @@ from functools import wraps from django.conf import settings -from django.utils.translation import ugettext_noop as _ - -from geonode.notifications_helper import NotificationsAppConfigBase - - -class BaseAppConfig(NotificationsAppConfigBase): - name = "geonode.base" - NOTIFICATIONS = ( - ( - "request_download_resourcebase", - _("Request to download a resource"), - _("A request for downloading a resource was sent"), - ), - ( - "request_resource_edit", - _("Request resource change"), - _("Owner has requested permissions to modify a resource"), - ), - ) def register_url_event(event_type=None): @@ -97,6 +78,3 @@ def register_proxy_event(request): """ Process request to geoserver proxy. Extract layer and ows type """ - - -default_app_config = "geonode.base.BaseAppConfig" diff --git a/geonode/base/api/tests.py b/geonode/base/api/tests.py index 037b882e1f4..57a2cb9700a 100644 --- a/geonode/base/api/tests.py +++ b/geonode/base/api/tests.py @@ -1877,47 +1877,6 @@ def test_tkeywords_list(self): self.assertEqual(response.status_code, 200) self.assertEqual(response.data["total"], ThesaurusKeyword.objects.count()) - def test_rating_resource(self): - resource = Dataset.objects.first() - url = reverse("base-resources-ratings", args=[resource.pk]) - resource.set_permissions( - {"users": {get_anonymous_user().username: ["base.view_resourcebase"], "bobby": ["base.add_resourcebase"]}} - ) - data = {"rating": 3} - # Anonymous user - response = self.client.get(url) - self.assertEqual(response.json()["rating"], 0) - self.assertEqual(response.json()["overall_rating"], 0) - self.assertEqual(response.status_code, 200) - - response = self.client.post(url, data=data) - self.assertEqual(response.status_code, 403) - - # Authenticated user - self.assertTrue(self.client.login(username="admin", password="admin")) - response = self.client.get(url) - self.assertEqual(response.json()["rating"], 0) - self.assertEqual(response.json()["overall_rating"], 0) - self.assertEqual(response.status_code, 200) - - response = self.client.post(url, data=data) - self.assertEqual(response.json()["rating"], 3) - self.assertEqual(response.json()["overall_rating"], 3.0) - self.assertEqual(response.status_code, 200) - - # Authenticated user2 - self.assertTrue(self.client.login(username="bobby", password="bob")) - response = self.client.get(url) - self.assertEqual(response.json()["rating"], 0) - self.assertEqual(response.json()["overall_rating"], 3.0) - self.assertEqual(response.status_code, 200) - - data["rating"] = 1 - response = self.client.post(url, data=data) - self.assertEqual(response.json()["rating"], 1) - self.assertEqual(response.json()["overall_rating"], 2.0) - self.assertEqual(response.status_code, 200) - def test_set_resource_thumbnail(self): re_uuid = "[0-F]{8}-([0-F]{4}-){3}[0-F]{12}" resource = Dataset.objects.first() diff --git a/geonode/base/api/views.py b/geonode/base/api/views.py index 375dc18b0cd..1d8d23128d7 100644 --- a/geonode/base/api/views.py +++ b/geonode/base/api/views.py @@ -21,16 +21,12 @@ import json import re -from decimal import Decimal from uuid import uuid4 from urllib.parse import urljoin, urlparse from PIL import Image from django.apps import apps -from django.contrib.contenttypes.models import ContentType from django.core.validators import URLValidator -from django.db import models -from django.http import HttpResponseForbidden from django.shortcuts import get_object_or_404 from django.urls import reverse from django.conf import settings @@ -44,10 +40,6 @@ from oauth2_provider.contrib.rest_framework import OAuth2Authentication -from pinax.ratings.categories import category_value -from pinax.ratings.models import OverallRating, Rating -from pinax.ratings.views import NUM_OF_RATINGS - from rest_framework import status from rest_framework.exceptions import ValidationError from rest_framework.response import Response @@ -729,7 +721,7 @@ def resource_service_permissions(self, request, pk, *args, **kwargs): "created": request_params.get("created", False), }, ) - resouce_service_dispatcher.apply_async(args=(_exec_request.exec_id,), expiration=30) + resouce_service_dispatcher.apply_async(args=(str(_exec_request.exec_id),), expiration=30) return Response( { "status": _exec_request.status, @@ -890,7 +882,7 @@ def resource_service_ingest(self, request, resource_type: str = None, *args, **k "defaults": request_params.get("defaults", f'{{"owner":"{request.user.username}"}}'), }, ) - resouce_service_dispatcher.apply_async(args=(_exec_request.exec_id,), expiration=30) + resouce_service_dispatcher.apply_async(args=(str(_exec_request.exec_id),), expiration=30) return Response( { "status": _exec_request.status, @@ -990,7 +982,7 @@ def resource_service_create(self, request, resource_type: str = None, *args, **k "defaults": request_params.get("defaults", f'{{"owner":"{request.user.username}"}}'), }, ) - resouce_service_dispatcher.apply_async(args=(_exec_request.exec_id,), expiration=30) + resouce_service_dispatcher.apply_async(args=(str(_exec_request.exec_id),), expiration=30) return Response( { "status": _exec_request.status, @@ -1074,7 +1066,7 @@ def resource_service_delete(self, request, pk, *args, **kwargs): geonode_resource=resource, input_params={"uuid": resource.uuid}, ) - resouce_service_dispatcher.apply_async(args=(_exec_request.exec_id,), expiration=30) + resouce_service_dispatcher.apply_async(args=(str(_exec_request.exec_id),), expiration=30) return Response( { "status": _exec_request.status, @@ -1195,7 +1187,7 @@ def resource_service_update(self, request, pk, *args, **kwargs): "notify": request_params.get("notify", True), }, ) - resouce_service_dispatcher.apply_async(args=(_exec_request.exec_id,), expiration=30) + resouce_service_dispatcher.apply_async(args=(str(_exec_request.exec_id),), expiration=30) return Response( { "status": _exec_request.status, @@ -1306,7 +1298,7 @@ def resource_service_copy(self, request, pk, *args, **kwargs): "defaults": request_params.get("defaults", "{}"), }, ) - resouce_service_dispatcher.apply_async(args=(_exec_request.exec_id,), expiration=30) + resouce_service_dispatcher.apply_async(args=(str(_exec_request.exec_id),), expiration=30) return Response( { "status": _exec_request.status, @@ -1321,47 +1313,6 @@ def resource_service_copy(self, request, pk, *args, **kwargs): logger.exception(e) return Response(status=status.HTTP_400_BAD_REQUEST, exception=e) - @extend_schema( - methods=["post", "get"], - responses={200}, - description="API endpoint allowing to rate and get overall rating of the Resource.", - ) - @action( - detail=True, - url_path="ratings", - url_name="ratings", - methods=["post", "get"], - permission_classes=[ - IsAuthenticatedOrReadOnly, - UserHasPerms(perms_dict={"default": {"POST": ["base.add_resourcebase"]}}), - ], - ) - def ratings(self, request, pk, *args, **kwargs): - resource = get_object_or_404(ResourceBase, pk=pk) - resource = resource.get_real_instance() - ct = ContentType.objects.get_for_model(resource) - if request.method == "POST": - rating_input = int(request.data.get("rating")) - category = resource._meta.object_name.lower() - # check if category is configured in settings.PINAX_RATINGS_CATEGORY_CHOICES - cat_choice = category_value(resource, category) - - # Check for errors and bail early - if category and cat_choice is None: - return HttpResponseForbidden("Invalid category. It must match a preconfigured setting") - if rating_input not in range(NUM_OF_RATINGS + 1): - return HttpResponseForbidden(f"Invalid rating. It must be a value between 0 and {NUM_OF_RATINGS}") - Rating.update(rating_object=resource, user=request.user, category=cat_choice, rating=rating_input) - user_rating = None - if request.user.is_authenticated: - user_rating = Rating.objects.filter(object_id=resource.pk, content_type=ct, user=request.user).first() - overall_rating = OverallRating.objects.filter(object_id=resource.pk, content_type=ct).aggregate( - r=models.Avg("rating") - )["r"] - overall_rating = Decimal(str(overall_rating or "0")) - - return Response({"rating": user_rating.rating if user_rating else 0, "overall_rating": overall_rating}) - @extend_schema( methods=["put"], responses={200}, description="API endpoint allowing to set thumbnail of the Resource." ) diff --git a/geonode/base/apps.py b/geonode/base/apps.py new file mode 100644 index 00000000000..4b24947e52a --- /dev/null +++ b/geonode/base/apps.py @@ -0,0 +1,38 @@ +######################################################################### +# +# Copyright (C) 2016 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### +from django.apps import AppConfig +from django.utils.translation import gettext_noop as _ + +from geonode.notifications_helper import NotificationsAppConfigBase + + +class BaseAppConfig(NotificationsAppConfigBase, AppConfig): + name = "geonode.base" + NOTIFICATIONS = ( + ( + "request_download_resourcebase", + _("Request to download a resource"), + _("A request for downloading a resource was sent"), + ), + ( + "request_resource_edit", + _("Request resource change"), + _("Owner has requested permissions to modify a resource"), + ), + ) diff --git a/geonode/base/enumerations.py b/geonode/base/enumerations.py index 93e05d8b60f..4d956e8331f 100644 --- a/geonode/base/enumerations.py +++ b/geonode/base/enumerations.py @@ -17,7 +17,7 @@ # ######################################################################### -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ LINK_TYPES = ["original", "data", "image", "metadata", "html", "OGC:WMS", "OGC:WFS", "OGC:WCS"] diff --git a/geonode/base/forms.py b/geonode/base/forms.py index 8152da290e5..14552bed7d5 100644 --- a/geonode/base/forms.py +++ b/geonode/base/forms.py @@ -34,10 +34,10 @@ from django.forms import models from django.forms.fields import ChoiceField, MultipleChoiceField from django.forms.utils import flatatt -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.html import format_html from django.utils.safestring import mark_safe -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext_lazy as _ from modeltranslation.forms import TranslationModelForm from taggit.forms import TagField from tinymce.widgets import TinyMCE @@ -151,7 +151,7 @@ def value_from_datadict(self, data, files, name): def render_option_value(self, selected_choices, option_value, option_label, data_section=None): if option_value is None: option_value = "" - option_value = force_text(option_value) + option_value = force_str(option_value) if option_value in selected_choices: selected_html = mark_safe(" selected") if not self.allow_multiple_selected: @@ -160,12 +160,12 @@ def render_option_value(self, selected_choices, option_value, option_label, data else: selected_html = "" - label = force_text(option_label) + label = force_str(option_label) if data_section is None: data_section = "" else: - data_section = force_text(data_section) + data_section = force_str(data_section) if "/" in data_section: label = format_html("{} [{}]", label, data_section.rsplit("/", 1)[1]) @@ -181,7 +181,7 @@ def _region_id_from_choice(choice): else: return choice.id - selected_choices = {force_text(_region_id_from_choice(v)) for v in selected_choices} + selected_choices = {force_str(_region_id_from_choice(v)) for v in selected_choices} output = [] output.append(format_html('', "Global")) @@ -192,25 +192,25 @@ def _region_id_from_choice(choice): for option_value, option_label in self.choices: if isinstance(option_label, (list, tuple)) and not isinstance(option_label, str): - output.append(format_html('', force_text(option_value))) + output.append(format_html('', force_str(option_value))) for option in option_label: if isinstance(option, (list, tuple)) and not isinstance(option, str): if isinstance(option[1][0], (list, tuple)) and not isinstance(option[1][0], str): for option_child in option[1][0]: output.append( self.render_option_value( - selected_choices, *option_child, data_section=force_text(option[1][0][0]) + selected_choices, *option_child, data_section=force_str(option[1][0][0]) ) ) else: output.append( self.render_option_value( - selected_choices, *option[1], data_section=force_text(option[0]) + selected_choices, *option[1], data_section=force_str(option[0]) ) ) else: output.append( - self.render_option_value(selected_choices, *option, data_section=force_text(option_value)) + self.render_option_value(selected_choices, *option, data_section=force_str(option_value)) ) output.append("") diff --git a/geonode/base/migrations/0089_alter_resourcebase_polymorphic_ctype.py b/geonode/base/migrations/0089_alter_resourcebase_polymorphic_ctype.py new file mode 100644 index 00000000000..69d7a3871c0 --- /dev/null +++ b/geonode/base/migrations/0089_alter_resourcebase_polymorphic_ctype.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.9 on 2024-01-10 14:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("contenttypes", "0002_remove_content_type_name"), + ("base", "0088_auto_20231019_1244"), + ] + + operations = [ + migrations.AlterField( + model_name="resourcebase", + name="polymorphic_ctype", + field=models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="polymorphic_%(app_label)s.%(class)s_set+", + to="contenttypes.contenttype", + ), + ), + ] diff --git a/geonode/base/migrations/0089_resourcebase_advertised.py b/geonode/base/migrations/0089_resourcebase_advertised.py index a15fc7a7d1c..12e9610c24d 100644 --- a/geonode/base/migrations/0089_resourcebase_advertised.py +++ b/geonode/base/migrations/0089_resourcebase_advertised.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ('base', '0088_auto_20231019_1244'), + ('base', '0089_alter_resourcebase_polymorphic_ctype'), ] operations = [ diff --git a/geonode/base/models.py b/geonode/base/models.py index 1ab5b3d7d35..5231c544978 100644 --- a/geonode/base/models.py +++ b/geonode/base/models.py @@ -46,7 +46,7 @@ from django.contrib.gis.geos import GEOSGeometry, Polygon, Point from django.contrib.gis.db.models import PolygonField from django.core.exceptions import ValidationError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.contrib.contenttypes.models import ContentType from django.utils.html import strip_tags from mptt.models import MPTTModel, TreeForeignKey @@ -55,7 +55,6 @@ from polymorphic.models import PolymorphicModel from polymorphic.managers import PolymorphicManager -from pinax.ratings.models import OverallRating from taggit.models import TagBase, ItemBase from taggit.managers import TaggableManager, _TaggableManager @@ -2125,16 +2124,6 @@ class GroupGeoLimit(models.Model): wkt = models.TextField(db_column="wkt", blank=True) -def rating_post_save(instance, *args, **kwargs): - """ - Used to fill the average rating field on OverallRating change. - """ - ResourceBase.objects.filter(id=instance.object_id).update(rating=instance.rating) - - -signals.post_save.connect(rating_post_save, sender=OverallRating) - - class ExtraMetadata(models.Model): resource = models.ForeignKey(ResourceBase, null=False, blank=False, on_delete=models.CASCADE) metadata = JSONField(null=True, default=dict, blank=True) diff --git a/geonode/base/templates/base/user_and_group_permissions.html b/geonode/base/templates/base/user_and_group_permissions.html index 216aaf7d0d3..cfe3f0f4053 100644 --- a/geonode/base/templates/base/user_and_group_permissions.html +++ b/geonode/base/templates/base/user_and_group_permissions.html @@ -12,13 +12,10 @@ - + - - - diff --git a/geonode/base/templatetags/base_tags.py b/geonode/base/templatetags/base_tags.py index 23960e0eeaa..d9bf63f4c36 100644 --- a/geonode/base/templatetags/base_tags.py +++ b/geonode/base/templatetags/base_tags.py @@ -21,12 +21,10 @@ from django.db.models import Q from django.conf import settings from django.db.models import Count -from django.utils.translation import ugettext +from django.utils.translation import gettext_lazy from django.contrib.auth import get_user_model -from django.utils.translation import ugettext_lazy as _ -from django.contrib.contenttypes.models import ContentType +from django.utils.translation import gettext_lazy as _ -from pinax.ratings.models import Rating from guardian.shortcuts import get_objects_for_user from geonode.maps.models import Map @@ -53,7 +51,7 @@ @register.filter(name="template_trans") def template_trans(text): try: - return ugettext(text) + return gettext_lazy(text) except Exception: return text @@ -64,12 +62,6 @@ def get_item(dictionary, key): return dictionary.get(key) -@register.simple_tag -def num_ratings(obj): - ct = ContentType.objects.get_for_model(obj) - return len(Rating.objects.filter(object_id=obj.pk, content_type=ct)) - - @register.simple_tag(takes_context=True) def facets(context): request = context["request"] diff --git a/geonode/base/templatetags/user_messages.py b/geonode/base/templatetags/user_messages.py index 92c381ed8c9..421e3a692c4 100644 --- a/geonode/base/templatetags/user_messages.py +++ b/geonode/base/templatetags/user_messages.py @@ -21,7 +21,7 @@ from django.conf import settings from django.db.models import Sum from django.contrib.auth import get_user_model -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext_lazy as _ register = template.Library() diff --git a/geonode/base/urls.py b/geonode/base/urls.py index 77e3d226b4e..28e2b37aacf 100644 --- a/geonode/base/urls.py +++ b/geonode/base/urls.py @@ -16,7 +16,7 @@ # along with this program. If not, see . # ######################################################################### -from django.conf.urls import url, include +from django.urls import include, re_path from .views import ( DatasetsAutocomplete, @@ -32,50 +32,50 @@ urlpatterns = [ - url( + re_path( r"^autocomplete_response/$", ResourceBaseAutocomplete.as_view(), name="autocomplete_base", ), - url( + re_path( r"^autocomplete_linked_resource/$", LinkedResourcesAutocomplete.as_view(), name="autocomplete_linked_resource", ), - url( + re_path( r"^autocomplete_region/$", RegionAutocomplete.as_view(), name="autocomplete_region", ), - url( + re_path( r"^autocomplete_hierachical_keyword/$", HierarchicalKeywordAutocomplete.as_view(), name="autocomplete_hierachical_keyword", ), - url( + re_path( r"^thesaurus_available", ThesaurusAvailable.as_view(), name="thesaurus_available", ), - url( + re_path( r"^thesaurus_autocomplete/$", ThesaurusKeywordLabelAutocomplete.as_view(), name="thesaurus_autocomplete", ), - url( + re_path( r"^datasets_autocomplete/$", DatasetsAutocomplete.as_view(), name="datasets_autocomplete", ), - url( + re_path( r"^resource_rights/(?P\d+)$", OwnerRightsRequestView.as_view(), name="owner_rights_request", ), - url( + re_path( r"^resource_clone/?$", resource_clone, name="resource_clone", ), - url(r"^", include("geonode.base.api.urls")), + re_path(r"^", include("geonode.base.api.urls")), ] diff --git a/geonode/base/views.py b/geonode/base/views.py index ab7359c8b3b..e51c342fedf 100644 --- a/geonode/base/views.py +++ b/geonode/base/views.py @@ -31,7 +31,7 @@ from django.http import HttpResponseRedirect from django.contrib.auth import get_user_model from django.contrib import messages -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext_lazy as _ from django.core.exceptions import PermissionDenied from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin diff --git a/geonode/br/__init__.py b/geonode/br/__init__.py index df3f634b661..79177e00bdd 100644 --- a/geonode/br/__init__.py +++ b/geonode/br/__init__.py @@ -16,13 +16,3 @@ # along with this program. If not, see . # ######################################################################### - -from django.apps import AppConfig - - -class BackupRestoreAppConfig(AppConfig): - name = "geonode.br" - verbose_name = "Backup/Restore" - - -default_app_config = "geonode.br.BackupRestoreAppConfig" diff --git a/geonode/br/apps.py b/geonode/br/apps.py new file mode 100644 index 00000000000..55624e0ffb9 --- /dev/null +++ b/geonode/br/apps.py @@ -0,0 +1,25 @@ +######################################################################### +# +# Copyright (C) 2016 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +from django.apps import AppConfig + + +class BackupRestoreAppConfig(AppConfig): + name = "geonode.br" + verbose_name = "Backup/Restore" diff --git a/geonode/catalogue/__init__.py b/geonode/catalogue/__init__.py index d1b9c72dbff..a64ed9c768b 100644 --- a/geonode/catalogue/__init__.py +++ b/geonode/catalogue/__init__.py @@ -25,7 +25,7 @@ from django.core.exceptions import ImproperlyConfigured from importlib import import_module -default_app_config = "geonode.catalogue.apps.GeoNodeCatalogueAppConfig" + DEFAULT_CATALOGUE_ALIAS = "default" # GeoNode uses this if the CATALOGUE setting is empty (None). diff --git a/geonode/catalogue/metadataxsl/__init__.py b/geonode/catalogue/metadataxsl/__init__.py index 0143f08e23a..79177e00bdd 100644 --- a/geonode/catalogue/metadataxsl/__init__.py +++ b/geonode/catalogue/metadataxsl/__init__.py @@ -16,4 +16,3 @@ # along with this program. If not, see . # ######################################################################### -default_app_config = "geonode.catalogue.metadataxsl.apps.GeoNodeCatalogueMetadataxslAppConfig" diff --git a/geonode/catalogue/metadataxsl/urls.py b/geonode/catalogue/metadataxsl/urls.py index 10467b86ff8..0b5e6f59049 100644 --- a/geonode/catalogue/metadataxsl/urls.py +++ b/geonode/catalogue/metadataxsl/urls.py @@ -17,7 +17,7 @@ # ######################################################################### -from django.conf.urls import url +from django.urls import re_path from . import views -urlpatterns = [url(r"^xsl/(?P\d+)$", views.prefix_xsl_line, name="prefix_xsl_line")] +urlpatterns = [re_path(r"^xsl/(?P\d+)$", views.prefix_xsl_line, name="prefix_xsl_line")] diff --git a/geonode/catalogue/metadataxsl/views.py b/geonode/catalogue/metadataxsl/views.py index e6cb71feb2f..04913c48496 100644 --- a/geonode/catalogue/metadataxsl/views.py +++ b/geonode/catalogue/metadataxsl/views.py @@ -26,7 +26,7 @@ from django.conf import settings from django.http import HttpResponse from django.shortcuts import get_object_or_404 -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext_lazy as _ from django.core.exceptions import PermissionDenied from django.views.decorators.clickjacking import xframe_options_exempt diff --git a/geonode/catalogue/urls.py b/geonode/catalogue/urls.py index fed2c84eed1..29d03e49890 100644 --- a/geonode/catalogue/urls.py +++ b/geonode/catalogue/urls.py @@ -17,19 +17,19 @@ # ######################################################################### -from django.conf.urls import url +from django.urls import re_path from django.urls import path from . import views urlpatterns = [ - url(r"^csw$", views.csw_global_dispatch, name="csw_global_dispatch"), - url(r"^opensearch$", views.opensearch_dispatch, name="opensearch_dispatch"), - url( + re_path(r"^csw$", views.csw_global_dispatch, name="csw_global_dispatch"), + re_path(r"^opensearch$", views.opensearch_dispatch, name="opensearch_dispatch"), + re_path( r"^csw_to_extra_format/(?P[^/]*)/(?P[^/]*).txt$", views.csw_render_extra_format_txt, name="csw_render_extra_format_txt", ), - url( + re_path( r"^csw_to_extra_format/(?P[^/]*)/(?P[^/]*).html$", views.csw_render_extra_format_html, name="csw_render_extra_format_html", diff --git a/geonode/client/__init__.py b/geonode/client/__init__.py index 55702cb7715..204aed5da98 100644 --- a/geonode/client/__init__.py +++ b/geonode/client/__init__.py @@ -19,5 +19,4 @@ from pkgutil import extend_path -default_app_config = "geonode.client.apps.AppConfig" __path__ = extend_path(__path__, __name__) # noqa diff --git a/geonode/client/apps.py b/geonode/client/apps.py index 66e8fe5d1f3..55202b4f72f 100644 --- a/geonode/client/apps.py +++ b/geonode/client/apps.py @@ -17,7 +17,7 @@ # ######################################################################### from django.apps import AppConfig as BaseAppConfig -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(BaseAppConfig): diff --git a/geonode/context_processors.py b/geonode/context_processors.py index 1230a20cbf8..8b83ba2e269 100644 --- a/geonode/context_processors.py +++ b/geonode/context_processors.py @@ -69,9 +69,7 @@ def resource_urls(request): GROUP_MANDATORY_RESOURCES=getattr(settings, "GROUP_MANDATORY_RESOURCES", False), GROUP_PRIVATE_RESOURCES=getattr(settings, "GROUP_PRIVATE_RESOURCES", False), RESOURCE_PUBLISHING=getattr(settings, "RESOURCE_PUBLISHING", False), - HAYSTACK_SEARCH=getattr(settings, "HAYSTACK_SEARCH", False), SKIP_PERMS_FILTER=getattr(settings, "SKIP_PERMS_FILTER", False), - HAYSTACK_FACET_COUNTS=getattr(settings, "HAYSTACK_FACET_COUNTS", False), CLIENT_RESULTS_LIMIT=getattr(settings, "CLIENT_RESULTS_LIMIT", 10), API_LIMIT_PER_PAGE=getattr(settings, "API_LIMIT_PER_PAGE", 20), SRID_DETAIL=getattr(settings, "SRID", dict()).get("DETAIL", "never"), diff --git a/geonode/custom_translations.py b/geonode/custom_translations.py index 28ca9be0d09..f065a8da19f 100644 --- a/geonode/custom_translations.py +++ b/geonode/custom_translations.py @@ -20,7 +20,7 @@ # this file will be used to provide custom translation strings from e.g. fixtures # it will be parsed by python manage.py makemessages and update the .po files accordingly -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext_lazy as _ texts = [ _( diff --git a/geonode/documents/__init__.py b/geonode/documents/__init__.py index 527f5fb5f7d..e69de29bb2d 100644 --- a/geonode/documents/__init__.py +++ b/geonode/documents/__init__.py @@ -1,60 +0,0 @@ -######################################################################### -# -# Copyright (C) 2016 OSGeo -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -######################################################################### - -from django.utils.translation import ugettext_noop as _ -from geonode.notifications_helper import NotificationsAppConfigBase - - -class DocumentsAppConfig(NotificationsAppConfigBase): - name = "geonode.documents" - NOTIFICATIONS = ( - ( - "document_created", - _("Document Created"), - _("A Document was created"), - ), - ( - "document_updated", - _("Document Updated"), - _("A Document was updated"), - ), - ( - "document_approved", - _("Document Approved"), - _("A Document was approved by a Manager"), - ), - ( - "document_published", - _("Document Published"), - _("A Document was published"), - ), - ( - "document_deleted", - _("Document Deleted"), - _("A Document was deleted"), - ), - ( - "document_rated", - _("Rating for Document"), - _("A rating was given to a document"), - ), - ) - - -default_app_config = "geonode.documents.DocumentsAppConfig" diff --git a/geonode/documents/apps.py b/geonode/documents/apps.py new file mode 100644 index 00000000000..72e2ad96375 --- /dev/null +++ b/geonode/documents/apps.py @@ -0,0 +1,58 @@ +######################################################################### +# +# Copyright (C) 2016 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +from django.utils.translation import gettext_noop as _ +from geonode.notifications_helper import NotificationsAppConfigBase +from django.apps import AppConfig + + +class DocumentsAppConfig(NotificationsAppConfigBase, AppConfig): + name = "geonode.documents" + NOTIFICATIONS = ( + ( + "document_created", + _("Document Created"), + _("A Document was created"), + ), + ( + "document_updated", + _("Document Updated"), + _("A Document was updated"), + ), + ( + "document_approved", + _("Document Approved"), + _("A Document was approved by a Manager"), + ), + ( + "document_published", + _("Document Published"), + _("A Document was published"), + ), + ( + "document_deleted", + _("Document Deleted"), + _("A Document was deleted"), + ), + ( + "document_rated", + _("Rating for Document"), + _("A rating was given to a document"), + ), + ) diff --git a/geonode/documents/exif/__init__.py b/geonode/documents/exif/__init__.py index bc045338385..79177e00bdd 100644 --- a/geonode/documents/exif/__init__.py +++ b/geonode/documents/exif/__init__.py @@ -16,4 +16,3 @@ # along with this program. If not, see . # ######################################################################### -default_app_config = "geonode.documents.exif.apps.GeoNodeDocumentsExifAppConfig" diff --git a/geonode/documents/forms.py b/geonode/documents/forms.py index 7568dc6863b..29ab23d8a97 100644 --- a/geonode/documents/forms.py +++ b/geonode/documents/forms.py @@ -26,7 +26,7 @@ from django import forms from django.conf import settings from django.forms import HiddenInput -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext_lazy as _ from django.template.defaultfilters import filesizeformat from geonode.base.forms import ResourceBaseForm, get_tree_data diff --git a/geonode/documents/models.py b/geonode/documents/models.py index e4815dc8da9..25cc5c2b86d 100644 --- a/geonode/documents/models.py +++ b/geonode/documents/models.py @@ -24,7 +24,7 @@ from django.db import models from django.urls import reverse from django.utils.functional import classproperty -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from geonode.client.hooks import hookset from geonode.base.models import ResourceBase diff --git a/geonode/documents/search_indexes.py b/geonode/documents/search_indexes.py deleted file mode 100644 index d5460936b88..00000000000 --- a/geonode/documents/search_indexes.py +++ /dev/null @@ -1,81 +0,0 @@ -######################################################################### -# -# Copyright (C) 2016 OSGeo -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -######################################################################### - -from pinax.ratings.models import OverallRating -from django.contrib.contenttypes.models import ContentType -from django.db.models import Avg -from haystack import indexes -from geonode.documents.models import Document - - -class DocumentIndex(indexes.SearchIndex, indexes.Indexable): - id = indexes.IntegerField(model_attr="id") - abstract = indexes.CharField(model_attr="abstract", boost=1.5) - category__gn_description = indexes.CharField(model_attr="category__gn_description", null=True) - csw_type = indexes.CharField(model_attr="csw_type") - csw_wkt_geometry = indexes.CharField(model_attr="csw_wkt_geometry") - detail_url = indexes.CharField(model_attr="get_absolute_url") - owner__username = indexes.CharField(model_attr="owner", faceted=True, null=True) - srid = indexes.CharField(model_attr="srid") - supplemental_information = indexes.CharField(model_attr="supplemental_information", null=True) - thumbnail_url = indexes.CharField(model_attr="thumbnail_url", null=True) - uuid = indexes.CharField(model_attr="uuid") - title = indexes.CharField(model_attr="title", boost=2) - date = indexes.DateTimeField(model_attr="date") - - text = indexes.EdgeNgramField(document=True, use_template=True, stored=False) - type = indexes.CharField(faceted=True) - title_sortable = indexes.CharField(indexed=False, stored=False) # Necessary for sorting - category = indexes.CharField(model_attr="category__identifier", faceted=True, null=True, stored=True) - bbox_left = indexes.FloatField(model_attr="bbox_x0", null=True, stored=False) - bbox_right = indexes.FloatField(model_attr="bbox_x1", null=True, stored=False) - bbox_bottom = indexes.FloatField(model_attr="bbox_y0", null=True, stored=False) - bbox_top = indexes.FloatField(model_attr="bbox_y1", null=True, stored=False) - temporal_extent_start = indexes.DateTimeField(model_attr="temporal_extent_start", null=True, stored=False) - temporal_extent_end = indexes.DateTimeField(model_attr="temporal_extent_end", null=True, stored=False) - keywords = indexes.MultiValueField(model_attr="keyword_slug_list", null=True, faceted=True, stored=True) - regions = indexes.MultiValueField(model_attr="region_name_list", null=True, faceted=True, stored=True) - popular_count = indexes.IntegerField(model_attr="popular_count", default=0, boost=20) - share_count = indexes.IntegerField(model_attr="share_count", default=0) - rating = indexes.IntegerField(null=True) - num_ratings = indexes.IntegerField(stored=False) - - def get_model(self): - return Document - - def prepare_type(self, obj): - return "document" - - def prepare_rating(self, obj): - ct = ContentType.objects.get_for_model(obj) - try: - rating = OverallRating.objects.filter(object_id=obj.pk, content_type=ct).aggregate(r=Avg("rating"))["r"] - return float(str(rating or "0")) - except OverallRating.DoesNotExist: - return 0.0 - - def prepare_num_ratings(self, obj): - ct = ContentType.objects.get_for_model(obj) - try: - return OverallRating.objects.filter(object_id=obj.pk, content_type=ct).all().count() - except OverallRating.DoesNotExist: - return 0 - - def prepare_title_sortable(self, obj): - return obj.title.lower().lstrip() diff --git a/geonode/documents/templates/documents/document_metadata_advanced.html b/geonode/documents/templates/documents/document_metadata_advanced.html index f7f8dc083a9..630b9cfc4e1 100644 --- a/geonode/documents/templates/documents/document_metadata_advanced.html +++ b/geonode/documents/templates/documents/document_metadata_advanced.html @@ -18,13 +18,10 @@ - + - - -