internal/tools/: strictyaml-1.7.3 metadata and description

Simple index

Strict, typed YAML parser

author_email Colm O'Connor <colm.oconnor.github@gmail.com>
classifiers
  • Programming Language :: Python :: 3
  • License :: OSI Approved :: MIT License
  • Topic :: Text Processing :: Markup
  • Topic :: Software Development :: Libraries
  • Natural Language :: English
description_content_type text/markdown
keywords yaml
license MIT
project_urls
  • homepage, https://hitchdev.com/strictyaml
  • documentation, https://hitchdev.com/strictyaml/using
  • repository, https://github.com/crdoconnor/strictyaml
  • changelog, https://hitchdev.com/strictyaml/changelog
requires_dist
  • python-dateutil >=2.6.0
requires_python >=3.7.0
File Tox results History
strictyaml-1.7.3-py3-none-any.whl
Size
121 KB
Type
Python Wheel
Python
3
strictyaml-1.7.3.tar.gz
Size
113 KB
Type
Source

StrictYAML

StrictYAML is a type-safe YAML parser that parses and validates a restricted subset of the YAML specification.

Priorities:

Simple example:

# All about the character
name: Ford Prefect
age: 42
possessions:
- Towel
from strictyaml import load, Map, Str, Int, Seq, YAMLError

Default parse result:

>>> load(yaml_snippet)
YAML({'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']})

All data is string, list or OrderedDict:

>>> load(yaml_snippet).data
{'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']}

Quickstart with schema:

from strictyaml import load, Map, Str, Int, Seq, YAMLError

schema = Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})

42 is now parsed as an integer:

>>> person = load(yaml_snippet, schema)
>>> person.data
{'name': 'Ford Prefect', 'age': 42, 'possessions': ['Towel']}

A YAMLError will be raised if there are syntactic problems, violations of your schema or use of disallowed YAML features:

# All about the character
name: Ford Prefect
age: 42

For example, a schema violation:

try:
    person = load(yaml_snippet, schema)
except YAMLError as error:
    print(error)
while parsing a mapping
  in "<unicode string>", line 1, column 1:
    # All about the character
     ^ (line: 1)
required key(s) 'possessions' not found
  in "<unicode string>", line 3, column 1:
    age: '42'
    ^ (line: 3)

If parsed correctly:

from strictyaml import load, Map, Str, Int, Seq, YAMLError, as_document

schema = Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})

You can modify values and write out the YAML with comments preserved:

person = load(yaml_snippet, schema)
person['age'] = 43
print(person.as_yaml())
# All about the character
name: Ford Prefect
age: 43
possessions:
- Towel

As well as look up line numbers:

>>> person = load(yaml_snippet, schema)
>>> person['possessions'][0].start_line
5

And construct YAML documents from dicts or lists:

print(as_document({"x": 1}).as_yaml())
x: 1

Install

$ pip install strictyaml

Why StrictYAML?

There are a number of formats and approaches that can achieve more or less the same purpose as StrictYAML. I've tried to make it the best one. Below is a series of documented justifications:

Using StrictYAML

How to:

Compound validators:

Scalar validators:

Restrictions:

Design justifications

There are some design decisions in StrictYAML which are controversial and/or not obvious. Those are documented here:

Star Contributors

Other Contributors

StrictYAML also includes code from ruamel.yaml, Copyright Anthon van der Neut.

Contributing