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:
parent
0f59f75254
commit
4a10aa1b4f
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user