Skip to main content

Extending PyYAML with a custom constructor for including YAML files within YAML files

Project description

pyyaml-include

CircleCI GitHub tag PyPI PyPI - License PyPI - Format PyPI - Status PyPI - Python Version PyPI - Implementation

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, if recursive argument of !include YAML tag is true, 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


Download files

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

Source Distribution

pyyaml-include-1.0.0.5.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyyaml_include-1.0.0.5-py2.py3-none-any.whl (3.7 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pyyaml-include-1.0.0.5.tar.gz.

File metadata

File hashes

Hashes for pyyaml-include-1.0.0.5.tar.gz
Algorithm Hash digest
SHA256 c8fa8e96ec112998f9658fb6ea62c4f8e892c5bd0487c9bfcaf8f2106b7a5429
MD5 c75d86cb952fc17ae38eed6edd22b999
BLAKE2b-256 db5443a729f0b57bf7baf0d127d26df1a2ec604f84009761b9d191f75e246d81

See more details on using hashes here.

File details

Details for the file pyyaml_include-1.0.0.5-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pyyaml_include-1.0.0.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 26752ea4c98356ed9136e9d218698d10c99a8677f5d2fcbf551e162427549369
MD5 4841169ca559c4a561aef8a98dff3e56
BLAKE2b-256 3407dfe88c30b86221f09ae20b89a3d155adfc8212fd6547fba8f8ce89badc52

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