Projet

Général

Profil

0001-templatetags-add-removeprefix-and-removesuffix-filte.patch

Nicolas Roche, 07 août 2020 17:19

Télécharger (4,34 ko)

Voir les différences:

Subject: [PATCH] templatetags: add removeprefix and removesuffix filters
 (#45780)

 combo/public/templatetags/combo.py | 20 ++++++++++++++++++++
 tests/test_public_templatetags.py  | 28 ++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+)
combo/public/templatetags/combo.py
293 293
def strip(string, chars=None):
294 294
    if not string:
295 295
        return ''
296 296
    if chars:
297 297
        return force_text(string).strip(force_text(chars))
298 298
    else:
299 299
        return force_text(string).strip()
300 300

  
301
@register.filter
302
def removeprefix(string, prefix=None):
303
    if not string:
304
        return ''
305
    value = force_text(string)
306
    prefix = force_text(prefix)
307
    if prefix and value.startswith(prefix):
308
        return value[len(prefix):]
309
    return value
310

  
311
@register.filter
312
def removesuffix(string, suffix=None):
313
    if not string:
314
        return ''
315
    value = force_text(string)
316
    suffix = force_text(suffix)
317
    if suffix and value.endswith(suffix):
318
        return value[:-len(suffix)]
319
    return value
320

  
301 321
@register.filter(name='get_group')
302 322
def get_group(group_list, group_name):
303 323
    ret = []
304 324
    for group in group_list:
305 325
        if getattr(group, 'grouper', Ellipsis) == group_name:
306 326
            # Django >= 1.11, namedtuple
307 327
            ret.extend(group.list)
308 328
        elif not hasattr(group, 'grouper') and group['grouper'] == group_name:
tests/test_public_templatetags.py
136 136
    assert tmpl.render(Context({'foo': None})) == ''
137 137
    assert tmpl.render(Context({'foo': ' foo bar '})) == 'foo bar'
138 138
    assert tmpl.render(Context({'foo': ' foo bar\t'})) == 'foo bar'
139 139
    assert tmpl.render(Context({'foo': ' félé  '})) == 'félé'
140 140
    tmpl = Template('{{ foo|strip:"XY" }}')
141 141
    assert tmpl.render(Context({'foo': 'XXfoo barXYX'})) == 'foo bar'
142 142
    assert tmpl.render(Context({'foo': ' foo barXX'})) == ' foo bar'
143 143

  
144
def test_removeprefix_templatetag():
145
    tmpl = Template('{{ foo|removeprefix }}')
146
    assert tmpl.render(Context()) == ''
147
    assert tmpl.render(Context({'foo': None})) == ''
148
    assert tmpl.render(Context({'foo': 'foo bar'})) == 'foo bar'
149
    tmpl = Template('{{ foo|removeprefix:"" }}')
150
    assert tmpl.render(Context({'foo': 'foo bar'})) == 'foo bar'
151
    tmpl = Template('{{ foo|removeprefix:"XY" }}')
152
    assert tmpl.render(Context({'foo': 'XYfoo barXY'})) == 'foo barXY'
153
    assert tmpl.render(Context({'foo': 'foo bar'})) == 'foo bar'
154
    assert tmpl.render(Context({'foo': 'xyfoo barXY'})) == 'xyfoo barXY'
155
    assert tmpl.render(Context({'foo': ' XYfoo barXY'})) == ' XYfoo barXY'
156
    assert tmpl.render(Context({'foo': 'XYXYfoo barXY'})) == 'XYfoo barXY'
157

  
158
def test_removesuffix_templatetag():
159
    tmpl = Template('{{ foo|removesuffix }}')
160
    assert tmpl.render(Context()) == ''
161
    assert tmpl.render(Context({'foo': None})) == ''
162
    assert tmpl.render(Context({'foo': 'foo bar'})) == 'foo bar'
163
    tmpl = Template('{{ foo|removesuffix:"" }}')
164
    assert tmpl.render(Context({'foo': 'foo bar'})) == 'foo bar'
165
    tmpl = Template('{{ foo|removesuffix:"XY" }}')
166
    assert tmpl.render(Context({'foo': 'XYfoo barXY'})) == 'XYfoo bar'
167
    assert tmpl.render(Context({'foo': 'foo bar'})) == 'foo bar'
168
    assert tmpl.render(Context({'foo': 'XYfoo barxy'})) == 'XYfoo barxy'
169
    assert tmpl.render(Context({'foo': 'XYfoo barXY '})) == 'XYfoo barXY '
170
    assert tmpl.render(Context({'foo': 'XYfoo barXYXY'})) == 'XYfoo barXY'
171

  
144 172
def test_get_group():
145 173
    context = Context({'cities': [
146 174
        {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
147 175
        {'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
148 176
        {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
149 177
        {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
150 178
        {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
151 179
    ]})
152
-