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
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