From 9cc1004fb8e4b3678226bca675bb4fd47c359151 Mon Sep 17 00:00:00 2001 From: Gautam Korlam Date: Wed, 1 Nov 2023 13:07:45 -0700 Subject: [PATCH 01/14] fix: correctly handle skip_prefix logic for site_alts (#1092) Fixes #1091 --- app/utils/results.py | 23 +++++++++++++---------- test/test_results.py | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/app/utils/results.py b/app/utils/results.py index 42654e9..c78f866 100644 --- a/app/utils/results.py +++ b/app/utils/results.py @@ -12,7 +12,7 @@ import re import warnings SKIP_ARGS = ['ref_src', 'utm'] -SKIP_PREFIX = ['//www.', '//mobile.', '//m.', 'www.', 'mobile.', 'm.'] +SKIP_PREFIX = ['//www.', '//mobile.', '//m.'] GOOG_STATIC = 'www.gstatic.com' G_M_LOGO_URL = 'https://www.gstatic.com/m/images/icons/googleg.gif' GOOG_IMG = '/images/branding/searchlogo/1x/googlelogo' @@ -152,11 +152,12 @@ def get_first_link(soup: BeautifulSoup) -> str: return '' -def get_site_alt(link: str) -> str: +def get_site_alt(link: str, site_alts: dict = SITE_ALTS) -> str: """Returns an alternative to a particular site, if one is configured Args: - link: A string result URL to check against the SITE_ALTS map + link: A string result URL to check against the site_alts map + site_alts: A map of site alternatives to replace with. defaults to SITE_ALTS Returns: str: An updated (or ignored) result link @@ -178,9 +179,9 @@ def get_site_alt(link: str) -> str: # "https://medium.com/..." should match, but "philomedium.com" should not) hostcomp = f'{parsed_link.scheme}://{hostname}' - for site_key in SITE_ALTS.keys(): + for site_key in site_alts.keys(): site_alt = f'{parsed_link.scheme}://{site_key}' - if not hostname or site_alt not in hostcomp or not SITE_ALTS[site_key]: + if not hostname or site_alt not in hostcomp or not site_alts[site_key]: continue # Wikipedia -> Wikiless replacements require the subdomain (if it's @@ -193,9 +194,8 @@ def get_site_alt(link: str) -> str: elif 'medium' in hostname and len(subdomain) > 0: hostname = f'{subdomain}.{hostname}' - parsed_alt = urlparse.urlparse(SITE_ALTS[site_key]) - link = link.replace(hostname, SITE_ALTS[site_key]) + params - + parsed_alt = urlparse.urlparse(site_alts[site_key]) + link = link.replace(hostname, site_alts[site_key]) + params # If a scheme is specified in the alternative, this results in a # replaced link that looks like "https://http://altservice.tld". # In this case, we can remove the original scheme from the result @@ -205,9 +205,12 @@ def get_site_alt(link: str) -> str: for prefix in SKIP_PREFIX: if parsed_alt.scheme: - link = link.replace(prefix, '') + # If a scheme is specified, remove everything before the + # first occurence of it + link = f'{parsed_alt.scheme}{link.split(parsed_alt.scheme, 1)[-1]}' else: - link = link.replace(prefix, '//') + # Otherwise, replace the first occurrence of the prefix + link = link.replace(prefix, '//', 1) break return link diff --git a/test/test_results.py b/test/test_results.py index 63ae159..64caacd 100644 --- a/test/test_results.py +++ b/test/test_results.py @@ -2,6 +2,7 @@ from bs4 import BeautifulSoup from app.filter import Filter from app.models.config import Config from app.models.endpoint import Endpoint +from app.utils import results from app.utils.session import generate_key from datetime import datetime from dateutil.parser import ParserError, parse @@ -136,3 +137,22 @@ def test_leading_slash_search(client): continue assert link['href'].startswith(f'{Endpoint.search}') + + +def test_site_alt_prefix_skip(): + # Ensure prefixes are skipped correctly for site alts + + # default silte_alts (farside.link) + assert results.get_site_alt(link = 'https://www.reddit.com') == 'https://farside.link/libreddit' + assert results.get_site_alt(link = 'https://www.twitter.com') == 'https://farside.link/nitter' + assert results.get_site_alt(link = 'https://www.youtube.com') == 'https://farside.link/invidious' + + test_site_alts = { + 'reddit.com': 'reddit.endswithmobile.domain', + 'twitter.com': 'https://twitter.endswithm.domain', + 'youtube.com': 'http://yt.endswithwww.domain', + } + # Domains with part of SKIP_PREFIX in them + assert results.get_site_alt(link = 'https://www.reddit.com', site_alts = test_site_alts) == 'https://reddit.endswithmobile.domain' + assert results.get_site_alt(link = 'https://www.twitter.com', site_alts = test_site_alts) == 'https://twitter.endswithm.domain' + assert results.get_site_alt(link = 'https://www.youtube.com', site_alts = test_site_alts) == 'http://yt.endswithwww.domain' From 6a10efbd9e1d290f67c4658e96a2d04cceb732f3 Mon Sep 17 00:00:00 2001 From: Zhiyong Dou <23291546+zydou@users.noreply.github.com> Date: Thu, 2 Nov 2023 04:08:08 +0800 Subject: [PATCH 02/14] fix: add missing dependency `validators` to setup.cfg (#1087) --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index 01bdec7..6e61f45 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,6 +27,7 @@ install_requires= python-dotenv requests stem + validators waitress [options.extras_require] From 1644a4a04e62521f739c2d79ed4d74643052e7fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:08:29 -0600 Subject: [PATCH 03/14] Bump urllib3 from 1.26.17 to 1.26.18 (#1085) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.17 to 1.26.18. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.17...1.26.18) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e0966ac..31b29b2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ python-dateutil==2.8.2 requests==2.31.0 soupsieve==2.4 stem==1.8.1 -urllib3==1.26.17 +urllib3==1.26.18 validators==0.22.0 waitress==2.1.2 wcwidth==0.2.6 From 2a0b9a47b2e3a44803e1b9863441e9caa10c2c7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:08:49 -0600 Subject: [PATCH 04/14] Bump werkzeug from 2.3.3 to 3.0.1 (#1093) Bumps [werkzeug](https://github.com/pallets/werkzeug) from 2.3.3 to 3.0.1. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/werkzeug/compare/2.3.3...3.0.1) --- updated-dependencies: - dependency-name: werkzeug dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 31b29b2..2114aba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -33,5 +33,5 @@ urllib3==1.26.18 validators==0.22.0 waitress==2.1.2 wcwidth==0.2.6 -Werkzeug==2.3.3 +Werkzeug==3.0.1 python-dotenv==0.21.1 From 9f68c843d6673a81fa439c7e1c240d2a07f5e954 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Wed, 1 Nov 2023 14:30:23 -0600 Subject: [PATCH 05/14] Specify links that should trigger div removal from results There are certain links (such as the age verification link mentioned in issue #1083) that should trigger removal of the entire container div on the results page, rather than just hiding the link itself. This introduces a new `unsupported_g_divs` list that holds links that will trigger a removal of the result div on the result page. Fixes #1083 --- app/filter.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/filter.py b/app/filter.py index 355b358..3a80535 100644 --- a/app/filter.py +++ b/app/filter.py @@ -29,9 +29,12 @@ unsupported_g_pages = [ 'google.com/preferences', 'google.com/intl', 'advanced_search', - 'tbm=shop' + 'tbm=shop', + 'ageverification.google.co.kr' ] +unsupported_g_divs = ['google.com/preferences?hl=', 'ageverification.google.co.kr'] + def extract_q(q_str: str, href: str) -> str: """Extracts the 'q' element from a result link. This is typically @@ -554,7 +557,7 @@ class Filter: link['href'] = link_netloc parent = link.parent - if 'google.com/preferences?hl=' in link_netloc: + if any(divlink in link_netloc for divlink in unsupported_g_divs): # Handle case where a search is performed in a different # language than what is configured. This usually returns a # div with the same classes as normal search results, but with From b97f3dd4c063d5bc35fcdc8fde299c721ec56594 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Wed, 1 Nov 2023 14:45:42 -0600 Subject: [PATCH 06/14] Bump version to 0.8.4 --- app/version.py | 2 +- charts/whoogle/Chart.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/version.py b/app/version.py index c061f7e..d3675b7 100644 --- a/app/version.py +++ b/app/version.py @@ -4,4 +4,4 @@ optional_dev_tag = '' if os.getenv('DEV_BUILD'): optional_dev_tag = '.dev' + os.getenv('DEV_BUILD') -__version__ = '0.8.3' + optional_dev_tag +__version__ = '0.8.4' + optional_dev_tag diff --git a/charts/whoogle/Chart.yaml b/charts/whoogle/Chart.yaml index 07dfcd4..b10c349 100644 --- a/charts/whoogle/Chart.yaml +++ b/charts/whoogle/Chart.yaml @@ -3,7 +3,7 @@ name: whoogle description: A self hosted search engine on Kubernetes type: application version: 0.1.0 -appVersion: 0.8.3 +appVersion: 0.8.4 icon: https://github.com/benbusby/whoogle-search/raw/main/app/static/img/favicon/favicon-96x96.png From 57398a9b3b26638eebab36d31379005d2c28747b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 15:22:52 -0700 Subject: [PATCH 07/14] Bump cryptography from 3.3.2 to 41.0.6 (#1101) Bumps [cryptography](https://github.com/pyca/cryptography) from 3.3.2 to 41.0.6. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/3.3.2...41.0.6) --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2114aba..1a301e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ cffi==1.15.1 chardet==5.1.0 click==8.1.3 cryptography==3.3.2; platform_machine == 'armv7l' -cryptography==41.0.4; platform_machine != 'armv7l' +cryptography==41.0.6; platform_machine != 'armv7l' cssutils==2.6.0 defusedxml==0.7.1 Flask==2.3.2 From 166b28040a37c05cb5196e71b409efa4a2a0d541 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Tue, 5 Dec 2023 15:23:59 -0700 Subject: [PATCH 08/14] Remove outdated instance [skip ci] Closes #1102 --- README.md | 1 - misc/instances.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/README.md b/README.md index 1139450..63fadf0 100644 --- a/README.md +++ b/README.md @@ -663,7 +663,6 @@ A lot of the app currently piggybacks on Google's existing support for fetching | [https://whoogle.lunar.icu](https://whoogle.lunar.icu) | 🇩🇪 DE | Multi-choice | ✅ | | [https://wgl.frail.duckdns.org](https://wgl.frail.duckdns.org) | 🇧🇷 BR | Multi-choice | | | [https://whoogle.no-logs.com](https://whoogle.no-logs.com/) | 🇸🇪 SE | Multi-choice | | -| [https://search.rubberverse.xyz](https://search.rubberverse.xyz) | 🇵🇱 PL | English | | | [https://whoogle.ftw.lol](https://whoogle.ftw.lol) | 🇩🇪 DE | Multi-choice | | | [https://whoogle-search--replitcomreside.repl.co](https://whoogle-search--replitcomreside.repl.co) | 🇺🇸 US | English | | | [https://search.notrustverify.ch](https://search.notrustverify.ch) | 🇨🇭 CH | Multi-choice | | diff --git a/misc/instances.txt b/misc/instances.txt index 95927b2..c1ea556 100644 --- a/misc/instances.txt +++ b/misc/instances.txt @@ -15,7 +15,6 @@ https://whoogle2.ungovernable.men https://whoogle3.ungovernable.men https://wgl.frail.duckdns.org https://whoogle.no-logs.com -https://search.rubberverse.xyz https://whoogle.ftw.lol https://whoogle-search--replitcomreside.repl.co https://search.notrustverify.ch From b5ae07613b273ccf6b0f55e5219f7a8474d3059c Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Wed, 20 Dec 2023 11:00:10 -0700 Subject: [PATCH 09/14] Use url params for testing time based result filtering The ":past " query string filtering isn't used anymore since adding the option to filter by time in the result view. --- test/test_results.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_results.py b/test/test_results.py index 64caacd..ad0fd3e 100644 --- a/test/test_results.py +++ b/test/test_results.py @@ -96,13 +96,13 @@ def test_view_my_ip(client): def test_recent_results(client): times = { - 'past year': 365, - 'past month': 31, - 'past week': 7 + 'tbs=qdr:y': 365, + 'tbs=qdr:m': 31, + 'tbs=qdr:w': 7 } for time, num_days in times.items(): - rv = client.get(f'/{Endpoint.search}?q=test :' + time) + rv = client.get(f'/{Endpoint.search}?q=test&' + time) result_divs = get_search_results(rv.data) current_date = datetime.now() From 70dc750c7aa5af43af0780a7b16e7a207f70bcb4 Mon Sep 17 00:00:00 2001 From: Vivek Date: Wed, 20 Dec 2023 10:05:38 -0800 Subject: [PATCH 10/14] Add arg for configuring unix socket perms (#1103) The default unix socket permissions of 600 is too restrictive for many use cases. Added a new argument --unix-socket-perms which is passed to waitress to allow for user configurable socket permissions --- app/routes.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/routes.py b/app/routes.py index 3fcd0cf..23edd13 100644 --- a/app/routes.py +++ b/app/routes.py @@ -626,6 +626,11 @@ def run_app() -> None: default='', metavar='', help='Listen for app on unix socket instead of host:port') + parser.add_argument( + '--unix-socket-perms', + default='600', + metavar='', + help='Octal permissions to use for the Unix domain socket (default 600)') parser.add_argument( '--debug', default=False, @@ -677,7 +682,7 @@ def run_app() -> None: if args.debug: app.run(host=args.host, port=args.port, debug=args.debug) elif args.unix_socket: - waitress.serve(app, unix_socket=args.unix_socket) + waitress.serve(app, unix_socket=args.unix_socket, unix_socket_perms=args.unix_socket_perms) else: waitress.serve( app, From cdbe5507371e11f16771fc5cc8abf6080f6ffac7 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Wed, 20 Dec 2023 11:27:20 -0700 Subject: [PATCH 11/14] Add env vars for hiding favicons and removing daily update check - WHOOGLE_SHOW_FAVICONS: Default on, can be set to 0 to hide favicons and skip the request for fetching them - WHOOGLE_UPDATE_CHECK: Default on, can be set to 0 to disable the daily check for new versions released on github Closes #1098 Closes #1059 --- README.md | 2 ++ app/filter.py | 4 +++- app/routes.py | 3 ++- app/static/css/search.css | 2 +- app/utils/misc.py | 4 ++-- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 63fadf0..2900e69 100644 --- a/README.md +++ b/README.md @@ -422,6 +422,8 @@ There are a few optional environment variables available for customizing a Whoog | WHOOGLE_TOR_SERVICE | Enable/disable the Tor service on startup. Default on -- use '0' to disable. | | WHOOGLE_TOR_USE_PASS | Use password authentication for tor control port. | | WHOOGLE_TOR_CONF | The absolute path to the config file containing the password for the tor control port. Default: ./misc/tor/control.conf WHOOGLE_TOR_PASS must be 1 for this to work.| +| WHOOGLE_SHOW_FAVICONS | Show/hide favicons next to search result URLs. Default on. | +| WHOOGLE_UPDATE_CHECK | Enable/disable the automatic daily check for new versions of Whoogle. Default on. | ### Config Environment Variables These environment variables allow setting default config values, but can be overwritten manually by using the home page config menu. These allow a shortcut for destroying/rebuilding an instance to the same config state every time. diff --git a/app/filter.py b/app/filter.py index 3a80535..42d175f 100644 --- a/app/filter.py +++ b/app/filter.py @@ -244,7 +244,9 @@ class Filter: None (The soup object is modified directly) """ # Skip empty, parentless, or internal links - if not link or not link.parent or not link['href'].startswith('http'): + show_favicons = read_config_bool('WHOOGLE_SHOW_FAVICONS', True) + is_valid_link = link and link.parent and link['href'].startswith('http') + if not show_favicons or not is_valid_link: return parent = link.parent diff --git a/app/routes.py b/app/routes.py index 23edd13..90eeab6 100644 --- a/app/routes.py +++ b/app/routes.py @@ -135,7 +135,8 @@ def before_request_func(): # Check for latest version if needed now = datetime.now() - if now - timedelta(hours=24) > app.config['LAST_UPDATE_CHECK']: + needs_update_check = now - timedelta(hours=24) > app.config['LAST_UPDATE_CHECK'] + if read_config_bool('WHOOGLE_UPDATE_CHECK', True) and needs_update_check: app.config['LAST_UPDATE_CHECK'] = now app.config['HAS_UPDATE'] = check_for_update( app.config['RELEASES_URL'], diff --git a/app/static/css/search.css b/app/static/css/search.css index 6c5df2f..3661efb 100644 --- a/app/static/css/search.css +++ b/app/static/css/search.css @@ -64,7 +64,7 @@ details summary span { padding-right: 5px; } -.sCuL3 { +.has-favicon .sCuL3 { padding-left: 30px; } diff --git a/app/utils/misc.py b/app/utils/misc.py index d5fa5e6..20705bc 100644 --- a/app/utils/misc.py +++ b/app/utils/misc.py @@ -56,8 +56,8 @@ def gen_file_hash(path: str, static_file: str) -> str: return filename_split[0] + '.' + file_hash + filename_split[-1] -def read_config_bool(var: str) -> bool: - val = os.getenv(var, '0') +def read_config_bool(var: str, default: bool=False) -> bool: + val = os.getenv(var, '1' if default else '0') # user can specify one of the following values as 'true' inputs (all # variants with upper case letters will also work): # ('true', 't', '1', 'yes', 'y') From 7313edff4632a4b0c037e0e11dc259c9303a4c1c Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Wed, 20 Dec 2023 12:14:34 -0700 Subject: [PATCH 12/14] Include more options for continuing search in error tmpl The error template previously only included the option to continue a user's search via Farside (whoogle or searxng), and would only appear when an instance was ratelimited. This has been updated to display anytime an exception has occurred, and now includes other options for continuing a search, such as Kagi, DDG, Brave, Ecosia, etc. Closes #1099 --- app/routes.py | 20 +++++++++ app/templates/error.html | 91 ++++++++++++++++++++++++++++++++++------ 2 files changed, 98 insertions(+), 13 deletions(-) diff --git a/app/routes.py b/app/routes.py index 90eeab6..4efc343 100644 --- a/app/routes.py +++ b/app/routes.py @@ -609,6 +609,26 @@ def page_not_found(e): return render_template('error.html', error_message=str(e)), 404 +@app.errorhandler(Exception) +def internal_error(e): + query = '' + if request.method == 'POST': + query = request.form.get('q') + else: + query = request.args.get('q') + + localization_lang = g.user_config.get_localization_lang() + translation = app.config['TRANSLATIONS'][localization_lang] + return render_template( + 'error.html', + error_message='Internal server error (500)', + translation=translation, + farside='https://farside.link', + config=g.user_config, + query=urlparse.unquote(query), + params=g.user_config.to_params(keys=['preferences'])), 500 + + def run_app() -> None: parser = argparse.ArgumentParser( description='Whoogle Search console runner') diff --git a/app/templates/error.html b/app/templates/error.html index d302270..99e87b3 100644 --- a/app/templates/error.html +++ b/app/templates/error.html @@ -20,21 +20,86 @@


- {% if blocked is defined %}

{{ translation['continue-search'] }}

- Whoogle: -
- - {{farside}}/whoogle/search?q={{query}} - -

- Searx: -
- - {{farside}}/searx/search?q={{query}} - + +
+

Other options:

+
- {% endif %}

Return Home From aaf90b52bb919fa3c6146c807a6419f676301ca6 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Mon, 8 Jan 2024 10:46:42 -0700 Subject: [PATCH 13/14] Add public instance [skip ci] Closes #1105 --- README.md | 1 + misc/instances.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 2900e69..4905bc5 100644 --- a/README.md +++ b/README.md @@ -670,6 +670,7 @@ A lot of the app currently piggybacks on Google's existing support for fetching | [https://search.notrustverify.ch](https://search.notrustverify.ch) | 🇨🇭 CH | Multi-choice | | | [https://whoogle.datura.network](https://whoogle.datura.network) | 🇩🇪 DE | Multi-choice | | | [https://whoogle.yepserver.xyz](https://whoogle.yepserver.xyz) | 🇺🇦 UA | Multi-choice | | +| [https://search.nezumi.party](https://search.nezumi.party) | 🇮🇹 IT | Multi-choice | | * A checkmark in the "Cloudflare" category here refers to the use of the reverse proxy, [Cloudflare](https://cloudflare.com). The checkmark will not be listed for a site which uses Cloudflare DNS but rather the proxying service which grants Cloudflare the ability to monitor traffic to the website. diff --git a/misc/instances.txt b/misc/instances.txt index c1ea556..3d64425 100644 --- a/misc/instances.txt +++ b/misc/instances.txt @@ -1,6 +1,7 @@ https://search.albony.xyz https://search.garudalinux.org https://search.dr460nf1r3.org +https://search.nezumi.party https://s.tokhmi.xyz https://search.sethforprivacy.com https://whoogle.dcs0.hu From c216c033ef18a10e51cb596c05b4b6bd248c6a1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 09:55:19 -0700 Subject: [PATCH 14/14] Bump jinja2 from 3.1.2 to 3.1.3 (#1111) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.2...3.1.3) --- updated-dependencies: - dependency-name: jinja2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1a301e3..90642a8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ defusedxml==0.7.1 Flask==2.3.2 idna==3.4 itsdangerous==2.1.2 -Jinja2==3.1.2 +Jinja2==3.1.3 MarkupSafe==2.1.2 more-itertools==9.0.0 packaging==23.0