Projet

Général

Profil

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

Nicolas Roche, 10 août 2020 14:39

Télécharger (4,36 ko)

Voir les différences:

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

 combo/public/templatetags/combo.py | 23 ++++++++++++++++++++++
 tests/test_public_templatetags.py  | 31 ++++++++++++++++++++++++++++++
 2 files changed, 54 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

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

  
312

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

  
323

  
301 324
@register.filter(name='get_group')
302 325
def get_group(group_list, group_name):
303 326
    ret = []
304 327
    for group in group_list:
305 328
        if getattr(group, 'grouper', Ellipsis) == group_name:
306 329
            # Django >= 1.11, namedtuple
307 330
            ret.extend(group.list)
308 331
        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

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

  
159

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

  
174

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