1
0
mirror of https://github.com/django/django.git synced 2025-06-08 13:09:13 +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 re
import types
from collections.abc import Sized
from decimal import ROUND_HALF_UP, Context, Decimal, InvalidOperation, getcontext
from functools import wraps
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 linebreaks, strip_tags
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.text import Truncator, normalize_newlines, phone2numeric
from django.utils.text import slugify as _slugify
@ -966,3 +968,22 @@ def pluralize(value, arg="s"):
def phone2numeric_filter(value):
"""Take a phone number and converts it in to its numerical equivalent."""
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 types
import warnings
from collections.abc import Sized
from pathlib import Path
from django.conf import settings
from django.http import Http404, HttpResponse, HttpResponseNotFound
from django.template import Context, Engine, TemplateDoesNotExist
from django.template.defaultfilters import pprint
from django.urls import resolve
from django.utils import timezone
from django.utils.datastructures import MultiValueDict
@ -358,18 +358,7 @@ class ExceptionReporter:
if "vars" in frame:
frame_vars = []
for k, v in frame["vars"]:
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)
v = pprint(v)
frame_vars.append((k, v))
frame["vars"] = frame_vars
frames[i] = frame