commit python-voluptuous for openSUSE:Factory
Hello community, here is the log from the commit of package python-voluptuous for openSUSE:Factory checked in at 2019-09-02 12:44:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-voluptuous (Old) and /work/SRC/openSUSE:Factory/.python-voluptuous.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-voluptuous" Mon Sep 2 12:44:50 2019 rev:6 rq:726268 version:0.11.7 Changes: -------- --- /work/SRC/openSUSE:Factory/python-voluptuous/python-voluptuous.changes 2018-08-10 09:48:54.714186232 +0200 +++ /work/SRC/openSUSE:Factory/.python-voluptuous.new.7948/python-voluptuous.changes 2019-09-02 12:44:52.421752398 +0200 @@ -1,0 +2,13 @@ +Mon Aug 26 11:41:09 UTC 2019 - Antonio Larrosa <alarrosa@suse.com> + +- Update to 0.11.7: + * #378: Allow extend() of a Schema to return a subclass of a Schema as well. + * #364: Accept description for Inclusive instances. + * #373: Accept msg for Maybe instances. + * #382: Added support for default values in Inclusive instances. + * #371: Fixed DeprecationWarning related to collections.Mapping. + * #377: Preserve Unicode strings when passed to utility functions + (e.g., Lower(), Upper()). + * #380: Fixed regression with Any and required flag. + +------------------------------------------------------------------- Old: ---- voluptuous-0.11.5.tar.gz New: ---- voluptuous-0.11.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-voluptuous.spec ++++++ --- /var/tmp/diff_new_pack.PPxkiX/_old 2019-09-02 12:44:52.849752321 +0200 +++ /var/tmp/diff_new_pack.PPxkiX/_new 2019-09-02 12:44:52.849752321 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-voluptuous # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,13 +12,13 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-voluptuous -Version: 0.11.5 +Version: 0.11.7 Release: 0 Summary: A Python data validation library License: BSD-3-Clause ++++++ voluptuous-0.11.5.tar.gz -> voluptuous-0.11.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/CHANGELOG.md new/voluptuous-0.11.7/CHANGELOG.md --- old/voluptuous-0.11.5/CHANGELOG.md 2018-02-15 10:11:22.000000000 +0100 +++ new/voluptuous-0.11.7/CHANGELOG.md 2019-08-13 04:17:50.000000000 +0200 @@ -1,6 +1,49 @@ # Changelog -## [0.11.0] +## [0.11.7] + +**Changes** + +- [#378](https://github.com/alecthomas/voluptuous/pull/378): Allow `extend()` of a `Schema` to return a subclass of a `Schema` as well. + +**New**: + +- [#364](https://github.com/alecthomas/voluptuous/pull/364): Accept `description` for `Inclusive` instances. +- [#373](https://github.com/alecthomas/voluptuous/pull/373): Accept `msg` for `Maybe` instances. +- [#382](https://github.com/alecthomas/voluptuous/pull/382): Added support for default values in `Inclusive` instances. + +**Fixes**: + +- [#371](https://github.com/alecthomas/voluptuous/pull/371): Fixed `DeprecationWarning` related to `collections.Mapping`. +- [#377](https://github.com/alecthomas/voluptuous/pull/377): Preserve Unicode strings when passed to utility functions (e.g., `Lower()`, `Upper()`). +- [#380](https://github.com/alecthomas/voluptuous/pull/380): Fixed regression with `Any` and `required` flag. + +## [0.11.5] + +- Fixed issue with opening README file in `setup.py`. + +## [0.11.4] + +- Removed use of `pypandoc` as Markdown is now supported by `setup()`. + +## [0.11.3] and [0.11.2] + +**Changes**: + +- [#349](https://github.com/alecthomas/voluptuous/pull/349): Support Python 3.7. +- [#343](https://github.com/alecthomas/voluptuous/pull/343): Drop support for Python 3.3. + +**New**: + +- [#342](https://github.com/alecthomas/voluptuous/pull/342): Add support for sets and frozensets. + +**Fixes**: + +- [#332](https://github.com/alecthomas/voluptuous/pull/332): Fix Python 3.x compatibility for setup.py when `pypandoc` is installed. +- [#348](https://github.com/alecthomas/voluptuous/pull/348): Include path in `AnyInvalid` errors. +- [#351](https://github.com/alecthomas/voluptuous/pull/351): Fix `Date` behaviour when a custom format is specified. + +## [0.11.1] and [0.11.0] **Changes**: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/PKG-INFO new/voluptuous-0.11.7/PKG-INFO --- old/voluptuous-0.11.5/PKG-INFO 2018-08-01 05:15:06.000000000 +0200 +++ new/voluptuous-0.11.7/PKG-INFO 2019-08-13 04:18:18.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: voluptuous -Version: 0.11.5 +Version: 0.11.7 Summary: # Voluptuous is a Python data validation library Home-page: https://github.com/alecthomas/voluptuous Author: Alec Thomas @@ -9,8 +9,8 @@ Download-URL: https://pypi.python.org/pypi/voluptuous Description: # Voluptuous is a Python data validation library - [![Build Status](https://travis-ci.org/alecthomas/voluptuous.png)](https://travis-ci.org/alecthomas/voluptuous) - [![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby) + [![Build Status](https://travis-ci.org/alecthomas/voluptuous.svg)](https://travis-ci.org/alecthomas/voluptuous) + [![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby) Voluptuous, *despite* the name, is a Python data validation library. It is primarily intended for validating data coming into Python as JSON, @@ -198,9 +198,9 @@ ``` - ### URL's + ### URLs - URL's in the schema are matched by using `urlparse` library. + URLs in the schema are matched by using `urlparse` library. ```pycon >>> from voluptuous import Url diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/README.md new/voluptuous-0.11.7/README.md --- old/voluptuous-0.11.5/README.md 2018-07-27 10:45:00.000000000 +0200 +++ new/voluptuous-0.11.7/README.md 2019-08-13 04:10:58.000000000 +0200 @@ -1,7 +1,7 @@ # Voluptuous is a Python data validation library -[![Build Status](https://travis-ci.org/alecthomas/voluptuous.png)](https://travis-ci.org/alecthomas/voluptuous) -[![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby) +[![Build Status](https://travis-ci.org/alecthomas/voluptuous.svg)](https://travis-ci.org/alecthomas/voluptuous) +[![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby) Voluptuous, *despite* the name, is a Python data validation library. It is primarily intended for validating data coming into Python as JSON, @@ -189,9 +189,9 @@ ``` -### URL's +### URLs -URL's in the schema are matched by using `urlparse` library. +URLs in the schema are matched by using `urlparse` library. ```pycon
from voluptuous import Url diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/voluptuous/__init__.py new/voluptuous-0.11.7/voluptuous/__init__.py --- old/voluptuous-0.11.5/voluptuous/__init__.py 2018-08-01 05:14:15.000000000 +0200 +++ new/voluptuous-0.11.7/voluptuous/__init__.py 2019-08-13 04:17:30.000000000 +0200 @@ -5,5 +5,5 @@ from voluptuous.util import * from voluptuous.error import *
-__version__ = '0.11.5' +__version__ = '0.11.7' __author__ = 'alecthomas' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/voluptuous/schema_builder.py new/voluptuous-0.11.7/voluptuous/schema_builder.py --- old/voluptuous-0.11.5/voluptuous/schema_builder.py 2018-07-27 10:45:01.000000000 +0200 +++ new/voluptuous-0.11.7/voluptuous/schema_builder.py 2019-08-13 04:10:58.000000000 +0200 @@ -22,6 +22,11 @@ def iteritems(d): return d.iteritems() +if sys.version_info >= (3, 3): + _Mapping = collections.abc.Mapping +else: + _Mapping = collections.Mapping + """Schema validation for Python data structures. Given eg. a nested data structure like this: @@ -280,7 +285,7 @@ return schema.__voluptuous_compile__(self) if isinstance(schema, Object): return self._compile_object(schema) - if isinstance(schema, collections.Mapping): + if isinstance(schema, _Mapping): return self._compile_dict(schema) elif isinstance(schema, list): return self._compile_list(schema) @@ -771,9 +776,10 @@ result[key] = value # recompile and send old object + result_cls = type(self) result_required = (required if required is not None else self.required) result_extra = (extra if extra is not None else self.extra) - return Schema(result, required=result_required, extra=result_extra) + return result_cls(result, required=result_required, extra=result_extra) def _compile_scalar(schema): @@ -1121,8 +1127,11 @@ True """ - def __init__(self, schema, group_of_inclusion, msg=None): - super(Inclusive, self).__init__(schema, msg=msg) + def __init__(self, schema, group_of_inclusion, + msg=None, description=None, default=UNDEFINED): + super(Inclusive, self).__init__(schema, msg=msg, + default=default, + description=description) self.group_of_inclusion = group_of_inclusion diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/voluptuous/tests/tests.py new/voluptuous-0.11.7/voluptuous/tests/tests.py --- old/voluptuous-0.11.5/voluptuous/tests/tests.py 2018-07-27 10:45:01.000000000 +0200 +++ new/voluptuous-0.11.7/voluptuous/tests/tests.py 2019-08-13 04:10:58.000000000 +0200 @@ -6,14 +6,14 @@ from nose.tools import assert_equal, assert_false, assert_raises, assert_true from voluptuous import ( - Schema, Required, Exclusive, Optional, Extra, Invalid, In, Remove, Literal, - Url, MultipleInvalid, LiteralInvalid, TypeInvalid, NotIn, Match, Email, + Schema, Required, Exclusive, Inclusive, Optional, Extra, Invalid, In, Remove, + Literal, Url, MultipleInvalid, LiteralInvalid, TypeInvalid, NotIn, Match, Email, Replace, Range, Coerce, All, Any, Length, FqdnUrl, ALLOW_EXTRA, PREVENT_EXTRA, validate, ExactSequence, Equal, Unordered, Number, Maybe, Datetime, Date, Contains, Marker, IsDir, IsFile, PathExists, SomeOf, TooManyValid, Self, raises) from voluptuous.humanize import humanize_error -from voluptuous.util import u +from voluptuous.util import u, Capitalize, Lower, Strip, Title, Upper def test_exact_sequence(): @@ -372,6 +372,7 @@ assert extended.schema == {'a': int, 'b': str} assert extended.required == base.required assert extended.extra == base.extra + assert isinstance(extended, Schema) def test_schema_extend_overrides(): @@ -411,6 +412,20 @@ assert_equal(extended.schema, {'a': {'b': str, 'c': float, 'e': int}, 'd': str}) +def test_schema_extend_handles_schema_subclass(): + """Verify that Schema.extend handles a subclass of Schema""" + class S(Schema): + pass + + base = S({Required('a'): int}) + extension = {Optional('b'): str} + extended = base.extend(extension) + + expected_schema = {Required('a'): int, Optional('b'): str} + assert extended.schema == expected_schema + assert isinstance(extended, S) + + def test_equality(): assert_equal(Schema('foo'), Schema('foo')) @@ -624,6 +639,12 @@ assert_raises(Invalid, s, {'foo': 'bar'}) +def test_maybe_accepts_msg(): + s = Schema(Maybe(int, msg='int or None expected')) + with raises(MultipleInvalid, 'int or None expected'): + assert s([]) + + def test_empty_list_as_exact(): s = Schema([]) assert_raises(Invalid, s, [1]) @@ -1035,6 +1056,9 @@ exclusive = Exclusive('alpha', 'angles', description='Hello') assert exclusive.description == 'Hello' + inclusive = Inclusive('alpha', 'angles', description='Hello') + assert inclusive.description == 'Hello' + required = Required('key', description='Hello') assert required.description == 'Hello' @@ -1263,3 +1287,122 @@ assert_equal(str(e), "invalid value in frozenset") else: assert False, "Did not raise Invalid" + + +def test_lower_util_handles_various_inputs(): + assert Lower(3) == "3" + assert Lower(u"3") == u"3" + assert Lower(b'\xe2\x98\x83'.decode("UTF-8")) == b'\xe2\x98\x83'.decode("UTF-8") + assert Lower(u"A") == u"a" + + +def test_upper_util_handles_various_inputs(): + assert Upper(3) == "3" + assert Upper(u"3") == u"3" + assert Upper(b'\xe2\x98\x83'.decode("UTF-8")) == b'\xe2\x98\x83'.decode("UTF-8") + assert Upper(u"a") == u"A" + + +def test_capitalize_util_handles_various_inputs(): + assert Capitalize(3) == "3" + assert Capitalize(u"3") == u"3" + assert Capitalize(b'\xe2\x98\x83'.decode("UTF-8")) == b'\xe2\x98\x83'.decode("UTF-8") + assert Capitalize(u"aaa aaa") == u"Aaa aaa" + + +def test_title_util_handles_various_inputs(): + assert Title(3) == "3" + assert Title(u"3") == u"3" + assert Title(b'\xe2\x98\x83'.decode("UTF-8")) == b'\xe2\x98\x83'.decode("UTF-8") + assert Title(u"aaa aaa") == u"Aaa Aaa" + + +def test_strip_util_handles_various_inputs(): + assert Strip(3) == "3" + assert Strip(u"3") == u"3" + assert Strip(b'\xe2\x98\x83'.decode("UTF-8")) == b'\xe2\x98\x83'.decode("UTF-8") + assert Strip(u" aaa ") == u"aaa" + + +def test_any_required(): + schema = Schema(Any({'a': int}, {'b': str}, required=True)) + + try: + schema({}) + except MultipleInvalid as e: + assert_equal(str(e), + "required key not provided @ data['a']") + else: + assert False, "Did not raise Invalid for MultipleInvalid" + + +def test_any_required_with_subschema(): + schema = Schema(Any({'a': Any(float, int)}, + {'b': int}, + {'c': {'aa': int}}, + required=True)) + + try: + schema({}) + except MultipleInvalid as e: + assert_equal(str(e), + "required key not provided @ data['a']") + else: + assert False, "Did not raise Invalid for MultipleInvalid" + +def test_inclusive(): + schema = Schema({ + Inclusive('x', 'stuff'): int, + Inclusive('y', 'stuff'): int, + }) + + r = schema({}) + assert_equal(r, {}) + + r = schema({'x':1, 'y':2}) + assert_equal(r, {'x':1, 'y':2}) + + try: + r = schema({'x':1}) + except MultipleInvalid as e: + assert_equal(str(e), + "some but not all values in the same group of inclusion 'stuff' @ data[<stuff>]") + else: + assert False, "Did not raise Invalid for incomplete Inclusive group" + +def test_inclusive_defaults(): + schema = Schema({ + Inclusive('x', 'stuff', default=3): int, + Inclusive('y', 'stuff', default=4): int, + }) + + r = schema({}) + assert_equal(r, {'x':3, 'y':4}) + + try: + r = schema({'x':1}) + except MultipleInvalid as e: + assert_equal(str(e), + "some but not all values in the same group of inclusion 'stuff' @ data[<stuff>]") + else: + assert False, "Did not raise Invalid for incomplete Inclusive group with defaults" + +def test_exclusive(): + schema = Schema({ + Exclusive('x', 'stuff'): int, + Exclusive('y', 'stuff'): int, + }) + + r = schema({}) + assert_equal(r, {}) + + r = schema({'x':1}) + assert_equal(r, {'x':1}) + + try: + r = schema({'x':1, 'y': 2}) + except MultipleInvalid as e: + assert_equal(str(e), + "two or more values in the same group of exclusion 'stuff' @ data[<stuff>]") + else: + assert False, "Did not raise Invalid for multiple values in Exclusive group" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/voluptuous/util.py new/voluptuous-0.11.7/voluptuous/util.py --- old/voluptuous-0.11.5/voluptuous/util.py 2018-02-15 10:09:42.000000000 +0100 +++ new/voluptuous-0.11.7/voluptuous/util.py 2019-08-13 04:10:58.000000000 +0200 @@ -7,6 +7,14 @@ __author__ = 'tusharmakkar08' +def _fix_str(v): + if sys.version_info[0] == 2 and isinstance(v, unicode): + s = v + else: + s = str(v) + return s + + def Lower(v): """Transform a string to lower case. @@ -14,7 +22,7 @@ >>> s('HI') 'hi' """ - return str(v).lower() + return _fix_str(v).lower() def Upper(v): @@ -24,7 +32,7 @@ >>> s('hi') 'HI' """ - return str(v).upper() + return _fix_str(v).upper() def Capitalize(v): @@ -34,7 +42,7 @@ >>> s('hello world') 'Hello world' """ - return str(v).capitalize() + return _fix_str(v).capitalize() def Title(v): @@ -44,7 +52,7 @@ >>> s('hello world') 'Hello World' """ - return str(v).title() + return _fix_str(v).title() def Strip(v): @@ -54,7 +62,7 @@ >>> s(' hello world ') 'hello world' """ - return str(v).strip() + return _fix_str(v).strip() class DefaultTo(object): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/voluptuous/validators.py new/voluptuous-0.11.7/voluptuous/validators.py --- old/voluptuous-0.11.5/voluptuous/validators.py 2018-07-27 10:45:01.000000000 +0200 +++ new/voluptuous-0.11.7/voluptuous/validators.py 2019-08-13 04:10:58.000000000 +0200 @@ -192,12 +192,13 @@ def __init__(self, *validators, **kwargs): self.validators = validators self.msg = kwargs.pop('msg', None) + self.required = kwargs.pop('required', False) def __voluptuous_compile__(self, schema): - self._compiled = [ - schema._compile(v) - for v in self.validators - ] + self._compiled = [] + for v in self.validators: + schema.required = self.required + self._compiled.append(schema._compile(v)) return self._run def _run(self, path, value): @@ -487,7 +488,7 @@ raise PathInvalid("Not a Path") -def Maybe(validator): +def Maybe(validator, msg=None): """Validate that the object matches given validator or is None. :raises Invalid: if the value does not match the given validator and is not @@ -500,7 +501,7 @@ ... s("string") """ - return Any(None, validator) + return Any(None, validator, msg=msg) class Range(object): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/voluptuous-0.11.5/voluptuous.egg-info/PKG-INFO new/voluptuous-0.11.7/voluptuous.egg-info/PKG-INFO --- old/voluptuous-0.11.5/voluptuous.egg-info/PKG-INFO 2018-08-01 05:15:06.000000000 +0200 +++ new/voluptuous-0.11.7/voluptuous.egg-info/PKG-INFO 2019-08-13 04:18:17.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: voluptuous -Version: 0.11.5 +Version: 0.11.7 Summary: # Voluptuous is a Python data validation library Home-page: https://github.com/alecthomas/voluptuous Author: Alec Thomas @@ -9,8 +9,8 @@ Download-URL: https://pypi.python.org/pypi/voluptuous Description: # Voluptuous is a Python data validation library - [![Build Status](https://travis-ci.org/alecthomas/voluptuous.png)](https://travis-ci.org/alecthomas/voluptuous) - [![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby) + [![Build Status](https://travis-ci.org/alecthomas/voluptuous.svg)](https://travis-ci.org/alecthomas/voluptuous) + [![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby) Voluptuous, *despite* the name, is a Python data validation library. It is primarily intended for validating data coming into Python as JSON, @@ -198,9 +198,9 @@ ``` - ### URL's + ### URLs - URL's in the schema are matched by using `urlparse` library. + URLs in the schema are matched by using `urlparse` library. ```pycon >>> from voluptuous import Url
participants (1)
-
root