Skip to main content

pyyaml loader. With this loader you can inject (include) other yaml files either from local file system or from public web or from already constructed sections of the yaml.

Project description

yaml-injection

usage

in python

import yaml
from yaml_injection import InjectionLoader

with open(file_path) as in_:
    data = yaml.load(in_, InjectionLoader)

in yaml

The key word is !inject.

There are two types of syntax: simple and extended.

simple syntax

!inject file: path to file in local file system
!inject ref: section subsection 

ref is a keys leading to section separated by space.

* Yep it will works only if keys does not contain spaces.

!inject url: public url with yaml file 

extended syntax

WARNING: A SPACE SYMBOL AFTER !inject AND BEFORE : IS MANDATORY!!

!inject : 
    file: path to file in local file system
    url: public url with yaml file 
    ref: section subsection 

Both simple and extended syntax accept lists in file, url and ref sections.

examples

Examples are gotten from tests.

example 1

sub.yaml

sub_only: sub_only
both_files: both_files_value_from_sub
non_map_object:
  - sub
non_map_only_sub:
  - sub_only
both_files_map:
  sub_only: sub_only
  both_files: both_files_value_from_sub
deep:
  deep:
    deep:
      map:
        sub_only: sub_only
        both_files: both_files_value_from_sub

main.yml

!inject file: sub.yml

main_only: main_only
both_files: both_files_value_from_main
both_files_map:
  both_files: both_files_value_from_main
  main_only: main_only_value_from_main
deep:
  deep:
    deep:
      map:
        main_only: main_only
        both_files: both_files_value_from_main
non_map_object:
  - main
non_map_only_main:
  - main_only

will be loaded as:

both_files: both_files_value_from_main
both_files_map:
  both_files: both_files_value_from_main
  main_only: main_only_value_from_main
  sub_only: sub_only
main_only: main_only
sub_only: sub_only
deep:
  deep:
    deep:
      map:
        main_only: main_only
        both_files: both_files_value_from_main
        sub_only: sub_only
non_map_object:
  - main
non_map_only_main:
  - main_only
non_map_only_sub:
  - sub_only

example 2

sections:
  sub:
    common:
      variables:
        job_name: sub_name
        script: sub

    job_1:
      only:
        - refs
      script:
        - make build
        - make start

    job_2:
      except:
        - tags
      script:
        - make build
        - make start

main:
  !inject :
    ref: sections sub

  common:
    variables:
      script: main
      runner: main_runner

  job_1:
    only:
      - release

  job_2:
    before_script:
      - make prepare

will be loaded as:

main:
  common:
    variables:
      job_name: sub_name
      runner: main_runner
      script: main
  job_1:
    only:
    - release
    script:
    - make build
    - make start
  job_2:
    before_script:
    - make prepare
    except:
    - tags
    script:
    - make build
    - make start
sections:
  sub:
    common:
      variables:
        job_name: sub_name
        script: sub
    job_1:
      only:
      - refs
      script:
      - make build
      - make start
    job_2:
      except:
      - tags
      script:
      - make build
      - make start

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

yaml-injection-0.0.4.tar.gz (4.0 kB view hashes)

Uploaded Source

Supported by

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