1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

fix: create template pprint from repr implementation

This commit is contained in:
Keerthi Vasan 2024-02-03 18:57:09 +05:30
parent 0f59f75254
commit 4a10aa1b4f
2 changed files with 23 additions and 13 deletions

View File

@ -3,6 +3,7 @@
import random as random_module import random as random_module
import re import re
import types import types
from collections.abc import Sized
from decimal import ROUND_HALF_UP, Context, Decimal, InvalidOperation, getcontext from decimal import ROUND_HALF_UP, Context, Decimal, InvalidOperation, getcontext
from functools import wraps from functools import wraps
from inspect import unwrap from inspect import unwrap
@ -16,6 +17,7 @@ from django.utils.html import avoid_wrapping, conditional_escape, escape, escape
from django.utils.html import json_script as _json_script from django.utils.html import json_script as _json_script
from django.utils.html import linebreaks, strip_tags from django.utils.html import linebreaks, strip_tags
from django.utils.html import urlize as _urlize from django.utils.html import urlize as _urlize
from django.utils.repr import DjangoRepr
from django.utils.safestring import SafeData, mark_safe from django.utils.safestring import SafeData, mark_safe
from django.utils.text import Truncator, normalize_newlines, phone2numeric from django.utils.text import Truncator, normalize_newlines, phone2numeric
from django.utils.text import slugify as _slugify from django.utils.text import slugify as _slugify
@ -966,3 +968,22 @@ def pluralize(value, arg="s"):
def phone2numeric_filter(value): def phone2numeric_filter(value):
"""Take a phone number and converts it in to its numerical equivalent.""" """Take a phone number and converts it in to its numerical equivalent."""
return phone2numeric(value) return phone2numeric(value)
PRINT_LIMIT = 4096
repr_instance = DjangoRepr()
repr_instance.config(PRINT_LIMIT)
@register.filter(is_safe=True)
def pprint(v):
try:
if isinstance(v, Sized) and len(v) > PRINT_LIMIT:
diff = len(v) - PRINT_LIMIT
repr_instance.fillvalue = "...<trimmed %d bytes string>" % diff
v = repr_instance.repr(v)
except Exception as e:
v = "Error in formatting: %s: %s" % (e.__class__.__name__, e)
return v

View File

@ -5,12 +5,12 @@ import re
import sys import sys
import types import types
import warnings import warnings
from collections.abc import Sized
from pathlib import Path from pathlib import Path
from django.conf import settings from django.conf import settings
from django.http import Http404, HttpResponse, HttpResponseNotFound from django.http import Http404, HttpResponse, HttpResponseNotFound
from django.template import Context, Engine, TemplateDoesNotExist from django.template import Context, Engine, TemplateDoesNotExist
from django.template.defaultfilters import pprint
from django.urls import resolve from django.urls import resolve
from django.utils import timezone from django.utils import timezone
from django.utils.datastructures import MultiValueDict from django.utils.datastructures import MultiValueDict
@ -358,18 +358,7 @@ class ExceptionReporter:
if "vars" in frame: if "vars" in frame:
frame_vars = [] frame_vars = []
for k, v in frame["vars"]: for k, v in frame["vars"]:
v = pprint(v)
try:
if isinstance(v, Sized) and len(v) > self.PRINT_LIMIT:
diff = len(v) - self.PRINT_LIMIT
self.repr_instance.fillvalue = (
"...<trimmed %d bytes string>" % diff
)
v = self.repr_instance.repr(v)
except Exception as e:
v = "Error in formatting: %s: %s" % (e.__class__.__name__, e)
frame_vars.append((k, v)) frame_vars.append((k, v))
frame["vars"] = frame_vars frame["vars"] = frame_vars
frames[i] = frame frames[i] = frame