parameters: (environment, attribute)
return_statement: return attrgetter
docstring: Returns a callable that looks up the given attribute from a
      passed object with the rules of the environment.  Dots are allowed
      to access attributes of attributes.  Integer parts in paths are
      looked up as integers.
docstring_summary: Returns a callable that looks up the given attribute from a
      passed object with the rules of the environment.  Dots are allowed
      to access attributes of attributes.  Integer parts in paths are
      looked up as integers.
docstring_tokens: Returns a callable that looks up the given attribute from a passed object with the rules of the environment . Dots are allowed to access attributes of attributes . Integer parts in paths are looked up as integers .
function: def make_attrgetter(environment, attribute):
      """Returns a callable that looks up the given attribute from a
      passed object with the rules of the environment.  Dots are allowed
      to access attributes of attributes.  Integer parts in paths are
      looked up as integers.
      """
      if not isinstance(attribute, string_types) \
         or ('.' not in attribute and not attribute.isdigit()):
          return lambda x: environment.getitem(x, attribute)
      attribute = attribute.split('.')
      def attrgetter(item):
          for part in attribute:
              if part.isdigit():
                  part = int(part)
              item = environment.getitem(item, part)
          return item
      return attrgetter
function_tokens: def make_attrgetter ( environment , attribute ) : if not isinstance ( attribute , string_types ) or ( '.' not in attribute and not attribute . isdigit ( ) ) : return lambda x : environment . getitem ( x , attribute ) attribute = attribute . split ( '.' ) def attrgetter ( item ) : for part in attribute : if part . isdigit ( ) : part = int ( part ) item = environment . getitem ( item , part ) return item return attrgetter