Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/rest_framework/utils/representation.py: 9%
59 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1"""
2Helper functions for creating user-friendly representations
3of serializer classes and serializer fields.
4"""
5import re
7from django.db import models
8from django.utils.encoding import force_str
9from django.utils.functional import Promise
12def manager_repr(value):
13 model = value.model
14 opts = model._meta
15 names_and_managers = [
16 (manager.name, manager)
17 for manager
18 in opts.managers
19 ]
20 for manager_name, manager_instance in names_and_managers:
21 if manager_instance == value:
22 return '%s.%s.all()' % (model._meta.object_name, manager_name)
23 return repr(value)
26def smart_repr(value):
27 if isinstance(value, models.Manager):
28 return manager_repr(value)
30 if isinstance(value, Promise) and value._delegate_text:
31 value = force_str(value)
33 value = repr(value)
35 # Representations like u'help text'
36 # should simply be presented as 'help text'
37 if value.startswith("u'") and value.endswith("'"):
38 return value[1:]
40 # Representations like
41 # <django.core.validators.RegexValidator object at 0x1047af050>
42 # Should be presented as
43 # <django.core.validators.RegexValidator object>
44 return re.sub(' at 0x[0-9A-Fa-f]{4,32}>', '>', value)
47def field_repr(field, force_many=False):
48 kwargs = field._kwargs
49 if force_many:
50 kwargs = kwargs.copy()
51 kwargs['many'] = True
52 kwargs.pop('child', None)
54 arg_string = ', '.join([smart_repr(val) for val in field._args])
55 kwarg_string = ', '.join([
56 '%s=%s' % (key, smart_repr(val))
57 for key, val in sorted(kwargs.items())
58 ])
59 if arg_string and kwarg_string:
60 arg_string += ', '
62 if force_many:
63 class_name = force_many.__class__.__name__
64 else:
65 class_name = field.__class__.__name__
67 return "%s(%s%s)" % (class_name, arg_string, kwarg_string)
70def serializer_repr(serializer, indent, force_many=None):
71 ret = field_repr(serializer, force_many) + ':'
72 indent_str = ' ' * indent
74 if force_many:
75 fields = force_many.fields
76 else:
77 fields = serializer.fields
79 for field_name, field in fields.items():
80 ret += '\n' + indent_str + field_name + ' = '
81 if hasattr(field, 'fields'):
82 ret += serializer_repr(field, indent + 1)
83 elif hasattr(field, 'child'):
84 ret += list_repr(field, indent + 1)
85 elif hasattr(field, 'child_relation'):
86 ret += field_repr(field.child_relation, force_many=field.child_relation)
87 else:
88 ret += field_repr(field)
90 if serializer.validators:
91 ret += '\n' + indent_str + 'class Meta:'
92 ret += '\n' + indent_str + ' validators = ' + smart_repr(serializer.validators)
94 return ret
97def list_repr(serializer, indent):
98 child = serializer.child
99 if hasattr(child, 'fields'):
100 return serializer_repr(serializer, indent, force_many=child)
101 return field_repr(serializer)