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

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyyaml-include-1.3.1.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for pyyaml-include-1.3.1.tar.gz
Algorithm Hash digest
SHA256 4cb3b4e1baae2ec251808fe1e8aed5d3d20699c541864c8e47ed866ab2f15039
MD5 1581a181d0862fe1cfaea33a1766bb5b
BLAKE2b-256 45ecf730b826e22e4fad5f86f9130362b053ef970ac391baed22293e279128be

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyyaml_include-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for pyyaml_include-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e58525721a2938d29c4046350f8aad86f848660a770c29605e6f2700925fa753
MD5 c493f6afa017422d7a09b86ececee783
BLAKE2b-256 04adb0864aa510cd46ceb6911e41473b84fde49d36e8f97c100e822ead75c742

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