Skip to main content

Enhancements of yaml format to support include and python expression

Project description

Mata Yaml is several enhancements for yaml format that allow the following:

  • include one yaml file from another

  • use python expression and other fields in the file as value

Include files syntax

To include one file or files the ‘extend’ key is used. For example:

base.yaml:

extend:
  - file1.yaml
  - file2.yaml
name: base.yaml
b: overridden_by_base
new: new

file1.yaml:

a: a
b: b
c: c
name: file1.yaml

file2.yaml:

a: aa
b: bb
d: d
name: file2.yaml

The order and sequence of file processing is shown in the following table:

Step

Action

Intermediate dict

1

Read base.yaml and extract extend key

{"extend":
    ["file1.yaml", "file2.yaml"] }

2

Read file1.yaml

{
   "a": "a",
   "b": "b",
   "c": "c",
   "name": "file1.yaml"
}

3

Read file2.yaml and merge/override values

{
   "a": "aa", # overridden
   "b": "b",  # overridden
   "c": "c",
   "d": "d",  # added
   "name": "file2.yaml" # overridden
}

4

Read rest values from base.yaml and merge/override

{
   "a": "aa",
   "b": "overridden_by_base",  # overridden
   "c": "c",
   "d": "d",
   "name": "base.yaml" # overridden
   "new": "new" # added
}

Expression syntax

Metayaml support any python valid expression. For this expression should be enclosed in brackets ${} or $(). The first brackets is used for eager substitute and $() for laze. I.e. expressions in $() are applied after full read file and its include files but ${} during file read.

The access to other values from expression can be done by using dictionary syntax or ‘dash dictionary syntax’.

Examples:

base.yaml

extend:
  - f1.yaml

hour: ${60*60}  # just simple python expression
${2+2}: four  # expression can be in the key
delay: ${hour*2}  # delay is two hour or 7200 seconds
loggers:
  metayaml:
    name: metayaml
    level: debug
    console: false
  backend:
    name: backend
    level: ${loggers.metayaml.level}
    console: ${loggers.metayaml.console}
  ext: ${loggers.metayaml}  # copy whole dict from loggers.metayaml this key

  incorrect: ${delay} ${loggers.ext}  # In this case string representation of objects will be concatenated

f1.yaml

run_interval: $(hour*5)  # 5 hours. But 'hour' is not defined when this file is processed.
                         # Therefore only $() brackets can be used here.

Installation

Meta Yaml is in PyPI, so it can be installed directly using:

$ pip install metayaml

Or from BitBucket:

$ git clone https://bitbucket.org/atagunov/metayaml
$ cd metayaml
$ python setup.py install

Documentation

Documentation (such that it is) is available at https://bitbucket.org/atagunov/metayaml

Usage

from metayaml import read
read(["config.yaml",
      "test.yaml",
     {'join': os.path.join, # allows get right os specific path in yaml file
      'env': os.environ}  # allows use system environments from yaml file
    )

config.yaml

extend:
  - ${join(env["HOME"], ".metayaml", "localconfig.yaml")} # added reading local config from $HOME
user_name: ${env["USER"]}
email: ${user_name + "@example.com"}
debug: false

test.yaml

debug: true

License

MetaYaml is released under a MIT license.

Project details


Download files

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

Source Distributions

metayaml-0.1.zip (10.8 kB view details)

Uploaded Source

metayaml-0.1.tar.gz (5.5 kB view details)

Uploaded Source

File details

Details for the file metayaml-0.1.zip.

File metadata

  • Download URL: metayaml-0.1.zip
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for metayaml-0.1.zip
Algorithm Hash digest
SHA256 5890a7973bf84e654a2b6fce1319587e7fbb45ea0a1483dff092cf123293174a
MD5 326f5d87acf714d91c3d76315bbd716e
BLAKE2b-256 3fddaf17526207a7a88ca72d03b7edc1f11248ed6fb70743967404ccadca6b26

See more details on using hashes here.

File details

Details for the file metayaml-0.1.tar.gz.

File metadata

  • Download URL: metayaml-0.1.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for metayaml-0.1.tar.gz
Algorithm Hash digest
SHA256 a1fe423d4bad741ff3e060097d52bce77dc72ac502dce8b87ce99d132e868c80
MD5 d779189831d220ae6093118a1cce02b5
BLAKE2b-256 6fea8a3e36a3e872fe5f9b0260332cc0fcde79b84ac9b006625d0aea0e4f1f70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page