LogoLogo
Official SiteAPI Reference
stable/3.0
stable/3.0
  • Cement Developer Guide
  • Release Information
    • What's New!
    • Upgrading
    • ChangeLog
    • Deprecations
  • Getting Started
    • Installation
    • Developer Tools
    • Framework Overview
    • Beginner Tutorial
      • Part 1: Creating Your First Project
      • Part 2: Adding Features
      • Part 3: Extending a Project
      • Part 4: Making Everything Legit
  • Core Foundation
    • Interfaces and Handlers
    • Hooks
    • Configuration Settings
    • Arguments
    • Logging
    • Controllers
    • Output Rendering
    • Caching
    • Mail Messaging
    • Framework Extensions
    • Application Plugins
    • Templating
  • Utilities
    • Filesystem
    • Shell
    • Miscellaneous
  • Extensions
    • Alarm
    • Argparse
    • Colorlog
    • ConfigParser
    • Daemon
    • Dummy
    • Generate
    • Jinja2
    • Json
    • Logging
    • Memcached
    • Mustache
    • Plugin
    • Print
    • Redis
    • Scrub
    • SMTP
    • Tabulate
    • Yaml
    • Watchdog
  • Additional Topics
    • Extending The App Object
    • Unit Testing
    • Cleanup
    • Signal Handling
    • Pipenv
    • Autocomplete
    • Profiling with cProfile
    • Debugging with VSCode
  • Environment Variables
  • Terminology
  • Contributing
  • Privacy Policy
Powered by GitBook
On this page
  • Introduction
  • Requirements
  • Configuration
  • Using an Alternative Json Module
  • Usage
  • Config Handler
  • Output Handler
  1. Extensions

Json

PreviousJinja2NextLogging

Last updated 2 years ago

Introduction

The JSON Extension provides the for output rendering in pure JSON, as well as the that allows applications to use JSON configuration files as a drop-in replacement of the default .

Documentation References:

API References:

Requirements

  • No external dependencies

Configuration

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

Using an Alternative Json Module

In some edge cases users have wanted to use an alternative json module for performance reasons, in particular . It is possible to override the backend json library module to use, such as ujson or another drop-in replacement library. The recommended solution would be to override the :

from cement import App, init_defaults

META = init_defaults('output.json', 'config.json')
META['output.json']['json_module'] = 'ujson'
META['config.json']['json_module'] = 'ujson'

class MyApp(App):
    class Meta:
        label = 'myapp'
        extensions = ['json']
        meta_defaults = META

Usage

Config Handler

myapp.py
from cement import App

class MyApp(App):
    class Meta:
        label = 'myapp'
        extensions = ['json']
        config_handler = 'json'
        config_file_suffix = '.json'
~/.myapp.json
{
    "myapp": {
        "foo": "bar"
    }
}

Output Handler

myapp.py
from cement import App, init_defaults

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

class MyApp(App):
    class Meta:
        label = 'myapp'
        extensions = ['json', '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 }}
$ python myapp.py
Foo: bar

$ python myapp.py -o json
{"foo": "bar"}

In general, you likely would not set output_handler to json, 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 option is set. For example, -o json will trigger the framework to use the json output handler, overriding the default set in .

See the documentation on .

JsonOutputHandler
JsonConfigHandler
ConfigParserConfigHandler
Configuration Settings
Output Rendering
Cement Json Extension
Python Json Library
UltraJson
JsonOutputHandler.Meta.json_module
Handler.Meta.overridable
App.Meta.output_handler
Overriding Handlers via Command Line