Delay formatting until it's actually needed. Useful when the format string or one of the arguments is lazy. Not using Django's lazy because it is too slow.
| 68 | |
| 69 | |
| 70 | class lazy_format: |
| 71 | """ |
| 72 | Delay formatting until it's actually needed. |
| 73 | |
| 74 | Useful when the format string or one of the arguments is lazy. |
| 75 | |
| 76 | Not using Django's lazy because it is too slow. |
| 77 | """ |
| 78 | __slots__ = ('format_string', 'args', 'kwargs', 'result') |
| 79 | |
| 80 | def __init__(self, format_string, *args, **kwargs): |
| 81 | self.result = None |
| 82 | self.format_string = format_string |
| 83 | self.args = args |
| 84 | self.kwargs = kwargs |
| 85 | |
| 86 | def __str__(self): |
| 87 | if self.result is None: |
| 88 | self.result = self.format_string.format(*self.args, **self.kwargs) |
| 89 | self.format_string, self.args, self.kwargs = None, None, None |
| 90 | return self.result |
| 91 | |
| 92 | def __mod__(self, value): |
| 93 | return str(self) % value |
no outgoing calls