Strict, typed YAML parser
Project description
StrictYAML is a type-safe YAML parser that parses a restricted subset of the YAML specificaton.
Priorities:
Readability of YAML.
Ease of use of API.
Secure by default.
Strict validation of markup and straightforward type casting.
Clear, human readable exceptions with line numbers.
Acting as a near-drop in replacement for pyyaml, ruamel.yaml or poyo.
Roundtripping - reading in (commented) YAML and writing it out with comments.
Letting you worry about more interesting things than parsing or writing config files.
Simple example:
# All about the character
name: Ford Prefect
age: 42
possessions:
- Towel
Default parse result:
>>> strictyaml.load(yaml)
YAML({'possessions': ['Towel'], 'age': '42', 'name': 'Ford Prefect'})
>>> strictyaml.load(yaml).data
{"name": "Ford Prefect", "age": "42", "possessions": ["Towel", ]} # All data is str, list or dict
Using a schema:
>>> from strictyaml import load, Map, Str, Int, Seq
>>> person = load(yaml, Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})) \
>>> person.data == {"name": "Ford Prefect", "age": 42, "possessions": ["Towel", ]} # 42 is now an int
Once parsed you can change values and roundtrip the whole YAML, with comments preserved:
>>> person['age'] = load('43')
>>> print(person.as_yaml())
# All about the character
name: Ford Prefect
age: 43
possessions:
- Towel
As well as look up line numbers:
>>> person['possessions'][0].start_line
5
See more example driven documentation.
Install It
$ pip install strictyaml
FAQ
From learning programmers:
If you’re looking at this and thinking “why not do/use X instead?” that’s a healthy response, and you deserve answers. These are probably the questions you’re asking:
Breaking changes
0.5: Data is now parsed by default as a YAML object instead of directly to dict/list. To get dict/list and ordinary values as before, get yaml_object.data.
0.7: Roundtripping now requires that you only assign YAML objects to index: e.g. yaml_object[‘x’] = another_yaml_obj
Contributors
@gvx
@AlexandreDecan
@lots0logs
@tobbez
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.