diff options
author | CoprDistGit <infra@openeuler.org> | 2023-03-09 17:18:34 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-03-09 17:18:34 +0000 |
commit | b7d2ebb33693aca6659573ec74821e820dac2534 (patch) | |
tree | 9122df60df8f4d315f8f451189070797284b32f4 | |
parent | d10d02462d1d3e9fa85ef3cf7a94b016806b08ef (diff) |
automatic import of python-strictyaml
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-strictyaml.spec | 1017 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 1019 insertions, 0 deletions
@@ -0,0 +1 @@ +/strictyaml-1.6.2.tar.gz diff --git a/python-strictyaml.spec b/python-strictyaml.spec new file mode 100644 index 0000000..f180eaa --- /dev/null +++ b/python-strictyaml.spec @@ -0,0 +1,1017 @@ +%global _empty_manifest_terminate_build 0 +Name: python-strictyaml +Version: 1.6.2 +Release: 1 +Summary: Strict, typed YAML parser +License: MIT +URL: http://hitchdev.com/strictyaml +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/7c/86/c9b04acef55685b3abf5d4db3a348ab1409734fdd8650c98fc63ca6a6c0a/strictyaml-1.6.2.tar.gz +BuildArch: noarch + + +%description +# StrictYAML + +StrictYAML is a [type-safe](https://en.wikipedia.org/wiki/Type_safety) YAML parser +that parses and validates a [restricted subset](https://hitchdev.com/strictyaml/features-removed) of the [YAML](https://hitchdev.com/strictyaml/what-is-yaml) +specification. + +Priorities: + +- Beautiful API +- Refusing to parse [the ugly, hard to read and insecure features of YAML](https://hitchdev.com/strictyaml/features-removed) like [the Norway problem](https://hitchdev.com/strictyaml/why/implicit-typing-removed). +- Strict validation of markup and straightforward type casting. +- Clear, readable exceptions with **code snippets** and **line numbers**. +- Acting as a near-drop in replacement for pyyaml, ruamel.yaml or poyo. +- Ability to read in YAML, make changes and write it out again with comments preserved. +- [Not speed](https://hitchdev.com/strictyaml/why/speed-not-a-priority), currently. + + +Simple example: + +```yaml +# All about the character +name: Ford Prefect +age: 42 +possessions: +- Towel + +``` + + +```python +from strictyaml import load, Map, Str, Int, Seq, YAMLError + +``` + + + + + +Default parse result: + + +```python +>>> load(yaml_snippet) +YAML({'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']}) +``` + + + +All data is string, list or OrderedDict: + + +```python +>>> load(yaml_snippet).data +{'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']} +``` + + + +Quickstart with schema: + + +```python +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: + + +```python +>>> 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: + +```yaml +# All about the character +name: Ford Prefect +age: 42 + +``` + + + + + + +For example, a schema violation: + + +```python +try: + person = load(yaml_snippet, schema) +except YAMLError as error: + print(error) + +``` + +```yaml +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: + + +```python +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: + + +```python +person = load(yaml_snippet, schema) +person['age'] = 43 +print(person.as_yaml()) + +``` + +```yaml +# All about the character +name: Ford Prefect +age: 43 +possessions: +- Towel +``` + + + + + +As well as look up line numbers: + + +```python +>>> person = load(yaml_snippet, schema) +>>> person['possessions'][0].start_line +5 +``` + + + +And construct YAML documents from dicts or lists: + + +```python +print(as_document({"x": 1}).as_yaml()) + +``` + +```yaml +x: 1 +``` + + + + + + + +## Install + +```sh +$ 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: + +- [Why avoid using environment variables as configuration?](https://hitchdev.com/strictyaml/why-not/environment-variables-as-config) +- [Why not use HJSON?](https://hitchdev.com/strictyaml/why-not/hjson) +- [Why not HOCON?](https://hitchdev.com/strictyaml/why-not/hocon) +- [Why not use INI files?](https://hitchdev.com/strictyaml/why-not/ini) +- [Why not use JSON Schema for validation?](https://hitchdev.com/strictyaml/why-not/json-schema) +- [Why not JSON for simple configuration files?](https://hitchdev.com/strictyaml/why-not/json) +- [Why not JSON5?](https://hitchdev.com/strictyaml/why-not/json5) +- [Why not use the YAML 1.2 standard? - we don't need a new standard!](https://hitchdev.com/strictyaml/why-not/ordinary-yaml) +- [Why not use kwalify with standard YAML to validate my YAML?](https://hitchdev.com/strictyaml/why-not/pykwalify) +- [Why not use Python's schema library (or similar) for validation?](https://hitchdev.com/strictyaml/why-not/python-schema) +- [Why not use SDLang?](https://hitchdev.com/strictyaml/why-not/sdlang) +- [What is wrong with TOML?](https://hitchdev.com/strictyaml/why-not/toml) +- [Why shouldn't I just use Python code for configuration?](https://hitchdev.com/strictyaml/why-not/turing-complete-code) +- [Why not use XML for configuration or DSLs?](https://hitchdev.com/strictyaml/why-not/xml) + + + +## Using StrictYAML + +How to: + +- [Build a YAML document from scratch in code](https://hitchdev.com/strictyaml/using/alpha/howto/build-yaml-document) +- [Either/or schema validation of different, equally valid different kinds of YAML](https://hitchdev.com/strictyaml/using/alpha/howto/either-or-validation) +- [Labeling exceptions](https://hitchdev.com/strictyaml/using/alpha/howto/label-exceptions) +- [Merge YAML documents](https://hitchdev.com/strictyaml/using/alpha/howto/merge-yaml-documents) +- [Revalidate an already validated document](https://hitchdev.com/strictyaml/using/alpha/howto/revalidation) +- [Reading in YAML, editing it and writing it back out](https://hitchdev.com/strictyaml/using/alpha/howto/roundtripping) +- [Get line numbers of YAML elements](https://hitchdev.com/strictyaml/using/alpha/howto/what-line) +- [Parsing YAML without a schema](https://hitchdev.com/strictyaml/using/alpha/howto/without-a-schema) + + +Compound validators: + +- [Fixed length sequences (FixedSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/fixed-length-sequences) +- [Mappings combining defined and undefined keys (MapCombined)](https://hitchdev.com/strictyaml/using/alpha/compound/map-combined) +- [Mappings with arbitrary key names (MapPattern)](https://hitchdev.com/strictyaml/using/alpha/compound/map-pattern) +- [Mapping with defined keys and a custom key validator (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/mapping-with-slug-keys) +- [Using a YAML object of a parsed mapping](https://hitchdev.com/strictyaml/using/alpha/compound/mapping-yaml-object) +- [Mappings with defined keys (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/mapping) +- [Optional keys with defaults (Map/Optional)](https://hitchdev.com/strictyaml/using/alpha/compound/optional-keys-with-defaults) +- [Validating optional keys in mappings (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/optional-keys) +- [Sequences of unique items (UniqueSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/sequences-of-unique-items) +- [Sequence/list validator (Seq)](https://hitchdev.com/strictyaml/using/alpha/compound/sequences) +- [Updating document with a schema](https://hitchdev.com/strictyaml/using/alpha/compound/update) + + +Scalar validators: + +- [Boolean (Bool)](https://hitchdev.com/strictyaml/using/alpha/scalar/boolean) +- [Parsing comma separated items (CommaSeparated)](https://hitchdev.com/strictyaml/using/alpha/scalar/comma-separated) +- [Datetimes (Datetime)](https://hitchdev.com/strictyaml/using/alpha/scalar/datetime) +- [Decimal numbers (Decimal)](https://hitchdev.com/strictyaml/using/alpha/scalar/decimal) +- [Email and URL validators](https://hitchdev.com/strictyaml/using/alpha/scalar/email-and-url) +- [Empty key validation](https://hitchdev.com/strictyaml/using/alpha/scalar/empty) +- [Enumerated scalars (Enum)](https://hitchdev.com/strictyaml/using/alpha/scalar/enum) +- [Floating point numbers (Float)](https://hitchdev.com/strictyaml/using/alpha/scalar/float) +- [Hexadecimal Integers (HexInt)](https://hitchdev.com/strictyaml/using/alpha/scalar/hexadecimal-integer) +- [Integers (Int)](https://hitchdev.com/strictyaml/using/alpha/scalar/integer) +- [Validating strings with regexes (Regex)](https://hitchdev.com/strictyaml/using/alpha/scalar/regular-expressions) +- [Parsing strings (Str)](https://hitchdev.com/strictyaml/using/alpha/scalar/string) + + +Restrictions: + +- [Disallowed YAML](https://hitchdev.com/strictyaml/using/alpha/restrictions/disallowed-yaml) +- [Duplicate keys](https://hitchdev.com/strictyaml/using/alpha/restrictions/duplicate-keys) +- [Dirty load](https://hitchdev.com/strictyaml/using/alpha/restrictions/loading-dirty-yaml) + + + +## Design justifications + +There are some design decisions in StrictYAML which are controversial +and/or not obvious. Those are documented here: + +- [What is wrong with duplicate keys?](https://hitchdev.com/strictyaml/why/duplicate-keys-disallowed) +- [What is wrong with explicit tags?](https://hitchdev.com/strictyaml/why/explicit-tags-removed) +- [What is wrong with flow-style YAML?](https://hitchdev.com/strictyaml/why/flow-style-removed) +- [The Norway Problem - why StrictYAML refuses to do implicit typing and so should you](https://hitchdev.com/strictyaml/why/implicit-typing-removed) +- [What is wrong with node anchors and references?](https://hitchdev.com/strictyaml/why/node-anchors-and-references-removed) +- [Why does StrictYAML not parse direct representations of Python objects?](https://hitchdev.com/strictyaml/why/not-parse-direct-representations-of-python-objects) +- [Why does StrictYAML only parse from strings and not files?](https://hitchdev.com/strictyaml/why/only-parse-strings-not-files) +- [Why is parsing speed not a high priority for StrictYAML?](https://hitchdev.com/strictyaml/why/speed-not-a-priority) +- [What is syntax typing?](https://hitchdev.com/strictyaml/why/syntax-typing-bad) +- [Why does StrictYAML make you define a schema in Python - a Turing-complete language?](https://hitchdev.com/strictyaml/why/turing-complete-schema) + + + +## Star Contributors + +- @wwoods +- @chrisburr +- @jnichols0 + +## Other Contributors + +- @eulores +- @WaltWoods +- @ChristopherGS +- @gvx +- @AlexandreDecan +- @lots0logs +- @tobbez +- @jaredsampson +- @BoboTIG + +StrictYAML also includes code from [ruamel.yaml](https://yaml.readthedocs.io/en/latest/), Copyright Anthon van der Neut. + +## Contributing + +- Before writing any code, please read the tutorial on [contributing to hitchdev libraries](https://hitchdev.com/approach/contributing-to-hitch-libraries/). +- Before writing any code, if you're proposing a new feature, please raise it on github. If it's an existing feature / bug, please comment and briefly describe how you're going to implement it. +- All code needs to come accompanied with a story that exercises it or a modification to an existing story. This is used both to test the code and build the documentation. + + + +%package -n python3-strictyaml +Summary: Strict, typed YAML parser +Provides: python-strictyaml +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-strictyaml +# StrictYAML + +StrictYAML is a [type-safe](https://en.wikipedia.org/wiki/Type_safety) YAML parser +that parses and validates a [restricted subset](https://hitchdev.com/strictyaml/features-removed) of the [YAML](https://hitchdev.com/strictyaml/what-is-yaml) +specification. + +Priorities: + +- Beautiful API +- Refusing to parse [the ugly, hard to read and insecure features of YAML](https://hitchdev.com/strictyaml/features-removed) like [the Norway problem](https://hitchdev.com/strictyaml/why/implicit-typing-removed). +- Strict validation of markup and straightforward type casting. +- Clear, readable exceptions with **code snippets** and **line numbers**. +- Acting as a near-drop in replacement for pyyaml, ruamel.yaml or poyo. +- Ability to read in YAML, make changes and write it out again with comments preserved. +- [Not speed](https://hitchdev.com/strictyaml/why/speed-not-a-priority), currently. + + +Simple example: + +```yaml +# All about the character +name: Ford Prefect +age: 42 +possessions: +- Towel + +``` + + +```python +from strictyaml import load, Map, Str, Int, Seq, YAMLError + +``` + + + + + +Default parse result: + + +```python +>>> load(yaml_snippet) +YAML({'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']}) +``` + + + +All data is string, list or OrderedDict: + + +```python +>>> load(yaml_snippet).data +{'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']} +``` + + + +Quickstart with schema: + + +```python +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: + + +```python +>>> 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: + +```yaml +# All about the character +name: Ford Prefect +age: 42 + +``` + + + + + + +For example, a schema violation: + + +```python +try: + person = load(yaml_snippet, schema) +except YAMLError as error: + print(error) + +``` + +```yaml +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: + + +```python +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: + + +```python +person = load(yaml_snippet, schema) +person['age'] = 43 +print(person.as_yaml()) + +``` + +```yaml +# All about the character +name: Ford Prefect +age: 43 +possessions: +- Towel +``` + + + + + +As well as look up line numbers: + + +```python +>>> person = load(yaml_snippet, schema) +>>> person['possessions'][0].start_line +5 +``` + + + +And construct YAML documents from dicts or lists: + + +```python +print(as_document({"x": 1}).as_yaml()) + +``` + +```yaml +x: 1 +``` + + + + + + + +## Install + +```sh +$ 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: + +- [Why avoid using environment variables as configuration?](https://hitchdev.com/strictyaml/why-not/environment-variables-as-config) +- [Why not use HJSON?](https://hitchdev.com/strictyaml/why-not/hjson) +- [Why not HOCON?](https://hitchdev.com/strictyaml/why-not/hocon) +- [Why not use INI files?](https://hitchdev.com/strictyaml/why-not/ini) +- [Why not use JSON Schema for validation?](https://hitchdev.com/strictyaml/why-not/json-schema) +- [Why not JSON for simple configuration files?](https://hitchdev.com/strictyaml/why-not/json) +- [Why not JSON5?](https://hitchdev.com/strictyaml/why-not/json5) +- [Why not use the YAML 1.2 standard? - we don't need a new standard!](https://hitchdev.com/strictyaml/why-not/ordinary-yaml) +- [Why not use kwalify with standard YAML to validate my YAML?](https://hitchdev.com/strictyaml/why-not/pykwalify) +- [Why not use Python's schema library (or similar) for validation?](https://hitchdev.com/strictyaml/why-not/python-schema) +- [Why not use SDLang?](https://hitchdev.com/strictyaml/why-not/sdlang) +- [What is wrong with TOML?](https://hitchdev.com/strictyaml/why-not/toml) +- [Why shouldn't I just use Python code for configuration?](https://hitchdev.com/strictyaml/why-not/turing-complete-code) +- [Why not use XML for configuration or DSLs?](https://hitchdev.com/strictyaml/why-not/xml) + + + +## Using StrictYAML + +How to: + +- [Build a YAML document from scratch in code](https://hitchdev.com/strictyaml/using/alpha/howto/build-yaml-document) +- [Either/or schema validation of different, equally valid different kinds of YAML](https://hitchdev.com/strictyaml/using/alpha/howto/either-or-validation) +- [Labeling exceptions](https://hitchdev.com/strictyaml/using/alpha/howto/label-exceptions) +- [Merge YAML documents](https://hitchdev.com/strictyaml/using/alpha/howto/merge-yaml-documents) +- [Revalidate an already validated document](https://hitchdev.com/strictyaml/using/alpha/howto/revalidation) +- [Reading in YAML, editing it and writing it back out](https://hitchdev.com/strictyaml/using/alpha/howto/roundtripping) +- [Get line numbers of YAML elements](https://hitchdev.com/strictyaml/using/alpha/howto/what-line) +- [Parsing YAML without a schema](https://hitchdev.com/strictyaml/using/alpha/howto/without-a-schema) + + +Compound validators: + +- [Fixed length sequences (FixedSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/fixed-length-sequences) +- [Mappings combining defined and undefined keys (MapCombined)](https://hitchdev.com/strictyaml/using/alpha/compound/map-combined) +- [Mappings with arbitrary key names (MapPattern)](https://hitchdev.com/strictyaml/using/alpha/compound/map-pattern) +- [Mapping with defined keys and a custom key validator (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/mapping-with-slug-keys) +- [Using a YAML object of a parsed mapping](https://hitchdev.com/strictyaml/using/alpha/compound/mapping-yaml-object) +- [Mappings with defined keys (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/mapping) +- [Optional keys with defaults (Map/Optional)](https://hitchdev.com/strictyaml/using/alpha/compound/optional-keys-with-defaults) +- [Validating optional keys in mappings (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/optional-keys) +- [Sequences of unique items (UniqueSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/sequences-of-unique-items) +- [Sequence/list validator (Seq)](https://hitchdev.com/strictyaml/using/alpha/compound/sequences) +- [Updating document with a schema](https://hitchdev.com/strictyaml/using/alpha/compound/update) + + +Scalar validators: + +- [Boolean (Bool)](https://hitchdev.com/strictyaml/using/alpha/scalar/boolean) +- [Parsing comma separated items (CommaSeparated)](https://hitchdev.com/strictyaml/using/alpha/scalar/comma-separated) +- [Datetimes (Datetime)](https://hitchdev.com/strictyaml/using/alpha/scalar/datetime) +- [Decimal numbers (Decimal)](https://hitchdev.com/strictyaml/using/alpha/scalar/decimal) +- [Email and URL validators](https://hitchdev.com/strictyaml/using/alpha/scalar/email-and-url) +- [Empty key validation](https://hitchdev.com/strictyaml/using/alpha/scalar/empty) +- [Enumerated scalars (Enum)](https://hitchdev.com/strictyaml/using/alpha/scalar/enum) +- [Floating point numbers (Float)](https://hitchdev.com/strictyaml/using/alpha/scalar/float) +- [Hexadecimal Integers (HexInt)](https://hitchdev.com/strictyaml/using/alpha/scalar/hexadecimal-integer) +- [Integers (Int)](https://hitchdev.com/strictyaml/using/alpha/scalar/integer) +- [Validating strings with regexes (Regex)](https://hitchdev.com/strictyaml/using/alpha/scalar/regular-expressions) +- [Parsing strings (Str)](https://hitchdev.com/strictyaml/using/alpha/scalar/string) + + +Restrictions: + +- [Disallowed YAML](https://hitchdev.com/strictyaml/using/alpha/restrictions/disallowed-yaml) +- [Duplicate keys](https://hitchdev.com/strictyaml/using/alpha/restrictions/duplicate-keys) +- [Dirty load](https://hitchdev.com/strictyaml/using/alpha/restrictions/loading-dirty-yaml) + + + +## Design justifications + +There are some design decisions in StrictYAML which are controversial +and/or not obvious. Those are documented here: + +- [What is wrong with duplicate keys?](https://hitchdev.com/strictyaml/why/duplicate-keys-disallowed) +- [What is wrong with explicit tags?](https://hitchdev.com/strictyaml/why/explicit-tags-removed) +- [What is wrong with flow-style YAML?](https://hitchdev.com/strictyaml/why/flow-style-removed) +- [The Norway Problem - why StrictYAML refuses to do implicit typing and so should you](https://hitchdev.com/strictyaml/why/implicit-typing-removed) +- [What is wrong with node anchors and references?](https://hitchdev.com/strictyaml/why/node-anchors-and-references-removed) +- [Why does StrictYAML not parse direct representations of Python objects?](https://hitchdev.com/strictyaml/why/not-parse-direct-representations-of-python-objects) +- [Why does StrictYAML only parse from strings and not files?](https://hitchdev.com/strictyaml/why/only-parse-strings-not-files) +- [Why is parsing speed not a high priority for StrictYAML?](https://hitchdev.com/strictyaml/why/speed-not-a-priority) +- [What is syntax typing?](https://hitchdev.com/strictyaml/why/syntax-typing-bad) +- [Why does StrictYAML make you define a schema in Python - a Turing-complete language?](https://hitchdev.com/strictyaml/why/turing-complete-schema) + + + +## Star Contributors + +- @wwoods +- @chrisburr +- @jnichols0 + +## Other Contributors + +- @eulores +- @WaltWoods +- @ChristopherGS +- @gvx +- @AlexandreDecan +- @lots0logs +- @tobbez +- @jaredsampson +- @BoboTIG + +StrictYAML also includes code from [ruamel.yaml](https://yaml.readthedocs.io/en/latest/), Copyright Anthon van der Neut. + +## Contributing + +- Before writing any code, please read the tutorial on [contributing to hitchdev libraries](https://hitchdev.com/approach/contributing-to-hitch-libraries/). +- Before writing any code, if you're proposing a new feature, please raise it on github. If it's an existing feature / bug, please comment and briefly describe how you're going to implement it. +- All code needs to come accompanied with a story that exercises it or a modification to an existing story. This is used both to test the code and build the documentation. + + + +%package help +Summary: Development documents and examples for strictyaml +Provides: python3-strictyaml-doc +%description help +# StrictYAML + +StrictYAML is a [type-safe](https://en.wikipedia.org/wiki/Type_safety) YAML parser +that parses and validates a [restricted subset](https://hitchdev.com/strictyaml/features-removed) of the [YAML](https://hitchdev.com/strictyaml/what-is-yaml) +specification. + +Priorities: + +- Beautiful API +- Refusing to parse [the ugly, hard to read and insecure features of YAML](https://hitchdev.com/strictyaml/features-removed) like [the Norway problem](https://hitchdev.com/strictyaml/why/implicit-typing-removed). +- Strict validation of markup and straightforward type casting. +- Clear, readable exceptions with **code snippets** and **line numbers**. +- Acting as a near-drop in replacement for pyyaml, ruamel.yaml or poyo. +- Ability to read in YAML, make changes and write it out again with comments preserved. +- [Not speed](https://hitchdev.com/strictyaml/why/speed-not-a-priority), currently. + + +Simple example: + +```yaml +# All about the character +name: Ford Prefect +age: 42 +possessions: +- Towel + +``` + + +```python +from strictyaml import load, Map, Str, Int, Seq, YAMLError + +``` + + + + + +Default parse result: + + +```python +>>> load(yaml_snippet) +YAML({'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']}) +``` + + + +All data is string, list or OrderedDict: + + +```python +>>> load(yaml_snippet).data +{'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']} +``` + + + +Quickstart with schema: + + +```python +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: + + +```python +>>> 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: + +```yaml +# All about the character +name: Ford Prefect +age: 42 + +``` + + + + + + +For example, a schema violation: + + +```python +try: + person = load(yaml_snippet, schema) +except YAMLError as error: + print(error) + +``` + +```yaml +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: + + +```python +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: + + +```python +person = load(yaml_snippet, schema) +person['age'] = 43 +print(person.as_yaml()) + +``` + +```yaml +# All about the character +name: Ford Prefect +age: 43 +possessions: +- Towel +``` + + + + + +As well as look up line numbers: + + +```python +>>> person = load(yaml_snippet, schema) +>>> person['possessions'][0].start_line +5 +``` + + + +And construct YAML documents from dicts or lists: + + +```python +print(as_document({"x": 1}).as_yaml()) + +``` + +```yaml +x: 1 +``` + + + + + + + +## Install + +```sh +$ 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: + +- [Why avoid using environment variables as configuration?](https://hitchdev.com/strictyaml/why-not/environment-variables-as-config) +- [Why not use HJSON?](https://hitchdev.com/strictyaml/why-not/hjson) +- [Why not HOCON?](https://hitchdev.com/strictyaml/why-not/hocon) +- [Why not use INI files?](https://hitchdev.com/strictyaml/why-not/ini) +- [Why not use JSON Schema for validation?](https://hitchdev.com/strictyaml/why-not/json-schema) +- [Why not JSON for simple configuration files?](https://hitchdev.com/strictyaml/why-not/json) +- [Why not JSON5?](https://hitchdev.com/strictyaml/why-not/json5) +- [Why not use the YAML 1.2 standard? - we don't need a new standard!](https://hitchdev.com/strictyaml/why-not/ordinary-yaml) +- [Why not use kwalify with standard YAML to validate my YAML?](https://hitchdev.com/strictyaml/why-not/pykwalify) +- [Why not use Python's schema library (or similar) for validation?](https://hitchdev.com/strictyaml/why-not/python-schema) +- [Why not use SDLang?](https://hitchdev.com/strictyaml/why-not/sdlang) +- [What is wrong with TOML?](https://hitchdev.com/strictyaml/why-not/toml) +- [Why shouldn't I just use Python code for configuration?](https://hitchdev.com/strictyaml/why-not/turing-complete-code) +- [Why not use XML for configuration or DSLs?](https://hitchdev.com/strictyaml/why-not/xml) + + + +## Using StrictYAML + +How to: + +- [Build a YAML document from scratch in code](https://hitchdev.com/strictyaml/using/alpha/howto/build-yaml-document) +- [Either/or schema validation of different, equally valid different kinds of YAML](https://hitchdev.com/strictyaml/using/alpha/howto/either-or-validation) +- [Labeling exceptions](https://hitchdev.com/strictyaml/using/alpha/howto/label-exceptions) +- [Merge YAML documents](https://hitchdev.com/strictyaml/using/alpha/howto/merge-yaml-documents) +- [Revalidate an already validated document](https://hitchdev.com/strictyaml/using/alpha/howto/revalidation) +- [Reading in YAML, editing it and writing it back out](https://hitchdev.com/strictyaml/using/alpha/howto/roundtripping) +- [Get line numbers of YAML elements](https://hitchdev.com/strictyaml/using/alpha/howto/what-line) +- [Parsing YAML without a schema](https://hitchdev.com/strictyaml/using/alpha/howto/without-a-schema) + + +Compound validators: + +- [Fixed length sequences (FixedSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/fixed-length-sequences) +- [Mappings combining defined and undefined keys (MapCombined)](https://hitchdev.com/strictyaml/using/alpha/compound/map-combined) +- [Mappings with arbitrary key names (MapPattern)](https://hitchdev.com/strictyaml/using/alpha/compound/map-pattern) +- [Mapping with defined keys and a custom key validator (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/mapping-with-slug-keys) +- [Using a YAML object of a parsed mapping](https://hitchdev.com/strictyaml/using/alpha/compound/mapping-yaml-object) +- [Mappings with defined keys (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/mapping) +- [Optional keys with defaults (Map/Optional)](https://hitchdev.com/strictyaml/using/alpha/compound/optional-keys-with-defaults) +- [Validating optional keys in mappings (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/optional-keys) +- [Sequences of unique items (UniqueSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/sequences-of-unique-items) +- [Sequence/list validator (Seq)](https://hitchdev.com/strictyaml/using/alpha/compound/sequences) +- [Updating document with a schema](https://hitchdev.com/strictyaml/using/alpha/compound/update) + + +Scalar validators: + +- [Boolean (Bool)](https://hitchdev.com/strictyaml/using/alpha/scalar/boolean) +- [Parsing comma separated items (CommaSeparated)](https://hitchdev.com/strictyaml/using/alpha/scalar/comma-separated) +- [Datetimes (Datetime)](https://hitchdev.com/strictyaml/using/alpha/scalar/datetime) +- [Decimal numbers (Decimal)](https://hitchdev.com/strictyaml/using/alpha/scalar/decimal) +- [Email and URL validators](https://hitchdev.com/strictyaml/using/alpha/scalar/email-and-url) +- [Empty key validation](https://hitchdev.com/strictyaml/using/alpha/scalar/empty) +- [Enumerated scalars (Enum)](https://hitchdev.com/strictyaml/using/alpha/scalar/enum) +- [Floating point numbers (Float)](https://hitchdev.com/strictyaml/using/alpha/scalar/float) +- [Hexadecimal Integers (HexInt)](https://hitchdev.com/strictyaml/using/alpha/scalar/hexadecimal-integer) +- [Integers (Int)](https://hitchdev.com/strictyaml/using/alpha/scalar/integer) +- [Validating strings with regexes (Regex)](https://hitchdev.com/strictyaml/using/alpha/scalar/regular-expressions) +- [Parsing strings (Str)](https://hitchdev.com/strictyaml/using/alpha/scalar/string) + + +Restrictions: + +- [Disallowed YAML](https://hitchdev.com/strictyaml/using/alpha/restrictions/disallowed-yaml) +- [Duplicate keys](https://hitchdev.com/strictyaml/using/alpha/restrictions/duplicate-keys) +- [Dirty load](https://hitchdev.com/strictyaml/using/alpha/restrictions/loading-dirty-yaml) + + + +## Design justifications + +There are some design decisions in StrictYAML which are controversial +and/or not obvious. Those are documented here: + +- [What is wrong with duplicate keys?](https://hitchdev.com/strictyaml/why/duplicate-keys-disallowed) +- [What is wrong with explicit tags?](https://hitchdev.com/strictyaml/why/explicit-tags-removed) +- [What is wrong with flow-style YAML?](https://hitchdev.com/strictyaml/why/flow-style-removed) +- [The Norway Problem - why StrictYAML refuses to do implicit typing and so should you](https://hitchdev.com/strictyaml/why/implicit-typing-removed) +- [What is wrong with node anchors and references?](https://hitchdev.com/strictyaml/why/node-anchors-and-references-removed) +- [Why does StrictYAML not parse direct representations of Python objects?](https://hitchdev.com/strictyaml/why/not-parse-direct-representations-of-python-objects) +- [Why does StrictYAML only parse from strings and not files?](https://hitchdev.com/strictyaml/why/only-parse-strings-not-files) +- [Why is parsing speed not a high priority for StrictYAML?](https://hitchdev.com/strictyaml/why/speed-not-a-priority) +- [What is syntax typing?](https://hitchdev.com/strictyaml/why/syntax-typing-bad) +- [Why does StrictYAML make you define a schema in Python - a Turing-complete language?](https://hitchdev.com/strictyaml/why/turing-complete-schema) + + + +## Star Contributors + +- @wwoods +- @chrisburr +- @jnichols0 + +## Other Contributors + +- @eulores +- @WaltWoods +- @ChristopherGS +- @gvx +- @AlexandreDecan +- @lots0logs +- @tobbez +- @jaredsampson +- @BoboTIG + +StrictYAML also includes code from [ruamel.yaml](https://yaml.readthedocs.io/en/latest/), Copyright Anthon van der Neut. + +## Contributing + +- Before writing any code, please read the tutorial on [contributing to hitchdev libraries](https://hitchdev.com/approach/contributing-to-hitch-libraries/). +- Before writing any code, if you're proposing a new feature, please raise it on github. If it's an existing feature / bug, please comment and briefly describe how you're going to implement it. +- All code needs to come accompanied with a story that exercises it or a modification to an existing story. This is used both to test the code and build the documentation. + + + +%prep +%autosetup -n strictyaml-1.6.2 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-strictyaml -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Thu Mar 09 2023 Python_Bot <Python_Bot@openeuler.org> - 1.6.2-1 +- Package Spec generated @@ -0,0 +1 @@ +5a84edeac061586417630667d4ec5590 strictyaml-1.6.2.tar.gz |