From 5dea3f7d9b52cc3dbcb8abfa3ac962f6bd6db838 Mon Sep 17 00:00:00 2001 From: mayur-srivastava Date: Sun, 9 Jun 2019 09:35:29 -0400 Subject: [PATCH] Refactor _prepare_attribute_parts() to use in both make_attrgetter() and make_multi_attrgetter() --- jinja2/filters.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/jinja2/filters.py b/jinja2/filters.py index 22457422..8504c7b9 100644 --- a/jinja2/filters.py +++ b/jinja2/filters.py @@ -65,12 +65,7 @@ def make_attrgetter(environment, attribute, postprocess=None): to access attributes of attributes. Integer parts in paths are looked up as integers. """ - if attribute is None: - attribute = [] - elif isinstance(attribute, string_types): - attribute = [int(x) if x.isdigit() else x for x in attribute.split('.')] - else: - attribute = [attribute] + attribute = _prepare_attribute_parts(attribute) def attrgetter(item): for part in attribute: @@ -95,14 +90,6 @@ def make_multi_attrgetter(environment, attribute, postprocess=None): Examples of attribute: "attr1,attr2", "attr1.inner1.0,attr2.inner2.0", etc. """ - def _prepare_attribute_parts(attr): - if attr is None: - return [] - elif isinstance(attribute, string_types): - return [int(x) if x.isdigit() else x for x in attr.split('.')] - else: - return [attr] - attribute_parts = attribute.split(',') if isinstance(attribute, string_types) else [attribute] attribute = [_prepare_attribute_parts(attribute_part) for attribute_part in attribute_parts] @@ -122,6 +109,15 @@ def make_multi_attrgetter(environment, attribute, postprocess=None): return attrgetter +def _prepare_attribute_parts(attr): + if attr is None: + return [] + elif isinstance(attr, string_types): + return [int(x) if x.isdigit() else x for x in attr.split('.')] + else: + return [attr] + + def do_forceescape(value): """Enforce HTML escaping. This will probably double escape variables.""" if hasattr(value, '__html__'): -- 2.47.2