Skip to main content

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

Project description

pyyaml-include

GitHub tag Python Package Documentation Status PyPI Quality Gate Status

An extending constructor of PyYAML: include other YAML files into YAML document.

Install

pip install pyyaml-include

Usage

Consider we have such YAML files:

├── 0.yml
└── include.d
    ├── 1.yml
    └── 2.yml
  • 1.yml 's content:

    name: "1"
    
  • 2.yml 's content:

    name: "2"
    

To include 1.yml, 2.yml in 0.yml, we shall add YamlIncludeConstructor to PyYAML's loader, then add an !include tag in 0.yaml:

import yaml
from yamlinclude import YamlIncludeConstructor

YamlIncludeConstructor.add_to_loader_class(loader_class=yaml.FullLoader, base_dir='/your/conf/dir')

with open('0.yml') as f:
    data = yaml.load(f, Loader=yaml.FullLoader)

print(data)

Mapping

If 0.yml was:

file1: !include include.d/1.yml
file2: !include include.d/2.yml

We'll get:

file1:
  name: "1"
file2:
  name: "2"

Sequence

If 0.yml was:

files:
  - !include include.d/1.yml
  - !include include.d/2.yml

We'll get:

files:
  - name: "1"
  - name: "2"

Note:

File name can be either absolute (like /usr/conf/1.5/Make.yml) or relative (like ../../cfg/img.yml).

Wildcards

File name can contain shell-style wildcards. Data loaded from the file(s) found by wildcards will be set in a sequence.

That is to say, a list will be returned when including file name contains wildcards. Length of the returned list equals number of matched files:

  • when only 1 file matched, length of list will be 1
  • when there are no files matched, an empty list will be returned

If 0.yml was:

files: !include include.d/*.yml

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 argument, we shall set it in Mapping or Sequence arguments mode:

  • Arguments in Sequence mode:

    !include [tests/data/include.d/**/*.yml, true]
    
  • Arguments in Mapping mode:

    !include {pathname: tests/data/include.d/**/*.yml, recursive: true}
    

Non YAML files

This extending constructor can now load data from non YAML files, supported file types are:

  • json
  • toml (only available when toml installed)
  • ini

The constructor read non YAML files by different readers according to a pattern table defined in src/yamlinclude/readers.py.

Default reader table can be replaced by a custom reader_map when call add_to_loader_class.

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.3.2.tar.gz (20.5 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.3.2-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyyaml-include-1.3.2.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pyyaml-include-1.3.2.tar.gz
Algorithm Hash digest
SHA256 a516d5172092ec110a427dafe171da9341fe488eb6d1c78fb52f1f0414dec26d
MD5 38ab601b68ffdd1fd2519d318084b7c2
BLAKE2b-256 a0c805acc1abc2694add669ae1c4469057ab7dc90a5b1d1ebbc2a8db4c4acd88

See more details on using hashes here.

File details

Details for the file pyyaml_include-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: pyyaml_include-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pyyaml_include-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cc0c0a1e4c2a91e4f0b1aea83634fe8b622fe90fc3be8e8293f1e47c5ed6001b
MD5 035d5eea89fc7858d6d4dbdd96d835f6
BLAKE2b-256 6bd69a09896b20394767db37cf998a37efc5b8731b62c2afc7e6364055c3950b

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