MCPcopy
hub / github.com/django/django / lazy_number

Function lazy_number

django/utils/translation/__init__.py:115–164  ·  view source on GitHub ↗
(func, resultclass, number=None, **kwargs)

Source from the content-addressed store, hash-verified

113
114
115def lazy_number(func, resultclass, number=None, **kwargs):
116 if isinstance(number, int):
117 kwargs["number"] = number
118 proxy = lazy(func, resultclass)(**kwargs)
119 else:
120 original_kwargs = kwargs.copy()
121
122 class NumberAwareString(resultclass):
123 def __bool__(self):
124 return bool(kwargs["singular"])
125
126 def _get_number_value(self, values):
127 try:
128 return values[number]
129 except KeyError:
130 raise KeyError(
131 "Your dictionary lacks key '%s'. Please provide "
132 "it, because it is required to determine whether "
133 "string is singular or plural." % number
134 )
135
136 def _translate(self, number_value):
137 kwargs["number"] = number_value
138 return func(**kwargs)
139
140 def format(self, *args, **kwargs):
141 number_value = (
142 self._get_number_value(kwargs) if kwargs and number else args[0]
143 )
144 return self._translate(number_value).format(*args, **kwargs)
145
146 def __mod__(self, rhs):
147 if isinstance(rhs, dict) and number:
148 number_value = self._get_number_value(rhs)
149 else:
150 number_value = rhs
151 translated = self._translate(number_value)
152 try:
153 translated %= rhs
154 except TypeError:
155 # String doesn't contain a placeholder for the number.
156 pass
157 return translated
158
159 proxy = lazy(lambda **kwargs: NumberAwareString(), NumberAwareString)(**kwargs)
160 proxy.__reduce__ = lambda: (
161 _lazy_number_unpickle,
162 (func, resultclass, number, original_kwargs),
163 )
164 return proxy
165
166
167def _lazy_number_unpickle(func, resultclass, number, kwargs):

Callers 3

_lazy_number_unpickleFunction · 0.85
ngettext_lazyFunction · 0.85
npgettext_lazyFunction · 0.85

Calls 3

lazyFunction · 0.90
NumberAwareStringClass · 0.85
copyMethod · 0.45

Tested by

no test coverage detected