Yaml

Introduction

The Yaml Extension includes the YamlOutputHandler to render output in pure Yaml, as well as the YamlConfigHandler that allows applications to use Yaml configuration files as a drop-in replacement of the default ConfigParserConfigHandler.

Documentation References:

API References:

Requirements

  • pyYaml

Cement 3.0.8+:

pip install cement[yaml]

Applications using Cement <3.0.8 should continue to include pyYaml in their dependencies.

Configuration

This extension does not support any application level configuration settings or meta options.

Usage

Config Handler

myapp.py
from cement import App

class MyApp(App):
    class Meta:
        label = 'myapp'
        extensions = ['yaml']
        config_handler = 'yaml'
        config_file_suffix = '.yml'
~/.myapp.yml
---
myapp:
    foo: bar

Output Handler

In general, you likely would not set output_handler to yaml, but rather another type of output handler that displays readable output to the end-user (ex: Mustache, Jinja2, or Tabulate). However, Cement supports overriding handlers via command line options if the Handler.Meta.overridable option is set. For example, -o yaml will trigger the framework to use the yaml output handler, overriding the default set in App.Meta.output_handler.

See the documentation on Overriding Handlers via Command Line.

myapp.py
from cement import App, init_defaults

META = init_defaults('output.yaml')
META['output.yaml']['overridable'] = True

class MyApp(App):
    class Meta:
        label = 'myapp'
        extensions = ['yaml', 'mustache']
        meta_defaults = META
        output_handler = 'mustache'
        template_dir = './templates'

with MyApp() as app:
    app.run()
    data = {'foo': 'bar'}
    app.render(data, 'example.m')
templates/example.m
Foo: {{ foo }}

Last updated