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

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
returns a callable that looks up the given attribute from a passed object with the rules of the environment .