Skip to main content

Buildout recipe for making files out of Mako templates

Project description

https://img.shields.io/pypi/v/buildout.recipe.mako_template.svg https://img.shields.io/travis/enkidulan/buildout.recipe.mako_template.svg Maintainability Test Coverage

buildout.recipe.mako_template

A buildout recipe for making files out of Mako templates, with focus on manageability of large number of templates.

The reasons behind creating this ‘another’ template recipe for buildout are wish of having:

  • mako with all power of python and good scoping in templates,
  • simple listing of source : destinatoin mapping,
  • and collision detection.

Recipe Options

  • files: list of couples of templates and targets files paths separated by : symbol. It allow to specify if target should be executable, and to ignore a collision. Line has following format:

    source:target[:is_executable(true or false)[:collision_allowed(just a flag))]]

  • directories : list of lookup directories of the mako templates. Templates file paths are relative to these directories. (default: ${buildout:directory})

Additional options are simply forwarded to the templates, and options from all the other parts are made available through parts[<part-name>][<option-name>].

Minimal Example

buildout.cfg:

[buildout]
parts = foo


[foo]
recipe = buildout.recipe.mako_template
author = Me
files = foo_1.sh.mako : foo_1.sh

foo_1.sh.mako:

echo Hello ${author}!

Will result in creation of foo_1.sh:

echo Hello Me!

Larger Example

[buildout]
parts = docker-compose

[project]
name = MyProject

[docker-compose]
recipe = buildout.recipe.mako_template
directories = ${buildout:directory}/templates
gateway_ports = 8080:8080
files =
    backend.dockerfile.mako  : .docker/backend.dockerfile
    frontend.dockerfile.mako : .docker/frontend.dockerfile
    gateway.dockerfile.mako  : .docker/gateway.dockerfile
    docker-compose.yaml.mako : docker-compose.yaml

docker-compose.yaml.mako:

...
gateway:
    container_name: ${parts['project']['name']}_gateway
    ports:
      - "${gateway_ports}"
...

Collision detection

Cases where one’s template target are overridden by another template are detected automatically. For example, case:

files =
    foo_1.sh.mako : foo_1.sh
    foo_2.sh.mako : foo_1.sh  # overwrites ``target`` form above

will result in a build fail with the message:

Target collision is detected at 'foo_2.sh.mako : foo_1.sh'

Yet in some cases, it may be a desirable behavior, so it’s possible to allow overwriting by adding collision_allowed flag.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
buildout.recipe.mako_template-0.1.2.tar.gz (11.5 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page