Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-strictyaml for openSUSE:Factory checked in at 2022-03-10 22:45:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-strictyaml (Old) and /work/SRC/openSUSE:Factory/.python-strictyaml.new.2349 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-strictyaml" Thu Mar 10 22:45:23 2022 rev:6 rq:960711 version:1.6.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-strictyaml/python-strictyaml.changes 2021-08-03 22:49:29.456442575 +0200 +++ /work/SRC/openSUSE:Factory/.python-strictyaml.new.2349/python-strictyaml.changes 2022-03-11 11:34:10.158119682 +0100 @@ -1,0 +2,7 @@ +Wed Mar 9 10:02:18 UTC 2022 - Michael Str??der <mich...@stroeder.com> + +- update to 1.6.1 + too many changes to be listed here + see detailed changelog: https://hitchdev.com/strictyaml/changelog/ + +------------------------------------------------------------------- Old: ---- strictyaml-1.4.4.tar.gz New: ---- strictyaml-1.6.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-strictyaml.spec ++++++ --- /var/tmp/diff_new_pack.Lwm8Gi/_old 2022-03-11 11:34:10.638120245 +0100 +++ /var/tmp/diff_new_pack.Lwm8Gi/_new 2022-03-11 11:34:10.642120250 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-strictyaml # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,8 +17,9 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} + Name: python-strictyaml -Version: 1.4.4 +Version: 1.6.1 Release: 0 Summary: Strict, typed YAML parser License: MIT @@ -30,8 +31,8 @@ Requires: python-python-dateutil >= 2.6.0 BuildArch: noarch # SECTION test requirements -BuildRequires: %{python_module pytest} -BuildRequires: %{python_module python-dateutil >= 2.6.0} +# BuildRequires: %{python_module pytest} +# BuildRequires: %{python_module python-dateutil >= 2.6.0} # /SECTION %python_subpackages ++++++ strictyaml-1.4.4.tar.gz -> strictyaml-1.6.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/PKG-INFO new/strictyaml-1.6.1/PKG-INFO --- old/strictyaml-1.4.4/PKG-INFO 2021-06-19 20:35:01.669842500 +0200 +++ new/strictyaml-1.6.1/PKG-INFO 2021-11-28 19:08:59.655146400 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: strictyaml -Version: 1.4.4 +Version: 1.6.1 Summary: Strict, typed YAML parser Home-page: http://hitchdev.com/strictyaml Author: Colm O'Connor @@ -207,19 +207,20 @@ less the same purpose as StrictYAML. I've tried to make it the best one. Below is a series of documented justifications: - - [Why not use JSON Schema for validation?](https://hitchdev.com/strictyaml/why-not/) - - [What is wrong with TOML?](https://hitchdev.com/strictyaml/why-not/) - - [Why shouldn't I just use Python code for configuration?](https://hitchdev.com/strictyaml/why-not/) - - [Why not JSON5?](https://hitchdev.com/strictyaml/why-not/) - - [Why not JSON for simple configuration files?](https://hitchdev.com/strictyaml/why-not/) - - [Why avoid using environment variables as configuration?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use XML for configuration or DSLs?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use INI files?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use the YAML 1.2 standard? - we don't need a new standard!](https://hitchdev.com/strictyaml/why-not/) - - [Why not use Python's schema library (or similar) for validation?](https://hitchdev.com/strictyaml/why-not/) - - [Why not HOCON?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use SDLang?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use kwalify with standard YAML to validate my YAML?](https://hitchdev.com/strictyaml/why-not/) + - [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) @@ -227,50 +228,52 @@ How to: - - [Merge YAML documents](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Build a YAML document from scratch in code](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Reading in YAML, editing it and writing it back out](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Get line numbers of YAML elements](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Either/or schema validation of different, equally valid different kinds of YAML](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Labeling exceptions](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Parsing YAML without a schema](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Revalidate an already validated document](https://hitchdev.com/strictyaml/using/alpha/howto/) + - [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: - - [Using a YAML object of a parsed mapping](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Mapping with defined keys and a custom key validator (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Mappings with defined keys (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Updating document with a schema](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Validating optional keys in mappings (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Mappings with arbitrary key names (MapPattern)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Optional keys with defaults (Map/Optional)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Sequence/list validator (Seq)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Sequences of unique items (UniqueSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Fixed length sequences (FixedSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/) + - [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: - - [Empty key validation](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Datetimes (Datetime)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Floating point numbers (Float)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Email and URL validators](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Parsing comma separated items (CommaSeparated)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Integers (Int)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Decimal numbers (Decimal)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Boolean (Bool)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Validating strings with regexes (Regex)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Parsing strings (Str)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Enumerated scalars (Enum)](https://hitchdev.com/strictyaml/using/alpha/scalar/) + - [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/) - - [Dirty load](https://hitchdev.com/strictyaml/using/alpha/restrictions/) - - [Duplicate keys](https://hitchdev.com/strictyaml/using/alpha/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) @@ -279,16 +282,16 @@ There are some design decisions in StrictYAML which are controversial and/or not obvious. Those are documented here: - - [Why is parsing speed not a high priority for StrictYAML?](https://hitchdev.com/strictyaml/why/) - - [What is syntax typing?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with node anchors and references?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with duplicate keys?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with explicit tags?](https://hitchdev.com/strictyaml/why/) - - [The Norway Problem - why StrictYAML refuses to do implicit typing and so should you](https://hitchdev.com/strictyaml/why/) - - [Why does StrictYAML not parse direct representations of Python objects?](https://hitchdev.com/strictyaml/why/) - - [Why does StrictYAML only parse from strings and not files?](https://hitchdev.com/strictyaml/why/) - - [Why does StrictYAML make you define a schema in Python - a Turing-complete language?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with flow-style YAML?](https://hitchdev.com/strictyaml/why/) + - [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) @@ -296,9 +299,9 @@ - @wwoods - @chrisburr + - @jnichols0 - - ## Contributors + ## Other Contributors - @eulores - @WaltWoods @@ -310,6 +313,7 @@ - @jaredsampson - @BoboTIG + StrictYAML also includes code from [ruamel.yaml](https://yaml.readthedocs.io/en/latest/), Copyright Anthon van der Neut. ## Contributing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/README.md new/strictyaml-1.6.1/README.md --- old/strictyaml-1.4.4/README.md 2021-06-19 20:34:38.000000000 +0200 +++ new/strictyaml-1.6.1/README.md 2021-11-28 18:36:24.000000000 +0100 @@ -199,19 +199,20 @@ less the same purpose as StrictYAML. I've tried to make it the best one. Below is a series of documented justifications: -- [Why not use JSON Schema for validation?](https://hitchdev.com/strictyaml/why-not/) -- [What is wrong with TOML?](https://hitchdev.com/strictyaml/why-not/) -- [Why shouldn't I just use Python code for configuration?](https://hitchdev.com/strictyaml/why-not/) -- [Why not JSON5?](https://hitchdev.com/strictyaml/why-not/) -- [Why not JSON for simple configuration files?](https://hitchdev.com/strictyaml/why-not/) -- [Why avoid using environment variables as configuration?](https://hitchdev.com/strictyaml/why-not/) -- [Why not use XML for configuration or DSLs?](https://hitchdev.com/strictyaml/why-not/) -- [Why not use INI files?](https://hitchdev.com/strictyaml/why-not/) -- [Why not use the YAML 1.2 standard? - we don't need a new standard!](https://hitchdev.com/strictyaml/why-not/) -- [Why not use Python's schema library (or similar) for validation?](https://hitchdev.com/strictyaml/why-not/) -- [Why not HOCON?](https://hitchdev.com/strictyaml/why-not/) -- [Why not use SDLang?](https://hitchdev.com/strictyaml/why-not/) -- [Why not use kwalify with standard YAML to validate my YAML?](https://hitchdev.com/strictyaml/why-not/) +- [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) @@ -219,50 +220,52 @@ How to: -- [Merge YAML documents](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Build a YAML document from scratch in code](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Reading in YAML, editing it and writing it back out](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Get line numbers of YAML elements](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Either/or schema validation of different, equally valid different kinds of YAML](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Labeling exceptions](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Parsing YAML without a schema](https://hitchdev.com/strictyaml/using/alpha/howto/) -- [Revalidate an already validated document](https://hitchdev.com/strictyaml/using/alpha/howto/) +- [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: -- [Using a YAML object of a parsed mapping](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Mapping with defined keys and a custom key validator (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Mappings with defined keys (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Updating document with a schema](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Validating optional keys in mappings (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Mappings with arbitrary key names (MapPattern)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Optional keys with defaults (Map/Optional)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Sequence/list validator (Seq)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Sequences of unique items (UniqueSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/) -- [Fixed length sequences (FixedSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/) +- [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: -- [Empty key validation](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Datetimes (Datetime)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Floating point numbers (Float)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Email and URL validators](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Parsing comma separated items (CommaSeparated)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Integers (Int)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Decimal numbers (Decimal)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Boolean (Bool)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Validating strings with regexes (Regex)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Parsing strings (Str)](https://hitchdev.com/strictyaml/using/alpha/scalar/) -- [Enumerated scalars (Enum)](https://hitchdev.com/strictyaml/using/alpha/scalar/) +- [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/) -- [Dirty load](https://hitchdev.com/strictyaml/using/alpha/restrictions/) -- [Duplicate keys](https://hitchdev.com/strictyaml/using/alpha/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) @@ -271,16 +274,16 @@ There are some design decisions in StrictYAML which are controversial and/or not obvious. Those are documented here: -- [Why is parsing speed not a high priority for StrictYAML?](https://hitchdev.com/strictyaml/why/) -- [What is syntax typing?](https://hitchdev.com/strictyaml/why/) -- [What is wrong with node anchors and references?](https://hitchdev.com/strictyaml/why/) -- [What is wrong with duplicate keys?](https://hitchdev.com/strictyaml/why/) -- [What is wrong with explicit tags?](https://hitchdev.com/strictyaml/why/) -- [The Norway Problem - why StrictYAML refuses to do implicit typing and so should you](https://hitchdev.com/strictyaml/why/) -- [Why does StrictYAML not parse direct representations of Python objects?](https://hitchdev.com/strictyaml/why/) -- [Why does StrictYAML only parse from strings and not files?](https://hitchdev.com/strictyaml/why/) -- [Why does StrictYAML make you define a schema in Python - a Turing-complete language?](https://hitchdev.com/strictyaml/why/) -- [What is wrong with flow-style YAML?](https://hitchdev.com/strictyaml/why/) +- [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) @@ -288,9 +291,9 @@ - @wwoods - @chrisburr +- @jnichols0 - -## Contributors +## Other Contributors - @eulores - @WaltWoods @@ -302,6 +305,7 @@ - @jaredsampson - @BoboTIG +StrictYAML also includes code from [ruamel.yaml](https://yaml.readthedocs.io/en/latest/), Copyright Anthon van der Neut. ## Contributing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/VERSION new/strictyaml-1.6.1/VERSION --- old/strictyaml-1.4.4/VERSION 2021-06-19 20:34:52.000000000 +0200 +++ new/strictyaml-1.6.1/VERSION 2021-11-28 19:08:43.000000000 +0100 @@ -1 +1 @@ -1.4.4 \ No newline at end of file +1.6.1 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/hitch/hitchreqs.in new/strictyaml-1.6.1/hitch/hitchreqs.in --- old/strictyaml-1.4.4/hitch/hitchreqs.in 2021-06-19 13:38:55.000000000 +0200 +++ new/strictyaml-1.6.1/hitch/hitchreqs.in 2021-11-18 10:06:34.000000000 +0100 @@ -1,2 +1,2 @@ hitchrun>=0.4.0 -hitchpylibrarytoolkit>=0.4.5 +hitchpylibrarytoolkit>=0.5.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/hitch/hitchreqs.txt new/strictyaml-1.6.1/hitch/hitchreqs.txt --- old/strictyaml-1.4.4/hitch/hitchreqs.txt 2021-06-19 13:44:08.000000000 +0200 +++ new/strictyaml-1.6.1/hitch/hitchreqs.txt 2021-11-20 18:34:11.000000000 +0100 @@ -1,87 +1,221 @@ -appdirs==1.4.4 # via black -argcomplete==1.12.2 # via hitchrun -backcall==0.2.0 # via ipython -black==20.8b1 # via hitchpylibrarytoolkit -bleach==3.2.1 # via readme-renderer -certifi==2020.11.8 # via requests -cffi==1.14.4 # via cryptography -chardet==3.0.4 # via requests -click==7.1.2 # via black, hitchrun, pip-tools -colorama==0.4.4 # via hitchrun, hitchstory, prettystack, twine -commandlib==0.3.5 # via hitchbuildpy, hitchrun, icommandlib -cryptography==3.2.1 # via secretstorage -decorator==4.4.2 # via ipython -dirtemplate==0.4.0 # via hitchpylibrarytoolkit -docutils==0.16 # via readme-renderer -flake8==3.8.4 # via hitchpylibrarytoolkit -gitdb==4.0.5 # via gitpython -gitpython==3.1.11 # via hitchpylibrarytoolkit -hitchbuild==0.6.3 # via dirtemplate, hitchbuildpy -hitchbuildpy==0.5.4 # via hitchpylibrarytoolkit -hitchpylibrarytoolkit==0.4.5 # via -r hitchreqs.in -hitchrun==0.4.0 # via -r hitchreqs.in, hitchpylibrarytoolkit -hitchrunpy==0.10.0 # via hitchpylibrarytoolkit -hitchstory==0.12.1 # via hitchpylibrarytoolkit -icommandlib==0.5.0 # via hitchrunpy -idna==2.10 # via requests -ipython-genutils==0.2.0 # via traitlets -ipython==7.16.1 # via hitchpylibrarytoolkit -jedi==0.17.2 # via ipython -jeepney==0.6.0 # via keyring, secretstorage -jinja2==2.11.2 # via dirtemplate, hitchrunpy, hitchstory, prettystack -kaching==0.4.2 # via hitchpylibrarytoolkit -keyring==21.5.0 # via twine -markupsafe==1.1.1 # via jinja2 -mccabe==0.6.1 # via flake8 -mypy-extensions==0.4.3 # via black -packaging==20.7 # via bleach -parso==0.7.1 # via jedi -path.py==12.5.0 # via hitchbuild, hitchrun, hitchrunpy, hitchstory, pathquery, prettystack -path==15.0.0 # via path.py -pathquery==0.3.0 # via dirtemplate, hitchbuild, hitchbuildpy, hitchstory -pathspec==0.8.1 # via black -peewee==3.14.0 # via hitchbuild -pexpect==4.8.0 # via ipython -pickleshare==0.7.5 # via ipython -pip-tools==5.4.0 # via hitchrun -pkginfo==1.6.1 # via twine -prettystack==0.3.0 # via hitchrun, hitchrunpy, hitchstory -prompt-toolkit==3.0.8 # via ipython -psutil==5.7.3 # via icommandlib -ptyprocess==0.6.0 # via pexpect -pycodestyle==2.6.0 # via flake8 -pycparser==2.20 # via cffi -pyflakes==2.2.0 # via flake8 -pygments==2.7.2 # via ipython, readme-renderer -pyparsing==2.4.7 # via packaging -pyte==0.8.0 # via icommandlib -python-dateutil==2.8.1 # via strictyaml -python-slugify==4.0.1 # via dirtemplate, hitchbuild, hitchstory -pyuv==1.4.0 # via icommandlib -q==2.6 # via hitchpylibrarytoolkit -readme-renderer==28.0 # via twine -regex==2020.11.13 # via black -requests-toolbelt==0.9.1 # via twine -requests==2.25.0 # via requests-toolbelt, twine -rfc3986==1.4.0 # via twine -ruamel.yaml.clib==0.2.2 # via ruamel.yaml -ruamel.yaml==0.16.12 # via strictyaml -secretstorage==3.3.0 # via keyring -six==1.15.0 # via bleach, cryptography, pip-tools, python-dateutil, readme-renderer -smmap==3.0.4 # via gitdb -strictyaml==1.1.1 # via dirtemplate, hitchstory -templex==0.2.0 # via hitchpylibrarytoolkit -text-unidecode==1.3 # via python-slugify -toml==0.10.2 # via black -tqdm==4.54.0 # via twine -traitlets==5.0.4 # via ipython -twine==3.2.0 # via hitchpylibrarytoolkit -typed-ast==1.4.1 # via black -typing-extensions==3.7.4.3 # via black -urllib3==1.26.2 # via requests -uvloop==0.14.0 # via icommandlib -wcwidth==0.2.5 # via prompt-toolkit, pyte -webencodings==0.5.1 # via bleach +appdirs==1.4.4 + # via black +argcomplete==1.12.2 + # via hitchrun +backcall==0.2.0 + # via ipython +black==20.8b1 + # via hitchpylibrarytoolkit +bleach==3.2.1 + # via readme-renderer +certifi==2020.11.8 + # via requests +cffi==1.14.4 + # via cryptography +chardet==3.0.4 + # via requests +click==7.1.2 + # via + # black + # hitchrun + # pip-tools +colorama==0.4.4 + # via + # hitchrun + # hitchstory + # prettystack + # twine +commandlib==0.3.5 + # via + # hitchbuildpy + # hitchrun + # icommandlib +cryptography==3.2.1 + # via secretstorage +decorator==4.4.2 + # via ipython +dirtemplate==0.4.0 + # via hitchpylibrarytoolkit +docutils==0.16 + # via readme-renderer +flake8==3.8.4 + # via hitchpylibrarytoolkit +gitdb==4.0.5 + # via gitpython +gitpython==3.1.11 + # via hitchpylibrarytoolkit +hitchbuild==0.6.3 + # via + # dirtemplate + # hitchbuildpy +hitchbuildpy==0.5.4 + # via hitchpylibrarytoolkit +hitchpylibrarytoolkit==0.5.1 + # via -r hitchreqs.in +hitchrun==0.4.0 + # via + # -r hitchreqs.in + # hitchpylibrarytoolkit +hitchrunpy==0.10.0 + # via hitchpylibrarytoolkit +hitchstory==0.12.1 + # via hitchpylibrarytoolkit +icommandlib==0.5.0 + # via hitchrunpy +idna==2.10 + # via requests +ipython==7.16.1 + # via hitchpylibrarytoolkit +ipython-genutils==0.2.0 + # via traitlets +jedi==0.17.2 + # via ipython +jeepney==0.6.0 + # via + # keyring + # secretstorage +jinja2==2.11.2 + # via + # dirtemplate + # hitchrunpy + # hitchstory + # prettystack +kaching==0.4.2 + # via hitchpylibrarytoolkit +keyring==21.5.0 + # via twine +markupsafe==1.1.1 + # via jinja2 +mccabe==0.6.1 + # via flake8 +mypy-extensions==0.4.3 + # via black +packaging==20.7 + # via bleach +parso==0.7.1 + # via jedi +path==15.0.0 + # via path.py +path.py==12.5.0 + # via + # hitchbuild + # hitchrun + # hitchrunpy + # hitchstory + # pathquery + # prettystack +pathquery==0.3.0 + # via + # dirtemplate + # hitchbuild + # hitchbuildpy + # hitchstory +pathspec==0.8.1 + # via black +peewee==3.14.0 + # via hitchbuild +pep517==0.12.0 + # via pip-tools +pexpect==4.8.0 + # via ipython +pickleshare==0.7.5 + # via ipython +pip-tools==6.4.0 + # via hitchrun +pkginfo==1.6.1 + # via twine +prettystack==0.3.0 + # via + # hitchrun + # hitchrunpy + # hitchstory +prompt-toolkit==3.0.8 + # via ipython +psutil==5.7.3 + # via icommandlib +ptyprocess==0.6.0 + # via pexpect +pycodestyle==2.6.0 + # via flake8 +pycparser==2.20 + # via cffi +pyflakes==2.2.0 + # via flake8 +pygments==2.7.2 + # via + # ipython + # readme-renderer +pyparsing==2.4.7 + # via packaging +pyte==0.8.0 + # via icommandlib +python-dateutil==2.8.1 + # via strictyaml +python-slugify==4.0.1 + # via + # dirtemplate + # hitchbuild + # hitchstory +pyuv==1.4.0 + # via icommandlib +q==2.6 + # via hitchpylibrarytoolkit +readme-renderer==28.0 + # via twine +regex==2020.11.13 + # via black +requests==2.25.0 + # via + # requests-toolbelt + # twine +requests-toolbelt==0.9.1 + # via twine +rfc3986==1.4.0 + # via twine +secretstorage==3.3.0 + # via keyring +six==1.15.0 + # via + # bleach + # cryptography + # python-dateutil + # readme-renderer +smmap==3.0.4 + # via gitdb +strictyaml==1.5.0 + # via + # dirtemplate + # hitchstory +templex==0.2.0 + # via hitchpylibrarytoolkit +text-unidecode==1.3 + # via python-slugify +toml==0.10.2 + # via black +tomli==1.2.2 + # via pep517 +tqdm==4.54.0 + # via twine +traitlets==5.0.4 + # via ipython +twine==3.2.0 + # via hitchpylibrarytoolkit +typed-ast==1.4.1 + # via black +typing-extensions==3.7.4.3 + # via black +urllib3==1.26.2 + # via requests +uvloop==0.14.0 + # via icommandlib +wcwidth==0.2.5 + # via + # prompt-toolkit + # pyte +webencodings==0.5.1 + # via bleach +wheel==0.37.0 + # via pip-tools # The following packages are considered to be unsafe in a requirements file: # pip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/hitch/key.py new/strictyaml-1.6.1/hitch/key.py --- old/strictyaml-1.4.4/hitch/key.py 2021-06-19 20:13:07.000000000 +0200 +++ new/strictyaml-1.6.1/hitch/key.py 2021-11-18 18:01:07.000000000 +0100 @@ -115,7 +115,6 @@ lint() doctests() storybook = _storybook().only_uninherited() - storybook.with_params(**{"python version": "2.7.14"}).ordered_by_name().play() storybook.with_params(**{"python version": "3.7.0"}).ordered_by_name().play() @@ -129,6 +128,22 @@ ).only_uninherited().ordered_by_name().play() +@expected(hitchpylibrarytoolkit.ToolkitError) +def checks(): + """ + Run all checks ensure linter, code formatter, tests and docgen all run correctly. + + These checks should prevent code that doesn't have the proper checks run from being merged. + """ + toolkit.validate_reformatting() + toolkit.lint(exclude=["__init__.py", "ruamel"]) + toolkit.validate_readmegen(Engine(DIR)) + toolkit.validate_docgen(Engine(DIR)) + doctests() + storybook = _storybook().only_uninherited() + storybook.with_params(**{"python version": "3.7.0"}).ordered_by_name().play() + + def reformat(): """ Reformat using black and then relint. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/hitch/story/dirty-load.story new/strictyaml-1.6.1/hitch/story/dirty-load.story --- old/strictyaml-1.4.4/hitch/story/dirty-load.story 2021-05-31 18:29:13.000000000 +0200 +++ new/strictyaml-1.6.1/hitch/story/dirty-load.story 2021-11-28 19:04:52.000000000 +0100 @@ -6,18 +6,20 @@ by default, but since there have since been [some requests](https://github.com/crdoconnor/strictyaml/issues/38) to parse flow style, this now allowed with the "dirty_load" method. + If allow_flow_style is True, Map indentation is not checked for + consistency, as the indentation level is dependent on the map key length. given: setup: | from strictyaml import Map, Int, MapPattern, Seq, Str, Any, dirty_load - schema = Map({"x": Map({"a": Any(), "b": Any(), "c": Any()}), "y": MapPattern(Str(), Str()), "z": Seq(Str())}) + schema = Map({"foo": Map({"a": Any(), "b": Any(), "c": Any()}), "y": MapPattern(Str(), Str()), "z": Seq(Str())}) variations: Flow style mapping: given: yaml_snippet: | - x: { a: 1, b: 2, c: 3 } + foo: { a: 1, b: 2, c: 3 } y: {} z: [] steps: - Run: | - assert dirty_load(yaml_snippet, schema, allow_flow_style=True) == {"x": {"a": "1", "b": "2", "c": "3"}, "y": {}, "z": []} + assert dirty_load(yaml_snippet, schema, allow_flow_style=True) == {"foo": {"a": "1", "b": "2", "c": "3"}, "y": {}, "z": []} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/hitch/story/map-combined.story new/strictyaml-1.6.1/hitch/story/map-combined.story --- old/strictyaml-1.4.4/hitch/story/map-combined.story 1970-01-01 01:00:00.000000000 +0100 +++ new/strictyaml-1.6.1/hitch/story/map-combined.story 2021-10-30 17:29:51.000000000 +0200 @@ -0,0 +1,140 @@ +Mappings combining defined and undefined keys (MapCombined): + docs: compound/map-combined + based on: strictyaml + experimental: yes + description: | + When you wish to support arbitrary optional keys in + some mappings (i.e. to specify some required keys in + the schema, but allow any additional ones on top of + that), you use a MapCombined. + + See https://github.com/crdoconnor/strictyaml/issues/148#issuecomment-861007657 + given: + setup: | + from strictyaml import Any, Int, MapCombined, Optional, Str, load + from ensure import Ensure + + schema = MapCombined( + { + "required": Str(), + Optional("foo"): Int(), + }, + Str(), + Any(), + ) + variations: + "Optional is present": + given: + yaml_snippet: | + required: Hello World + foo: 42 + bar: 42 + steps: + - Run: | + Ensure(load(yaml_snippet, schema).data).equals( + { + "required": "Hello World", + "foo": 42, + "bar": "42", + } + ) + "Optional is absent": + given: + yaml_snippet: | + required: Hello World + bar: 42 + steps: + - Run: | + Ensure(load(yaml_snippet, schema).data).equals( + { + "required": "Hello World", + "bar": "42", + } + ) + "Multiple undefined": + given: + yaml_snippet: | + required: Hello World + bar: 42 + baz: forty two + steps: + - Run: | + Ensure(load(yaml_snippet, schema).data).equals( + { + "required": "Hello World", + "bar": "42", + "baz": "forty two", + } + ) + "Required is absent": + given: + yaml_snippet: | + bar: 42 + steps: + - Run: + code: + load(yaml_snippet, schema) + raises: + type: strictyaml.exceptions.YAMLValidationError + message: |- + while parsing a mapping + required key(s) 'required' not found + in "<unicode string>", line 1, column 1: + bar: '42' + ^ (line: 1) + "Undefined of invalid type": + given: + setup: | + from strictyaml import Any, Int, MapCombined, Optional, Str, load + from ensure import Ensure + + schema = MapCombined( + { + "required": Str(), + }, + Str(), + Int(), + ) + yaml_snippet: | + required: Hello World + bar: forty two + steps: + - Run: + code: + load(yaml_snippet, schema) + raises: + type: strictyaml.exceptions.YAMLValidationError + message: |- + when expecting an integer + found arbitrary text + in "<unicode string>", line 2, column 1: + bar: forty two + ^ (line: 2) + "Invalid key type": + given: + setup: | + from strictyaml import Any, Int, MapCombined, Optional, Str, load + from ensure import Ensure + + schema = MapCombined( + { + "1": Str(), + }, + Int(), + Str(), + ) + yaml_snippet: | + 1: Hello World + not_an_integer: 42 + steps: + - Run: + code: + load(yaml_snippet, schema) + raises: + type: strictyaml.exceptions.YAMLValidationError + message: |- + when expecting an integer + found arbitrary text + in "<unicode string>", line 2, column 1: + not_an_integer: '42' + ^ (line: 2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/hitch/story/scalar-hexadecimal-integer.story new/strictyaml-1.6.1/hitch/story/scalar-hexadecimal-integer.story --- old/strictyaml-1.4.4/hitch/story/scalar-hexadecimal-integer.story 1970-01-01 01:00:00.000000000 +0100 +++ new/strictyaml-1.6.1/hitch/story/scalar-hexadecimal-integer.story 2021-10-14 21:22:51.000000000 +0200 @@ -0,0 +1,54 @@ +Hexadecimal Integers (HexInt): + docs: scalar/hexadecimal-integer + based on: strictyaml + description: | + StrictYAML can interpret a hexadecimal integer + preserving its value + given: + yaml_snippet: | + x: 0x1a + setup: | + from strictyaml import Map, HexInt, load + from ensure import Ensure + + schema = Map({"x": HexInt()}) + + parsed = load(yaml_snippet, schema) + + variations: + Parsed correctly: + steps: + - Run: | + Ensure(parsed).equals({"x": 26}) + Ensure(parsed.as_yaml()).equals("x: 0x1a\n") + + Uppercase: + given: + yaml_snippet: | + x: 0X1A + steps: + - Run: + code: | + Ensure(load(yaml_snippet, schema).data).equals({"x": 26}) + Ensure(load(yaml_snippet, schema).as_yaml()).equals("x: 0X1A\n") + +Invalid scalar hexadecimal integer: + based on: strictyaml + given: + yaml_snippet: | + x: some_string + setup: | + from strictyaml import Map, HexInt, load + + schema = Map({"x": HexInt()}) + steps: + - Run: + code: load(yaml_snippet, schema) + raises: + type: strictyaml.exceptions.YAMLValidationError + message: |- + when expecting a hexadecimal integer + found arbitrary text + in "<unicode string>", line 1, column 1: + x: some_string + ^ (line: 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml/__init__.py new/strictyaml-1.6.1/strictyaml/__init__.py --- old/strictyaml-1.4.4/strictyaml/__init__.py 2021-06-19 20:35:00.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml/__init__.py 2021-11-28 19:08:58.000000000 +0100 @@ -19,6 +19,7 @@ from strictyaml.scalar import Url from strictyaml.scalar import Str from strictyaml.scalar import Int +from strictyaml.scalar import HexInt from strictyaml.scalar import Bool from strictyaml.scalar import Float from strictyaml.scalar import Decimal @@ -31,6 +32,7 @@ from strictyaml.compound import Optional from strictyaml.compound import Map from strictyaml.compound import MapPattern +from strictyaml.compound import MapCombined from strictyaml.compound import Seq from strictyaml.compound import UniqueSeq from strictyaml.compound import FixedSeq @@ -51,4 +53,4 @@ from strictyaml.exceptions import DuplicateKeysDisallowed from strictyaml import exceptions -__version__ = "1.4.4" +__version__ = "1.6.1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml/compound.py new/strictyaml-1.6.1/strictyaml/compound.py --- old/strictyaml-1.4.4/strictyaml/compound.py 2021-06-19 13:15:00.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml/compound.py 2021-10-30 17:29:51.000000000 +0200 @@ -147,6 +147,15 @@ ) ) + def get_validator(self, key): + return self._validator_dict[key] + + def unexpected_key(self, key, yaml_key, value, chunk): + key.expecting_but_found( + u"while parsing a mapping", + u"unexpected key not in schema '{0}'".format(unicode(yaml_key.scalar)), + ) + def validate(self, chunk): found_keys = set() items = chunk.expect_mapping() @@ -155,14 +164,9 @@ yaml_key = self._key_validator(key) if yaml_key.scalar not in self._validator_dict.keys(): - key.expecting_but_found( - u"while parsing a mapping", - u"unexpected key not in schema '{0}'".format( - unicode(yaml_key.scalar) - ), - ) + self.unexpected_key(key, yaml_key, value, chunk) - value.process(self._validator_dict[yaml_key.scalar](value)) + value.process(self.get_validator(yaml_key.scalar)(value)) key.process(yaml_key) chunk.add_key_association(key.contents, yaml_key.data) found_keys.add(yaml_key.scalar) @@ -172,7 +176,7 @@ key_chunk = YAMLChunk(default_key) yaml_key = self._key_validator(key_chunk) strictindex = yaml_key.data - value_validator = self._validator_dict[default_key] + value_validator = self.get_validator(default_key) new_value = value_validator( YAMLChunk(value_validator.to_yaml(default_data)) ) @@ -210,7 +214,7 @@ # TODO : if keys not in list or required keys missing, raise exception. return CommentedMap( [ - (key, self._validator_dict[key].to_yaml(value)) + (key, self.get_validator(key).to_yaml(value)) for key, value in data.items() if key not in self._defaults.keys() or key in self._defaults.keys() @@ -219,6 +223,18 @@ ) +class MapCombined(Map): + def __init__(self, map_validator, key_validator, value_validator): + super(MapCombined, self).__init__(map_validator, key_validator) + self._value_validator = value_validator + + def get_validator(self, key): + return self._validator_dict.get(key, self._value_validator) + + def unexpected_key(self, key, yaml_key, value, chunk): + pass + + class Seq(SeqValidator): def __init__(self, validator): self._validator = validator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml/parser.py new/strictyaml-1.6.1/strictyaml/parser.py --- old/strictyaml-1.4.4/strictyaml/parser.py 2021-06-19 13:24:29.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml/parser.py 2021-11-28 19:01:46.000000000 +0100 @@ -110,23 +110,28 @@ if merge_map: maptyp.add_yaml_merge(merge_map) - previous_indentation = None + # Don't verify Mapping indentation when allowing flow, + # as that disallows: + # short_key: { x = 1 } + # very_long_key: { x = 1 } + if not self.allow_flow_style: + previous_indentation = None - for node in [ - nodegroup[1] - for nodegroup in node.value - if isinstance(nodegroup[1], ruamelyaml.nodes.MappingNode) - ]: - if previous_indentation is None: - previous_indentation = node.start_mark.column - if node.start_mark.column != previous_indentation: - raise exceptions.InconsistentIndentationDisallowed( - "While parsing", - node.start_mark, - "Found mapping with indentation " - "inconsistent with previous mapping", - node.end_mark, - ) + for node in [ + nodegroup[1] + for nodegroup in node.value + if isinstance(nodegroup[1], ruamelyaml.nodes.MappingNode) + ]: + if previous_indentation is None: + previous_indentation = node.start_mark.column + if node.start_mark.column != previous_indentation: + raise exceptions.InconsistentIndentationDisallowed( + "While parsing", + node.start_mark, + "Found mapping with indentation " + "inconsistent with previous mapping", + node.end_mark, + ) StrictYAMLConstructor.add_constructor( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml/scalar.py new/strictyaml-1.6.1/strictyaml/scalar.py --- old/strictyaml-1.4.4/strictyaml/scalar.py 2021-06-19 13:22:38.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml/scalar.py 2021-10-14 21:22:51.000000000 +0200 @@ -178,6 +178,22 @@ raise YAMLSerializationError("'{}' not an integer.".format(data)) +class HexInt(ScalarValidator): + def validate_scalar(self, chunk): + val = chunk.contents + if not utils.is_hexadecimal(val): + chunk.expecting_but_found("when expecting a hexadecimal integer") + return int(val, 16) + + def to_yaml(self, data): + if utils.is_hexadecimal(data): + if isinstance(data, int): + return hex(data) + else: + return data + raise YAMLSerializationError("'{}' not a hexademial integer.".format(data)) + + class Bool(ScalarValidator): def validate_scalar(self, chunk): val = chunk.contents diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml/utils.py new/strictyaml-1.6.1/strictyaml/utils.py --- old/strictyaml-1.4.4/strictyaml/utils.py 2021-06-19 13:15:00.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml/utils.py 2021-10-14 21:22:51.000000000 +0200 @@ -79,6 +79,31 @@ return compile(r"^[-+]?[0-9_]+$").match(value) is not None +def is_hexadecimal(value): + """ + Is a string a string of a hexademcial integer? + + >>> is_hexadecimal("0xa1") + True + + >>> is_hexadecimal("0XA1") + True + + >>> is_hexadecimal("0xa1x") + False + + >>> is_hexadecimal("xa1") + False + + >>> is_hexadecimal("a1") + False + + >>> is_hexadecimal("1") + False + """ + return compile(r"^0[xX]+[a-fA-F0-9]+$").match(value) is not None + + def is_decimal(value): """ Is a string a decimal? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml.egg-info/PKG-INFO new/strictyaml-1.6.1/strictyaml.egg-info/PKG-INFO --- old/strictyaml-1.4.4/strictyaml.egg-info/PKG-INFO 2021-06-19 20:35:01.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml.egg-info/PKG-INFO 2021-11-28 19:08:58.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: strictyaml -Version: 1.4.4 +Version: 1.6.1 Summary: Strict, typed YAML parser Home-page: http://hitchdev.com/strictyaml Author: Colm O'Connor @@ -207,19 +207,20 @@ less the same purpose as StrictYAML. I've tried to make it the best one. Below is a series of documented justifications: - - [Why not use JSON Schema for validation?](https://hitchdev.com/strictyaml/why-not/) - - [What is wrong with TOML?](https://hitchdev.com/strictyaml/why-not/) - - [Why shouldn't I just use Python code for configuration?](https://hitchdev.com/strictyaml/why-not/) - - [Why not JSON5?](https://hitchdev.com/strictyaml/why-not/) - - [Why not JSON for simple configuration files?](https://hitchdev.com/strictyaml/why-not/) - - [Why avoid using environment variables as configuration?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use XML for configuration or DSLs?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use INI files?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use the YAML 1.2 standard? - we don't need a new standard!](https://hitchdev.com/strictyaml/why-not/) - - [Why not use Python's schema library (or similar) for validation?](https://hitchdev.com/strictyaml/why-not/) - - [Why not HOCON?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use SDLang?](https://hitchdev.com/strictyaml/why-not/) - - [Why not use kwalify with standard YAML to validate my YAML?](https://hitchdev.com/strictyaml/why-not/) + - [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) @@ -227,50 +228,52 @@ How to: - - [Merge YAML documents](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Build a YAML document from scratch in code](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Reading in YAML, editing it and writing it back out](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Get line numbers of YAML elements](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Either/or schema validation of different, equally valid different kinds of YAML](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Labeling exceptions](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Parsing YAML without a schema](https://hitchdev.com/strictyaml/using/alpha/howto/) - - [Revalidate an already validated document](https://hitchdev.com/strictyaml/using/alpha/howto/) + - [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: - - [Using a YAML object of a parsed mapping](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Mapping with defined keys and a custom key validator (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Mappings with defined keys (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Updating document with a schema](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Validating optional keys in mappings (Map)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Mappings with arbitrary key names (MapPattern)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Optional keys with defaults (Map/Optional)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Sequence/list validator (Seq)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Sequences of unique items (UniqueSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/) - - [Fixed length sequences (FixedSeq)](https://hitchdev.com/strictyaml/using/alpha/compound/) + - [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: - - [Empty key validation](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Datetimes (Datetime)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Floating point numbers (Float)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Email and URL validators](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Parsing comma separated items (CommaSeparated)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Integers (Int)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Decimal numbers (Decimal)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Boolean (Bool)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Validating strings with regexes (Regex)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Parsing strings (Str)](https://hitchdev.com/strictyaml/using/alpha/scalar/) - - [Enumerated scalars (Enum)](https://hitchdev.com/strictyaml/using/alpha/scalar/) + - [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/) - - [Dirty load](https://hitchdev.com/strictyaml/using/alpha/restrictions/) - - [Duplicate keys](https://hitchdev.com/strictyaml/using/alpha/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) @@ -279,16 +282,16 @@ There are some design decisions in StrictYAML which are controversial and/or not obvious. Those are documented here: - - [Why is parsing speed not a high priority for StrictYAML?](https://hitchdev.com/strictyaml/why/) - - [What is syntax typing?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with node anchors and references?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with duplicate keys?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with explicit tags?](https://hitchdev.com/strictyaml/why/) - - [The Norway Problem - why StrictYAML refuses to do implicit typing and so should you](https://hitchdev.com/strictyaml/why/) - - [Why does StrictYAML not parse direct representations of Python objects?](https://hitchdev.com/strictyaml/why/) - - [Why does StrictYAML only parse from strings and not files?](https://hitchdev.com/strictyaml/why/) - - [Why does StrictYAML make you define a schema in Python - a Turing-complete language?](https://hitchdev.com/strictyaml/why/) - - [What is wrong with flow-style YAML?](https://hitchdev.com/strictyaml/why/) + - [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) @@ -296,9 +299,9 @@ - @wwoods - @chrisburr + - @jnichols0 - - ## Contributors + ## Other Contributors - @eulores - @WaltWoods @@ -310,6 +313,7 @@ - @jaredsampson - @BoboTIG + StrictYAML also includes code from [ruamel.yaml](https://yaml.readthedocs.io/en/latest/), Copyright Anthon van der Neut. ## Contributing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strictyaml-1.4.4/strictyaml.egg-info/SOURCES.txt new/strictyaml-1.6.1/strictyaml.egg-info/SOURCES.txt --- old/strictyaml-1.4.4/strictyaml.egg-info/SOURCES.txt 2021-06-19 20:35:01.000000000 +0200 +++ new/strictyaml-1.6.1/strictyaml.egg-info/SOURCES.txt 2021-11-28 19:08:59.000000000 +0100 @@ -29,6 +29,7 @@ hitch/story/fixed-sequence.story hitch/story/float.story hitch/story/handle-exceptions.story +hitch/story/map-combined.story hitch/story/map-with-key-validator.story hitch/story/map.story hitch/story/map.toml @@ -44,6 +45,7 @@ hitch/story/regexp.story hitch/story/revalidation.story hitch/story/roundtrip.story +hitch/story/scalar-hexadecimal-integer.story hitch/story/scalar-integer.story hitch/story/scalar-string.story hitch/story/sequence.story