Merge pull request #2234 from akvadrako/nice-yaml-and-json

add to_nice_yaml|json filters
This commit is contained in:
Michael DeHaan 2013-03-01 13:45:07 -08:00
commit e83819599a
2 changed files with 94 additions and 0 deletions

View file

@ -18,14 +18,27 @@
import json
import yaml
def to_nice_yaml(*a, **kw):
'''Make verbose, human readable yaml'''
return yaml.safe_dump(*a, indent=4, allow_unicode=True, default_flow_style=False, **kw)
def to_nice_json(*a, **kw):
'''Make verbose, human readable JSON'''
return json.dumps(*a, indent=4, sort_keys=True, **kw)
class FilterModule(object):
''' Ansible core jinja2 filters '''
def filters(self):
return {
# json
'to_json': json.dumps,
'to_nice_json': to_nice_json,
'from_json': json.loads,
# yaml
'to_yaml': yaml.safe_dump,
'to_nice_yaml': to_nice_yaml,
'from_yaml': yaml.safe_load,
}

81
test/TestFilters.py Normal file
View file

@ -0,0 +1,81 @@
'''
Test bundled filters
'''
import unittest, tempfile, shutil
from ansible import playbook, inventory, callbacks
INVENTORY = inventory.Inventory(['localhost'])
BOOK = '''
- hosts: localhost
vars:
var: { a: [1,2,3] }
tasks:
- template: src=%s dest=%s
'''
SRC = '''
-
{{ var|to_json }}
-
{{ var|to_nice_json }}
-
{{ var|to_yaml }}
-
{{ var|to_nice_yaml }}
'''
DEST = '''
-
{"a": [1, 2, 3]}
-
{
"a": [
1,
2,
3
]
}
-
a: [1, 2, 3]
-
a:
- 1
- 2
- 3
'''
class TestFilters(unittest.TestCase):
def setUp(self):
self.tmpdir = tempfile.mkdtemp(dir='/tmp')
def tearDown(self):
shutil.rmtree(self.tmpdir)
def temp(self, name, data=''):
'''write a temporary file and return the name'''
name = self.tmpdir + '/' + name
with open(name, 'w') as f:
f.write(data)
return name
def test_filters(self):
src = self.temp('src.j2', SRC)
dest = self.temp('dest.txt')
book = self.temp('book', BOOK % (src, dest))
playbook.PlayBook(
playbook = book,
inventory = INVENTORY,
transport = 'local',
callbacks = callbacks.PlaybookCallbacks(),
runner_callbacks = callbacks.DefaultRunnerCallbacks(),
stats = callbacks.AggregateStats(),
).run()
out = open(dest).read()
self.assertEqual(DEST, out)