Extracts and merges common parts of YAML from one set of files into a common file. Note that this project attempts to preserve comments and order of properties in your YAML files, but can not preserve formatting.
pip install re-yaml-commonyaml-common merge <common file> <file 1> <file 2> ...
An example below for yaml-common merge tests/data/common.yaml tests/data/1.yaml tests/data/2.yaml.
Content of common.yaml:
example-exists:
str-1: This property already exists in common.yaml
str-2: This property exists in all files
Content of 1.yaml:
example-common:
# common comment
depth:
more-depth:
array:
- yes
- for sure
str: common string
int: 123
float: 1.23
bool: true
null:
example-specific:
depth:
more-depth:
# specific comment to 1.yaml
str-specific: 1.yaml
example-exists:
str-2: This property exists in all files, and is overridden by 1.yaml
example-mixed:
array-common:
- yes
- for sure again
array-specific:
- no
- because this is specific to 1.yaml
str-common: common string
str-specific: 1.yaml
sre-common-multiline: |
-----BEGIN PUBLIC KEY-----
01234567890
-----END PUBLIC KEY-----
unique-to-1: this property is unique to 1.yaml
Content of 2.yaml:
example-common:
# common comment
depth:
more-depth:
array:
- yes
- for sure
str: common string
int: 123
float: 1.23
bool: true
null:
example-specific:
depth:
more-depth:
# specific comment to 2.yaml
str-specific: 2.yaml
example-exists:
str-2: This property exists in all files, and is overridden by 2.yaml
example-mixed:
array-common:
- yes
- for sure again
array-specific:
- no
- because this is specific to 2.yaml
str-common: common string
str-specific: 2.yaml
sre-common-multiline: |
-----BEGIN PUBLIC KEY-----
01234567890
-----END PUBLIC KEY-----
After running the above example, the content of the files will have changed to:
Expected content of common.yaml:
example-exists:
str-1: This property already exists in common.yaml
str-2: This property exists in all files
example-common:
# common comment
depth:
more-depth:
array:
- yes
- for sure
str: common string
int: 123
float: 1.23
bool: true
null:
example-mixed:
array-common:
- yes
- for sure again
str-common: common string
sre-common-multiline: |
-----BEGIN PUBLIC KEY-----
01234567890
-----END PUBLIC KEY-----
Expected content of 1.yaml:
example-specific:
depth:
more-depth:
# specific comment to 1.yaml
str-specific: 1.yaml
example-exists:
str-2: This property exists in all files, and is overridden by 1.yaml
example-mixed:
array-specific:
- no
- because this is specific to 1.yaml
str-specific: 1.yaml
unique-to-1: this property is unique to 1.yaml
Expected content of 2.yaml:
example-specific:
depth:
more-depth:
# specific comment to 2.yaml
str-specific: 2.yaml
example-exists:
str-2: This property exists in all files, and is overridden by 2.yaml
example-mixed:
array-specific:
- no
- because this is specific to 2.yaml
str-specific: 2.yaml
This is a Python Poetry project using Fire. See Poetry for more information.
Development requires:
This project was created using template-poetry.