From 9a90b0ef6269768b13386f6e8004ceb378dc2f92 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Fri, 3 Oct 2025 22:26:21 +0300 Subject: [PATCH 01/17] fix for django unicode decode error --- debug_toolbar/panels/settings.py | 10 +++++++++- tests/panels/test_settings.py | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/debug_toolbar/panels/settings.py b/debug_toolbar/panels/settings.py index 68ab44c0b..cf8b4fe79 100644 --- a/debug_toolbar/panels/settings.py +++ b/debug_toolbar/panels/settings.py @@ -1,6 +1,7 @@ from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from django.views.debug import get_default_exception_reporter_filter +from django.utils.encoding import DjangoUnicodeDecodeError from debug_toolbar.panels import Panel @@ -24,10 +25,17 @@ def title(self): ) def generate_stats(self, request, response): + + def catch_force_errors(force_function, value): + try: + return force_function(value) + except DjangoUnicodeDecodeError: + return 'Debug toolbar was unable to parse value' + self.record_stats( { "settings": { - key: force_str(value) + key: catch_force_errors(force_str, value) for key, value in sorted(get_safe_settings().items()) } } diff --git a/tests/panels/test_settings.py b/tests/panels/test_settings.py index 89b016dc0..3eb40f0e7 100644 --- a/tests/panels/test_settings.py +++ b/tests/panels/test_settings.py @@ -3,7 +3,7 @@ from ..base import IntegrationTestCase -@override_settings(DEBUG=True) +@override_settings(DEBUG=True, RANDOM_SETTING=bytes.fromhex("a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2")) class SettingsIntegrationTestCase(IntegrationTestCase): def test_panel_title(self): response = self.client.get("/regular/basic/") From f8a2f9102e0897a9a477535e9c8aa063e2733900 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Fri, 3 Oct 2025 22:40:49 +0300 Subject: [PATCH 02/17] fix for django unicode decode error --- .git-blame-ignore-revs | 0 docs/changes.rst | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..e69de29bb diff --git a/docs/changes.rst b/docs/changes.rst index 352b4f946..d4158859d 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -16,6 +16,8 @@ Pending * Upgraded CI ``postgis`` version to 17-3.5. * Added how to generate the documentation locally to the contributing documentation. +* Fixed force_str to catch error and give out degault string if value is not + serializable 6.0.0 (2025-07-22) ------------------ From d6309f6c8902b2cb116c8e8bcc029555071d9f70 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Fri, 3 Oct 2025 22:54:33 +0300 Subject: [PATCH 03/17] fixed linting problem --- tests/panels/test_settings.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/panels/test_settings.py b/tests/panels/test_settings.py index 3eb40f0e7..5ea5345a9 100644 --- a/tests/panels/test_settings.py +++ b/tests/panels/test_settings.py @@ -3,7 +3,12 @@ from ..base import IntegrationTestCase -@override_settings(DEBUG=True, RANDOM_SETTING=bytes.fromhex("a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2")) +@override_settings( + DEBUG=True, + RANDOM_SETTING=bytes.fromhex( + "a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2" + ), +) class SettingsIntegrationTestCase(IntegrationTestCase): def test_panel_title(self): response = self.client.get("/regular/basic/") From 6aaa5ad19ddd7d806211f0a398337b70bc7cf071 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 19:42:41 +0000 Subject: [PATCH 04/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- debug_toolbar/panels/settings.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/debug_toolbar/panels/settings.py b/debug_toolbar/panels/settings.py index cf8b4fe79..e985e7790 100644 --- a/debug_toolbar/panels/settings.py +++ b/debug_toolbar/panels/settings.py @@ -1,7 +1,6 @@ -from django.utils.encoding import force_str +from django.utils.encoding import DjangoUnicodeDecodeError, force_str from django.utils.translation import gettext_lazy as _ from django.views.debug import get_default_exception_reporter_filter -from django.utils.encoding import DjangoUnicodeDecodeError from debug_toolbar.panels import Panel @@ -25,12 +24,11 @@ def title(self): ) def generate_stats(self, request, response): - def catch_force_errors(force_function, value): try: return force_function(value) except DjangoUnicodeDecodeError: - return 'Debug toolbar was unable to parse value' + return "Debug toolbar was unable to parse value" self.record_stats( { From d10593693e699c016e107204c0448444c5d0d3ef Mon Sep 17 00:00:00 2001 From: James Gutu Date: Fri, 3 Oct 2025 23:39:23 +0300 Subject: [PATCH 05/17] corrected spelling mistake --- docs/changes.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changes.rst b/docs/changes.rst index d4158859d..78544fc6a 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -18,6 +18,8 @@ Pending documentation. * Fixed force_str to catch error and give out degault string if value is not serializable +* Fixed force_str to catch error and give out default string if value is not + serializable. 6.0.0 (2025-07-22) ------------------ From 9614efef84b305bb6bd8f54217b47dc661890abe Mon Sep 17 00:00:00 2001 From: James Gutu Date: Wed, 15 Oct 2025 23:00:50 +0300 Subject: [PATCH 06/17] Update debug_toolbar/panels/settings.py Co-authored-by: Tim Schilling --- debug_toolbar/panels/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debug_toolbar/panels/settings.py b/debug_toolbar/panels/settings.py index e985e7790..6f9a3cdd9 100644 --- a/debug_toolbar/panels/settings.py +++ b/debug_toolbar/panels/settings.py @@ -28,7 +28,7 @@ def catch_force_errors(force_function, value): try: return force_function(value) except DjangoUnicodeDecodeError: - return "Debug toolbar was unable to parse value" + return "Django Debug Toolbar was unable to parse value." self.record_stats( { From 1111acecea72234574601415e34c54cabded5b72 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Wed, 15 Oct 2025 23:01:13 +0300 Subject: [PATCH 07/17] Update docs/changes.rst Co-authored-by: Tim Schilling --- docs/changes.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changes.rst b/docs/changes.rst index 78544fc6a..79f392fe7 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -13,6 +13,8 @@ Pending class instance, regardless if any data was generated. * Fixed selenium tests for CI by using psycopg for Python 3.13 runs. * Added ``CommunityPanel`` containing links to documentation and resources. +* Updated logic that forces values to strings to render "Django Debug Toolbar was + unable to parse value." when there's a decoding error. * Upgraded CI ``postgis`` version to 17-3.5. * Added how to generate the documentation locally to the contributing documentation. From 763379846c9ffc47851512002a4334af92a3e5a1 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Thu, 16 Oct 2025 22:17:48 +0300 Subject: [PATCH 08/17] created sanitize.py file --- debug_toolbar/sanitize.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 debug_toolbar/sanitize.py diff --git a/debug_toolbar/sanitize.py b/debug_toolbar/sanitize.py new file mode 100644 index 000000000..e69de29bb From 85b93f47076492205ea60fec6a43e8fe4dbc26b8 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Thu, 16 Oct 2025 22:31:06 +0300 Subject: [PATCH 09/17] changed import reference of force_str to sanitize.py --- debug_toolbar/forms.py | 2 +- debug_toolbar/panels/settings.py | 11 +++-------- debug_toolbar/panels/sql/tracking.py | 2 +- debug_toolbar/panels/templates/panel.py | 2 +- debug_toolbar/sanitize.py | 8 ++++++++ debug_toolbar/store.py | 3 ++- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/debug_toolbar/forms.py b/debug_toolbar/forms.py index 61444b43c..83fb19ebb 100644 --- a/debug_toolbar/forms.py +++ b/debug_toolbar/forms.py @@ -3,7 +3,7 @@ from django import forms from django.core import signing from django.core.exceptions import ValidationError -from django.utils.encoding import force_str +from debug_toolbar.sanitize import force_str class SignedDataForm(forms.Form): diff --git a/debug_toolbar/panels/settings.py b/debug_toolbar/panels/settings.py index 6f9a3cdd9..177f611f6 100644 --- a/debug_toolbar/panels/settings.py +++ b/debug_toolbar/panels/settings.py @@ -1,8 +1,8 @@ -from django.utils.encoding import DjangoUnicodeDecodeError, force_str from django.utils.translation import gettext_lazy as _ from django.views.debug import get_default_exception_reporter_filter from debug_toolbar.panels import Panel +from debug_toolbar.sanitize import force_str get_safe_settings = get_default_exception_reporter_filter().get_safe_settings @@ -24,17 +24,12 @@ def title(self): ) def generate_stats(self, request, response): - def catch_force_errors(force_function, value): - try: - return force_function(value) - except DjangoUnicodeDecodeError: - return "Django Debug Toolbar was unable to parse value." - self.record_stats( { "settings": { - key: catch_force_errors(force_str, value) + key: force_str(value) for key, value in sorted(get_safe_settings().items()) } } ) + diff --git a/debug_toolbar/panels/sql/tracking.py b/debug_toolbar/panels/sql/tracking.py index 45e0c0c17..9100bf39f 100644 --- a/debug_toolbar/panels/sql/tracking.py +++ b/debug_toolbar/panels/sql/tracking.py @@ -5,7 +5,7 @@ from time import perf_counter import django.test.testcases -from django.utils.encoding import force_str +from debug_toolbar.sanitize import force_str from debug_toolbar.utils import get_stack_trace, get_template_info diff --git a/debug_toolbar/panels/templates/panel.py b/debug_toolbar/panels/templates/panel.py index 6dbd02ee0..381bf2dcb 100644 --- a/debug_toolbar/panels/templates/panel.py +++ b/debug_toolbar/panels/templates/panel.py @@ -10,10 +10,10 @@ from django.test.signals import template_rendered from django.test.utils import instrumented_test_render from django.urls import path -from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel +from debug_toolbar.sanitize import force_str from debug_toolbar.panels.sql.tracking import SQLQueryTriggered, allow_sql from debug_toolbar.panels.templates import views diff --git a/debug_toolbar/sanitize.py b/debug_toolbar/sanitize.py index e69de29bb..79fd3dd99 100644 --- a/debug_toolbar/sanitize.py +++ b/debug_toolbar/sanitize.py @@ -0,0 +1,8 @@ +from django.utils.encoding import DjangoUnicodeDecodeError, force_str as force_string + + +def force_str(force_function, value): + try: + return force_string(value) + except DjangoUnicodeDecodeError: + return "Django Debug Toolbar was unable to parse value." diff --git a/debug_toolbar/store.py b/debug_toolbar/store.py index 02a2a0f72..b922b054f 100644 --- a/debug_toolbar/store.py +++ b/debug_toolbar/store.py @@ -6,9 +6,10 @@ from django.core.serializers.json import DjangoJSONEncoder from django.db import transaction -from django.utils.encoding import force_str + from django.utils.module_loading import import_string +from debug_toolbar.sanitize import force_str from debug_toolbar import settings as dt_settings from debug_toolbar.models import HistoryEntry From eb2dcf8997c955c322b2ac25d268396acb417778 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Thu, 16 Oct 2025 22:47:08 +0300 Subject: [PATCH 10/17] failing tests --- debug_toolbar/sanitize.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debug_toolbar/sanitize.py b/debug_toolbar/sanitize.py index 79fd3dd99..0af47ea52 100644 --- a/debug_toolbar/sanitize.py +++ b/debug_toolbar/sanitize.py @@ -1,7 +1,7 @@ from django.utils.encoding import DjangoUnicodeDecodeError, force_str as force_string -def force_str(force_function, value): +def force_str(value): try: return force_string(value) except DjangoUnicodeDecodeError: From 67bd4497f356cc2a691f87a0aa148218fada8b1e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 19:46:33 +0000 Subject: [PATCH 11/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- debug_toolbar/forms.py | 1 + debug_toolbar/panels/settings.py | 1 - debug_toolbar/panels/sql/tracking.py | 2 +- debug_toolbar/panels/templates/panel.py | 2 +- debug_toolbar/store.py | 3 +-- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/debug_toolbar/forms.py b/debug_toolbar/forms.py index 83fb19ebb..ca9d1a9b0 100644 --- a/debug_toolbar/forms.py +++ b/debug_toolbar/forms.py @@ -3,6 +3,7 @@ from django import forms from django.core import signing from django.core.exceptions import ValidationError + from debug_toolbar.sanitize import force_str diff --git a/debug_toolbar/panels/settings.py b/debug_toolbar/panels/settings.py index 177f611f6..4f91e39fa 100644 --- a/debug_toolbar/panels/settings.py +++ b/debug_toolbar/panels/settings.py @@ -32,4 +32,3 @@ def generate_stats(self, request, response): } } ) - diff --git a/debug_toolbar/panels/sql/tracking.py b/debug_toolbar/panels/sql/tracking.py index 9100bf39f..21d96c861 100644 --- a/debug_toolbar/panels/sql/tracking.py +++ b/debug_toolbar/panels/sql/tracking.py @@ -5,8 +5,8 @@ from time import perf_counter import django.test.testcases -from debug_toolbar.sanitize import force_str +from debug_toolbar.sanitize import force_str from debug_toolbar.utils import get_stack_trace, get_template_info try: diff --git a/debug_toolbar/panels/templates/panel.py b/debug_toolbar/panels/templates/panel.py index 381bf2dcb..da9c28207 100644 --- a/debug_toolbar/panels/templates/panel.py +++ b/debug_toolbar/panels/templates/panel.py @@ -13,9 +13,9 @@ from django.utils.translation import gettext_lazy as _ from debug_toolbar.panels import Panel -from debug_toolbar.sanitize import force_str from debug_toolbar.panels.sql.tracking import SQLQueryTriggered, allow_sql from debug_toolbar.panels.templates import views +from debug_toolbar.sanitize import force_str if find_spec("jinja2"): from debug_toolbar.panels.templates.jinja2 import patch_jinja_render diff --git a/debug_toolbar/store.py b/debug_toolbar/store.py index b922b054f..b4e32788d 100644 --- a/debug_toolbar/store.py +++ b/debug_toolbar/store.py @@ -6,12 +6,11 @@ from django.core.serializers.json import DjangoJSONEncoder from django.db import transaction - from django.utils.module_loading import import_string -from debug_toolbar.sanitize import force_str from debug_toolbar import settings as dt_settings from debug_toolbar.models import HistoryEntry +from debug_toolbar.sanitize import force_str class DebugToolbarJSONEncoder(DjangoJSONEncoder): From 07b057be5547ee1bc41242fa47eb6a7b028f9f24 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Fri, 17 Oct 2025 00:34:55 +0300 Subject: [PATCH 12/17] added tests --- debug_toolbar/panels/sql/tracking.py | 6 ++---- debug_toolbar/sanitize.py | 10 ++++++++-- tests/test_sanitize.py | 20 ++++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 tests/test_sanitize.py diff --git a/debug_toolbar/panels/sql/tracking.py b/debug_toolbar/panels/sql/tracking.py index 21d96c861..6546dc0c2 100644 --- a/debug_toolbar/panels/sql/tracking.py +++ b/debug_toolbar/panels/sql/tracking.py @@ -128,10 +128,8 @@ def _decode(self, param): # make sure datetime, date and time are converted to string by force_str CONVERT_TYPES = (datetime.datetime, datetime.date, datetime.time) - try: - return force_str(param, strings_only=not isinstance(param, CONVERT_TYPES)) - except UnicodeDecodeError: - return "(encoded string)" + return force_str(param, strings_only=not isinstance(param, CONVERT_TYPES)) + def _last_executed_query(self, sql, params): """Get the last executed query from the connection.""" diff --git a/debug_toolbar/sanitize.py b/debug_toolbar/sanitize.py index 0af47ea52..9de29d1d7 100644 --- a/debug_toolbar/sanitize.py +++ b/debug_toolbar/sanitize.py @@ -1,8 +1,14 @@ from django.utils.encoding import DjangoUnicodeDecodeError, force_str as force_string -def force_str(value): +# def force_str(s, encoding="utf-8", strings_only=False, errors="strict"): +# try: +# return force_string(s, encoding, strings_only, errors) +# except DjangoUnicodeDecodeError: +# return "Django Debug Toolbar was unable to parse value." + +def force_str(s, *args, **kwargs): try: - return force_string(value) + return force_string(s, *args, **kwargs) except DjangoUnicodeDecodeError: return "Django Debug Toolbar was unable to parse value." diff --git a/tests/test_sanitize.py b/tests/test_sanitize.py new file mode 100644 index 000000000..cf4a1d191 --- /dev/null +++ b/tests/test_sanitize.py @@ -0,0 +1,20 @@ +import unittest + +from debug_toolbar.sanitize import force_str + + +class ForceStrTestCase(unittest.TestCase): + def test_success_convert(self): + input = 0 + + self.assertEqual( + force_str(input), + "0" + ) + + def test_failed_convert(self): + input = bytes.fromhex("a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2") + self.assertEqual( + force_str(input), + "Django Debug Toolbar was unable to parse value." + ) From 517ae7da3875cae8ed1478f13dcc3c53333639f4 Mon Sep 17 00:00:00 2001 From: James Gutu Date: Fri, 17 Oct 2025 00:38:29 +0300 Subject: [PATCH 13/17] added comment to sanitize.py --- debug_toolbar/sanitize.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/debug_toolbar/sanitize.py b/debug_toolbar/sanitize.py index 9de29d1d7..fd3cb85da 100644 --- a/debug_toolbar/sanitize.py +++ b/debug_toolbar/sanitize.py @@ -1,13 +1,11 @@ from django.utils.encoding import DjangoUnicodeDecodeError, force_str as force_string -# def force_str(s, encoding="utf-8", strings_only=False, errors="strict"): -# try: -# return force_string(s, encoding, strings_only, errors) -# except DjangoUnicodeDecodeError: -# return "Django Debug Toolbar was unable to parse value." - def force_str(s, *args, **kwargs): + ''' + Forces values to strings. + Will return "Django Debug Toolbar was unable to parse value." when there's a decoding error. + ''' try: return force_string(s, *args, **kwargs) except DjangoUnicodeDecodeError: From a25a9a7722c45da4688d21a07f9ab0e3c6f73745 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 21:39:25 +0000 Subject: [PATCH 14/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- debug_toolbar/panels/sql/tracking.py | 1 - debug_toolbar/sanitize.py | 4 ++-- tests/test_sanitize.py | 12 +++++------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/debug_toolbar/panels/sql/tracking.py b/debug_toolbar/panels/sql/tracking.py index 6546dc0c2..2cda76d1a 100644 --- a/debug_toolbar/panels/sql/tracking.py +++ b/debug_toolbar/panels/sql/tracking.py @@ -130,7 +130,6 @@ def _decode(self, param): CONVERT_TYPES = (datetime.datetime, datetime.date, datetime.time) return force_str(param, strings_only=not isinstance(param, CONVERT_TYPES)) - def _last_executed_query(self, sql, params): """Get the last executed query from the connection.""" # Django's psycopg3 backend creates a new cursor in its implementation of the diff --git a/debug_toolbar/sanitize.py b/debug_toolbar/sanitize.py index fd3cb85da..4aaaa1a62 100644 --- a/debug_toolbar/sanitize.py +++ b/debug_toolbar/sanitize.py @@ -2,10 +2,10 @@ def force_str(s, *args, **kwargs): - ''' + """ Forces values to strings. Will return "Django Debug Toolbar was unable to parse value." when there's a decoding error. - ''' + """ try: return force_string(s, *args, **kwargs) except DjangoUnicodeDecodeError: diff --git a/tests/test_sanitize.py b/tests/test_sanitize.py index cf4a1d191..539980bd3 100644 --- a/tests/test_sanitize.py +++ b/tests/test_sanitize.py @@ -7,14 +7,12 @@ class ForceStrTestCase(unittest.TestCase): def test_success_convert(self): input = 0 - self.assertEqual( - force_str(input), - "0" - ) + self.assertEqual(force_str(input), "0") def test_failed_convert(self): - input = bytes.fromhex("a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2") + input = bytes.fromhex( + "a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2" + ) self.assertEqual( - force_str(input), - "Django Debug Toolbar was unable to parse value." + force_str(input), "Django Debug Toolbar was unable to parse value." ) From c2599b10dd22475b99b66630d40042f91f409ef1 Mon Sep 17 00:00:00 2001 From: Tim Schilling Date: Thu, 16 Oct 2025 16:54:29 -0500 Subject: [PATCH 15/17] Revert test change to confirm bug. --- tests/panels/test_settings.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/panels/test_settings.py b/tests/panels/test_settings.py index 5ea5345a9..89b016dc0 100644 --- a/tests/panels/test_settings.py +++ b/tests/panels/test_settings.py @@ -3,12 +3,7 @@ from ..base import IntegrationTestCase -@override_settings( - DEBUG=True, - RANDOM_SETTING=bytes.fromhex( - "a3f2b8c14e972d5a8fb3c7291a64e0859c472bf63d18a0945e73b2c84f917ae2" - ), -) +@override_settings(DEBUG=True) class SettingsIntegrationTestCase(IntegrationTestCase): def test_panel_title(self): response = self.client.get("/regular/basic/") From fab307e52b949a47bc4d09a0de2602b7ddf5b6f4 Mon Sep 17 00:00:00 2001 From: Tim Schilling Date: Thu, 16 Oct 2025 16:58:16 -0500 Subject: [PATCH 16/17] Fix doc8 error for change log entry. --- docs/changes.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index 79f392fe7..0fdf4a048 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -13,8 +13,8 @@ Pending class instance, regardless if any data was generated. * Fixed selenium tests for CI by using psycopg for Python 3.13 runs. * Added ``CommunityPanel`` containing links to documentation and resources. -* Updated logic that forces values to strings to render "Django Debug Toolbar was - unable to parse value." when there's a decoding error. +* Updated logic that forces values to strings to render "Django Debug Toolbar + was unable to parse value." when there's a decoding error. * Upgraded CI ``postgis`` version to 17-3.5. * Added how to generate the documentation locally to the contributing documentation. From d85033e60a2fe8b49b8abc52324229b932480514 Mon Sep 17 00:00:00 2001 From: Tim Schilling Date: Fri, 17 Oct 2025 13:44:31 -0500 Subject: [PATCH 17/17] Tweak the changelog entry again. --- docs/changes.rst | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index 0fdf4a048..667251b4f 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -13,15 +13,12 @@ Pending class instance, regardless if any data was generated. * Fixed selenium tests for CI by using psycopg for Python 3.13 runs. * Added ``CommunityPanel`` containing links to documentation and resources. -* Updated logic that forces values to strings to render "Django Debug Toolbar - was unable to parse value." when there's a decoding error. * Upgraded CI ``postgis`` version to 17-3.5. * Added how to generate the documentation locally to the contributing documentation. -* Fixed force_str to catch error and give out degault string if value is not - serializable -* Fixed force_str to catch error and give out default string if value is not - serializable. +* Updated logic that forces values to strings (``force_str``) to render + "Django Debug Toolbar was unable to parse value." when there's a decoding + error. 6.0.0 (2025-07-22) ------------------