Extending PyYAML with a custom constructor for including YAML files within YAML files
Project description
pyyaml-include
Extending PyYAML with a custom constructor for including YAML files within YAML files.
Install
pip install pyyaml-include
Usage
Consider we have such YAML files:
├── 0.yaml
└── include.d
├── 1.yaml
└── 2.yaml
-
1.yaml
's content:name: "1"
-
2.yaml
's content:name: "2"
To include 1.yaml
, 2.yaml
in 0.yaml
, we shall first add YamlIncludeConstructor
to PyYAML's loader, then write !include
tag in 0.yaml
and load it:
import yaml
from yamlinclude import YamlIncludeConstructor
yaml.add_constructor('!include', YamlIncludeConstructor())
with open('0.yaml') as f:
data = yaml.load(f)
print(data)
Include files by name
-
On top level:
If
0.yaml
was:!include include.d/1.yaml
We'll get:
{"name": "1"}
-
In mapping:
If
0.yaml
was:file1: !include include.d/1.yaml file2: !include include.d/2.yaml
We'll get:
{ "file1": {"name": "1"}, "file2": {"name": "2"} }
-
In sequence:
If
0.yaml
was:files: - !include include.d/1.yaml - !include include.d/2.yaml
We'll get:
{"files": [ {"name": "1"}, {"name": "2"} ]}
ℹ Note: File name can be either absolute (like
/usr/src/Python-1.5/Makefile
) or relative (like../../img/banner.gif
).
Include files by wildcards
File name can contain shell-style wildcards. Data loaded from the file(s) found by wildcards will be set in a sequence.
If 0.yaml
was:
files: !include include.d/*.yaml
We'll get:
{"files": [
{"name": "1"},
{"name": "2"}
]}
ℹ Note:
- For
Python>=3.5
, ifrecursive
argument of!include
YAML tag istrue
, the pattern“**”
will match any files and zero or more directories and subdirectories.- Using the
“**”
pattern in large directory trees may consume an inordinate amount of time because of recursive search.
In order to enable recursive
arugment, we shall write the !include
tag in Mapping
or Sequence
mode:
-
Arguments in
Sequence
mode:!include [tests/data/include.d/**/*.yaml, true]
-
Arguments in
Mapping
mode:!include {pathname: tests/data/include.d/**/*.yaml, recursive: true}
Authors
liu xue yan liu_xue_yan@foxmail.com
Changelog
1.0
- Date: 2018-06-08
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyyaml_include-1.0.0.5-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26752ea4c98356ed9136e9d218698d10c99a8677f5d2fcbf551e162427549369 |
|
MD5 | 4841169ca559c4a561aef8a98dff3e56 |
|
BLAKE2b-256 | 3407dfe88c30b86221f09ae20b89a3d155adfc8212fd6547fba8f8ce89badc52 |