summaryrefslogtreecommitdiff
path: root/docs/release-notes.rst
diff options
context:
space:
mode:
authorJohan Fleury <jfleury@arcaik.net>2018-10-08 12:58:12 -0400
committerJohan Fleury <jfleury@arcaik.net>2018-10-08 12:58:12 -0400
commit735c78d3ecb695dd16cb37879880f522c4b29c72 (patch)
tree8bfb2ecbd0f03730efa1540cc65d8490b67e8ddd /docs/release-notes.rst
Import upstream version 1.7.0
Diffstat (limited to 'docs/release-notes.rst')
-rw-r--r--docs/release-notes.rst326
1 files changed, 326 insertions, 0 deletions
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
new file mode 100644
index 0000000..8022b1b
--- /dev/null
+++ b/docs/release-notes.rst
@@ -0,0 +1,326 @@
+Release Notes
+=============
+
+1.7.0 (October 3, 2018)
+-----------------------
+
+**IMPORTANT** LICENSE UPDATE **IMPORTANT**
+
+- In this release there was a line removed from the license file. It was modified in the following commit
+ (cc4e31b39ff4cce2dfbc662baa6469470dd3c033 Wed Oct 3 16:20:59 2018 +0200) and will be the main reason for
+ the 1.7.0 release. All commits and tags and releases (1.6.1 and all releases before it) prior to this commit will
+ use the old license that includes the change done in the above mentioned commit. Only release 1.7.0 and commits past
+ this point will use the new/updated license file.
+
+General changes:
+
+- Dropped support for python 3.3 and 3.4
+
+
+1.6.1 (March 13, 2018)
+--------------------
+
+New keywords:
+
+- Added support for keyword *nullable*. It is now possible to allow for a key not to be empty, when *required* keyword is not used.
+- Added support for keyword *class*. It will not cause any validation errors, but serves to make kwalify schemas compatible that uses that keywork.
+
+Bug fixes:
+
+- Improved compatibility with unicodes to validate as strings.
+
+Changed behaviour:
+
+- Propergate json and yaml loading errors when used from the cli to the user for easier debugging.
+
+General changes:
+
+- Allow ruamel.yaml versions up to 0.16
+- License is now bundled with the built release.
+
+
+1.6.0 (Jan 22, 2017)
+--------------------
+
+New keywords:
+
+- Add support for keyword *example*. It does nothing and have no validation done on it.
+- Add support for keyword *version*. It does nothing and have no validation done on it.
+- Add support for keyword *date* and added support keyword *format*. This can be used to validate many different types of *datetime* objects.
+- Add support for keyword *length*. It is very similar to *range* but works primarily string types.
+- Add support for keyword *assert*. It works by running the python code *assert <assert-expr>* and check if any exception is raised.
+ This feature is considered dangerouns becuase there is only simple logic to prevent escaping out from validation.
+
+Bug fixes:
+
+- Fixed a bug where regexes marked as 'required' in a map were matched as strings, rather than regexes.
+- Fixed a bug where the type validation did not work when schema specefied a sequence of map objects. It now outputs a proper `...is not a dict...` error instead.
+- Fixed a bug in *unique* validation when a key that it tried to lookup in the data would not exists.
+ Now it just ignores that it did not find any value becuase a missing value do not impact validation.
+- Fixed a bug with keyword *ident* when the rule value was verified to be a *boolean*. It now only accepts *boolean* values as expected.
+- Fixed a bug where if *allowempty* was specefied in a mapping type inside a sequence type then it would not properly validate.
+- Fixed a bug where loaded extensions would not allways work in complex & nested objects.
+- Fixed a major bug in very nested *seq* schemas where if the schema expected another *seq* but the value was something else it would not raise it as a validation error.
+ This has now been fixed and now raises the proper error.
+- Fixed a bug where include directive would not work in all cases when used inside a key in a mapping block.
+
+New features:
+
+- It is now possible to specify a default rule when using a mapping.
+ The rule will be used whenever no other key could be found.
+ This is a port of a missing feature from original kwalify implementation.
+- Added new helper method *keywords* to *Rule* class that can output all active keywords for any *Rule* object.
+ This helps when debugging code to be able to easily dump what all active keywords for any *Rule* object.
+- Added new cli flag *--strict-rule-validation* that will validate that all used keywords in all *Rule* objects only uses the rules that is supported by each defined type.
+ If you only use a *Core* object then set *strict_rule_validation=True* when creating the *Core* object instance.
+ This feature is opt-in in this releaes but will be mandatory in *releases >= 1.7.0*.
+- Added new cli flag *--fix-ruby-style-regex* that will trim slashes from ruby style regex/patterns.
+ When using this flag the first and last */* will be trimmed of the pattern before running validation.
+ If you only use a *Core* object then set *fix_ruby_style_regex=True* when creating the *Core* object instance.
+ Default behaviour will still be that you should use python style regex values but this flag can help in some cases when you can't change the schema.
+- Added new cli flag *--allow-assertions* that will enable the otherwise blocked keyword *assert*.
+ This flag was introduced so that pykwalify would not assert assertions without user controll.
+ Default behaviour will be to raise a *CoreError* is assertion is used but not allowed explicitly.
+ If you only use a *Core* object then set *allow_assertions=True* when creating the *Core* object instance.
+
+Changed behaviour:
+
+- Removed the force of *UTF-8* encoding when importing pykwalify package. It caused issues with *jypiter notebooks* on python 2.7.x
+ Added documentation in Readme regarding the suggested solution to use *PYTHONIOENCODING=UTF-8* if the default solution do not work.
+- Validation do no longer continue to process things like *pattern*, *regex*, *timestamp*, *range* and other additional checks
+ if the type check fails. This can cause problems where previous errors will now initially be silenced when the typecheck for
+ that value fails, but reappear again when the type check is fixed. (sbrunner)
+- Catches *TypeError* when doing regex validation. That happens when the value is not a parsable string type.
+- Checking that the value is a valid dict object is now done even if the mapping keyword is not specefied in the schema.
+ This makes that check more eager and errors can apear that previously was not there.
+- Changed the sane default type if that key is not defined to be *str*. Before this, type had to be defined every time and the default type did not work as expected.
+ This is a major change and can cause validation to either fail or to stop failing depending on the case.
+- Changed validation for if a value is required and a value in a list for example is *None*. It now adds a normal validation errors instead of raising a *CoreError*.
+- Value for keyword *desc* now *MUST* be a string or a *RuleError* will be raised.
+- Value for keyword *example* now *MUST* be a string or a *RuleError* will be raised.
+- Value for keyword *name* now *MUST* be a string or a *RuleError* will be raised.
+
+General changes:
+
+- Ported alot of testcases directly from *Kwalify* test data (*test-validator.yaml -> 30f.yaml & 43s.yaml*) so that this lib can have greater confidence that rules is implemented in the same way as *Kwalify*.
+- Refactored *test_core_files* method to now accept test files with multiple of documents. The method now tries to read all documents from each test file and run each document seperatly.
+ It now alos reports more detailed about what file and document that fails the test to make it easier to track down problems.
+- Major refactoring of test files to now be grouped based on what they are testing instead of a increased counter that do not represent anything.
+ It will be easier to find out what keywords lack tests and what keywords that have enough tests.
+
+
+1.5.2 (Nov 12, 2016)
+--------------------
+
+- Convert all documentation to readthedocs
+- True/False is no longer considered valid integer
+- python3 'bytes' objects is now a valid strings and text type
+- The regular PyYaml support is now deprecated in favor of ruamel.yaml, see the following link for more details about
+ PyYaml being deprecated https://bitbucket.org/xi/pyyaml/issues/59/has-this-project-been-abandoned
+ PyYaml will still be possible to use in the next major release version (1.6.0) but removed in release (1.7.0) and forward.
+- ruamel.yaml is now possible to install with the following command for local development *pip install -e '.[ruamel]'*
+ and for production, use *pip install 'pykwalify[ruamel]'*
+- ruamel.yaml is now used before PyYaml if installed on your system
+- Fixed a bug where scalar type was not validated correctly.
+- Unpin all dependencies but still maintain a minimum versions of each lib
+- Allowed mixing of regex and normal keywords when matching a string (jmacarthur)
+
+
+1.5.1 (Mar 6, 2016)
+----------------
+
+- Improvements to documentation (scottclowe).
+- Improved code linting by reworking private variables in Rule class to now be properties and updated
+ all code that used the old way.
+- Improved code linting by reworking all Log messages to render according to pep standard.
+ (By using %s and passing in variables as positional arguments)
+- Fix bug when validating sequence and value should only be unicode escaped when a string
+- Improve validation of timestamps.
+- Improve float validation to now accept strings that is valid ints that uses scientific notation, "1e-06" for example.
+- Update travis to test against python 3.6
+
+
+1.5.0 (Sep 30, 2015)
+--------------------
+
+- float / number type now support range restrictions
+- ranges on non number types (e.g. seq, string) now need to be non negative.
+- Fixed encoding bug triggered when both regex matching-rule 'any' and 'all' found keyword that
+ failed regex match. Added failure unit tests to cover regex matching-rule 'any' and 'all' during
+ failed regex match. Updated allowed rule list to include matching-rule 'all'.
+- Changed _validate_mappings method from using re.match to re.search. This fixes bug related to
+ multiple keyword regex using matching-rule 'any'. Added success unit tests to test default, 'any',
+ and 'all' matching-rule.
+
+
+1.4.1 (Aug 27, 2015)
+--------------------
+
+- Added tests to sdist to enable downstream packaging to run tests. No code changes in this release.
+
+
+1.4.0 (Aug 4, 2015)
+-------------------
+
+- Dropped support for python 3.2 becuase of unicode literals do not exists in python 3.2.
+- Fixed logging & raised exceptions when using unicode characters inside schemas/data/filenames.
+- Reworked all RuleError exceptions to now have better exception messages.
+- RuleError exceptions now have a unique 'error_key' that can make it easier to identify what error it is.
+- Paths for RuleErrors have been moved inside the exception as a variable.
+- Rewrote all SchemaConflict exceptions to be more human readable.
+
+
+1.3.0 (Jul 14, 2015)
+--------------------
+
+- Rewrote most of the error messages to be more human readable. See `docs/Upgrade Instructions.md`
+ for more details.
+- It is now possible to use the exceptions that was raised for each validation error. It can be
+ found in the variable `c.validation_errors_exceptions`. They contain more detailed information
+ about the error.
+
+
+1.2.0 (May 19, 2015)
+--------------------
+
+- This feature is NEW and EXPERIMENTAL.
+ Implemented support for multiple values inside in a sequence.
+ This will allow the defenition of different types that one sequence can contain. You can either require
+ each value in the sequence to be valid against one to all of the different possibilities.
+ Tests show that it still maintains backward compatibility with all old schemas but it can't be guarantee.
+ If you find a regression in this release please file a bug report so it can be fixed ASAP.
+- This feature is NEW and EXPERIMENTAL.
+ Added ability to define python files that can be used to have custom python code/functions that can be
+ called on all types so that custom/extra validation can be done on all data structures.
+- Add new keyword 'func' that is a string and is used to point to a function loaded via the extension system.
+- Add new keyword 'extensions' that can only be used on the top level of the schema. It is should be a list
+ with strings of files that should be loaded by the extension system. Paths can be relative or absolute.
+- New cli option '-e FILE' or '--extension FILE' that can be used to load extension files from cli.
+- Fixed a bug where types did not raise exceptions properly. If schema said it should be a map but data was
+ a sequence, no validation error was raised in earlier versions but now it raises a 'NotSequenceError' or
+ 'NotMappingError'.
+
+
+1.1.0 (Apr 4, 2015)
+-------------------
+
+- Rework cli string that docopt uses. Removed redundant flags that docopt provides [--version & --help]
+- Add support for timestamp validation
+- Add new runtime dependency 'python-dateutil' that is used to validate timestamps
+- Change how 'any' keyword is implemented to now accept anything and not just the implemented types. (See Upgrade Instructions document for migration details)
+
+
+
+1.0.1 (Mar 8, 2015)
+-------------------
+
+Switched back to semantic version numbering for this lib.
+
+- After the release of `15.01` the version schema was changed back from the <year>.<month> style version schema back to semantic version names. One big problem with this change is that `pypi` can't handle the change back to semantic names very well and because of this I had to remove the old releases from pypi and replace it with a single version `1.0.1`.
+- No matter what version you were using you should consider upgrading to `1.0.1`. The difference between the two versions is very small and contains mostly bugfixes and added improvements.
+- The old releases can still be obtained from `github.com` and if you really need the old version you can add the download url to your `requirements.txt` file.
+
+
+15.01 (Jan 17, 2015)
+--------------------
+
+- Fixed a bug in unique validation for mapping keys [See: PR-12] (Gonditeniz)
+
+
+
+14.12 (Dec 24, 2014)
+--------------------
+
+- Fixed broken regex matching on map keys.
+- Source files with file ending `.yml` can now be loaded
+- Added aliases to some directives to make it easier/faster to write
+ * `sequence` --> `seq`
+ * `mapping` --> `map`
+ * `required` --> `req`
+ * `regex` --> `re`
+- Reworked all testing files to reduce number of files
+
+
+
+14.08 (Aug 24, 2014)
+--------------------
+
+- First version to be uploaded to pypi
+- Keyword 'range' can now be applied to map & seq types.
+- Added many more test files.
+- Keyword 'length' was removed because 'range' can handle all cases now.
+- Keyword 'range' now correctly checks the internal keys to be integers
+- Major update to testing and increased coverage.
+
+
+
+14.06.1 (Jun 24, 2014)
+----------------------
+
+- New feature "partial schema". Define a small schema with a ID that can be reused at other places in the schema. See readme for details.
+- New directive "include" that is used to include a partial schema at the specefied location.
+- Cli and Core() now can handle multiple schema files.
+- Directive "pattern" can no longer be used with map to validate all keys against that regex. Use "regex;" inside "mapping:"
+- 'none' can now be used as a type
+- Many more tests added
+
+
+
+14.06 (Jun 7, 2014)
+-------------------
+
+- New version scheme [YY.MM(.Minor-Release)]
+- Added TravisCI support
+- Update runtime dependency docopt to 0.6.1
+- Update runtime dependency pyyaml to 3.11
+- Huge refactoring of logging and how it works. Logging config files is now removed and everything is alot simpler
+- Cleanup some checks that docopt now handles
+- New keyword "regex;<regex-pattern>" that can be used as a key in map to give more flexibility when validating map keys
+- New keyword "matching-rule" that can be used to control how keys should be matched
+- Added python 3.4 & python 2.7 support (See TravisCI tests for status)
+- Dropped python 3.1 support
+- Alot of refactoring of testing code.
+- Tests should now be runned with "nosetests" and not "python runtests.py"
+- Refactored alot of exceptions to be more specific (SchemaError and RuleError for example) and not a generic Exception
+- Parsed rules is now stored correctly in Core() so it can be tested from the outside
+
+
+
+0.1.2 (Jan 26, 2013)
+--------------------
+
+- Added new and experimental validation rule allowempty. (See README for more info)
+- Added TODO tracking file.
+- Reworked the CLI to now use docopt and removede argparse.
+- Implemented more typechecks, float, number, text, any
+- Now suports python 3.3.x
+- No longer support any python 2.x.y version
+- Enabled pattern for map rule. It enables the validation of all keys in that map. (See README for more info)
+- Alot more test files and now tests source_data and schema_data input arguments to core.py
+- Alot of cleanup in the test suit
+
+
+
+0.1.1 (Jan 21, 2013)
+--------------------
+
+- Reworked the structure of the project to be more clean and easy to find stuff.
+- lib/ folder is now removed and all contents is placed in the root of the project
+- All scripts is now moved to its own folder scripts/ (To use the script during dev the path to the root of the project must be in your python path somehow, recomended is to create a virtualenv and export the correct path when it activates)
+- New make target 'cleanegg'
+- Fixed path bugs in Makefile
+- Fixed path bugs in Manifest
+
+
+
+0.1.0 (Jan 20, 2013)
+--------------------
+
+- Initial stable release of pyKwalify.
+- All functions is not currently implemented but the cli/lib can be used but probably with some bugs.
+- This should be considered a Alpha release used for bug and stable testing and to be based on further new feature requests for the next version.
+- Implemented most validation rules from the original Java version of kwalify. Some is currently not implemented and can be found via [NYI] tag in output, doc & code.
+- Installable via pip (Not the official online pip repo but from the releases folder found in this repo)
+- Supports YAML & JSON files from cli and any dict/list data structure if used in lib mode.
+- Uses pythons internal logging functionality and default logging output can be changed by changing logging.ini (python 3.1.x) or logging.yaml (python 3.2.x) to change the default logging output, or use -v cli input argument to change the logging level. If in lib mode it uses your implemented python std logging.
+ \ No newline at end of file