Closed l1k closed 10 years ago
This is not a bug. Are you trying to output JSON?
Yes, my expectation was that map() returns a list. And that is not a bug? So that means map() shall only be used as an intermediate function with some other filter like |join or |list appended to it? Hmmm. Maybe that should be stated explicitly in the documentation.
You shouldn't just print out the repr
of arbitrary Python objects to feed directly into Javascript. In your case you seemed to have luck, depending on the content, however, you might actually get invalid JSON, and it also might be a huge security flaw. Append the list
and tojson
filters to get valid JSON, or an exception when the object is not encodable to JSON.
The fact that the repr
of most Python builtins is JSON-ish is not a coincidence, but the repr is never something one should rely on for actual program logic.
Also, i don't see anywhere in the Jinja docs which implies that map
would return anything more specific than a sequence.
I don't want to change this as this would cause performance of these functions to do down which normally are only used with iteration. |list
fixes it.
I didn't know about the {{ ... | list }}
solution for the ansbile <generator object do_map at 0xdeadbeef>
issue.
Thanks for filing this!
Let zonelist be a data structure like this:
When using zonelist|map(attribute='file'), a string like this is returned:
Expected behaviour would be to return a list containing the 'file' attributes of zonelist.
As it turns out there's a workaround: Using e.g. zonelist|map(attribute='file')|list or zonelist|map(attribute='file')|sort will result in the expected list:
I'm using Jinja 2.7.1 with Ansible 1.4.3.