Hello community,

here is the log from the commit of package python-warlock for openSUSE:Factory 
checked in at 2017-12-04 10:01:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-warlock (Old)
 and      /work/SRC/openSUSE:Factory/.python-warlock.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-warlock"

Mon Dec  4 10:01:18 2017 rev:14 rq:544314 version:1.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-warlock/python-warlock.changes    
2017-09-05 15:14:45.145182263 +0200
+++ /work/SRC/openSUSE:Factory/.python-warlock.new/python-warlock.changes       
2017-12-04 10:01:19.850691987 +0100
@@ -1,0 +2,7 @@
+Tue Nov 14 23:25:58 UTC 2017 - [email protected]
+
+- update to 1.3.0:
+  * Allow resolver to be set in model
+  * flake8 compliance
+
+-------------------------------------------------------------------

Old:
----
  warlock-1.2.0.tar.gz

New:
----
  warlock-1.3.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-warlock.spec ++++++
--- /var/tmp/diff_new_pack.PEBx2Y/_old  2017-12-04 10:01:20.858655402 +0100
+++ /var/tmp/diff_new_pack.PEBx2Y/_new  2017-12-04 10:01:20.862655257 +0100
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-warlock
-Version:        1.2.0
+Version:        1.3.0
 Release:        0
 Summary:        Python object model built on top of JSON schema
 License:        Apache-2.0
@@ -28,7 +28,7 @@
 BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module jsonpatch}
 BuildRequires:  %{python_module jsonschema}
-BuildRequires:  %{python_module nose}
+BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module six}
 BuildRequires:  python-rpm-macros
@@ -54,7 +54,7 @@
 %python_install
 
 %check
-%python_exec %{_bindir}/nosetests
+%python_exec setup.py test
 
 %files %{python_files}
 %defattr(-,root,root,-)

++++++ warlock-1.2.0.tar.gz -> warlock-1.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/PKG-INFO new/warlock-1.3.0/PKG-INFO
--- old/warlock-1.2.0/PKG-INFO  2015-10-12 19:09:45.000000000 +0200
+++ new/warlock-1.3.0/PKG-INFO  2016-06-25 20:13:37.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: warlock
-Version: 1.2.0
+Version: 1.3.0
 Summary: Python object model built on JSON schema and JSON patch.
 Home-page: http://github.com/bcwaldon/warlock
 Author: Brian Waldon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/README.md new/warlock-1.3.0/README.md
--- old/warlock-1.2.0/README.md 2015-10-12 18:48:26.000000000 +0200
+++ new/warlock-1.3.0/README.md 2016-06-25 19:42:56.000000000 +0200
@@ -1,5 +1,7 @@
 # Warlock
 
+[![Build 
Status](https://travis-ci.org/bcwaldon/warlock.svg?branch=master)](https://travis-ci.org/bcwaldon/warlock)
+
 Build self-validating python objects using JSON schemas.
 
 1) Create your schema
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/setup.py new/warlock-1.3.0/setup.py
--- old/warlock-1.2.0/setup.py  2015-10-12 19:08:55.000000000 +0200
+++ new/warlock-1.3.0/setup.py  2016-06-25 20:13:05.000000000 +0200
@@ -24,7 +24,7 @@
 
 setuptools.setup(
     name='warlock',
-    version='1.2.0',
+    version='1.3.0',
     description='Python object model built on JSON schema and JSON patch.',
     author='Brian Waldon',
     author_email='[email protected]',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/test/test_core.py 
new/warlock-1.3.0/test/test_core.py
--- old/warlock-1.2.0/test/test_core.py 2015-10-12 18:48:26.000000000 +0200
+++ new/warlock-1.3.0/test/test_core.py 2016-06-25 20:04:07.000000000 +0200
@@ -14,6 +14,7 @@
 
 import copy
 import unittest
+import os
 
 import json
 
@@ -40,6 +41,24 @@
     },
 }
 
+parent_fixture = {
+    'name': 'Parent',
+    'properties': {
+        'name': {'type': 'string'},
+        'children': {'type': 'array', 'items': [{'type': 'object'}]}
+    },
+    'required': ['name', 'children']
+}
+
+child_fixture = {
+    'name': 'Child',
+    'properties': {
+        'age': {'type': 'integer'},
+        'mother': {'type': 'object'}
+    },
+    'required': ['age', 'mother']
+}
+
 
 nameless_fixture = {
     'properties': {
@@ -105,46 +124,46 @@
         exc = warlock.InvalidOperation
         self.assertRaises(exc, sweden.update, {'population': 'N/A'})
         self.assertRaises(exc, sweden.update, {'overloard': 'Bears'})
-    
+
     def test_naming(self):
         Country = warlock.model_factory(fixture)
-        self.assertEqual(Country.__name__, 'Country')
-        
+        self.assertEqual('Country', Country.__name__)
+
         Country2 = warlock.model_factory(fixture, name='Country2')
-        self.assertEqual(Country2.__name__, 'Country2')
-        
+        self.assertEqual('Country2', Country2.__name__)
+
         nameless = warlock.model_factory(nameless_fixture)
-        self.assertEqual(nameless.__name__, 'Model')
-        
+        self.assertEqual('Model', nameless.__name__)
+
         nameless2 = warlock.model_factory(nameless_fixture, name='Country3')
-        self.assertEqual(nameless2.__name__, 'Country3')
+        self.assertEqual('Country3', nameless2.__name__)
 
     def test_deepcopy(self):
         """Make sure we aren't leaking references."""
         Mixmaster = warlock.model_factory(complex_fixture)
         mike = Mixmaster(sub={'foo': 'mike'})
 
-        self.assertEquals(mike.sub['foo'], 'mike')
+        self.assertEquals('mike', mike.sub['foo'])
 
         mike_1 = mike.copy()
         mike_1['sub']['foo'] = 'james'
-        self.assertEquals(mike.sub['foo'], 'mike')
+        self.assertEquals('mike', mike.sub['foo'])
 
         mike_2 = dict(six.iteritems(mike))
         mike_2['sub']['foo'] = 'james'
-        self.assertEquals(mike.sub['foo'], 'mike')
+        self.assertEquals('mike', mike.sub['foo'])
 
         mike_2 = dict(mike.items())
         mike_2['sub']['foo'] = 'james'
-        self.assertEquals(mike.sub['foo'], 'mike')
+        self.assertEquals('mike', mike.sub['foo'])
 
         mike_3_sub = list(six.itervalues(mike))[0]
         mike_3_sub['foo'] = 'james'
-        self.assertEquals(mike.sub['foo'], 'mike')
+        self.assertEquals('mike', mike.sub['foo'])
 
         mike_3_sub = list(mike.values())[0]
         mike_3_sub['foo'] = 'james'
-        self.assertEquals(mike.sub['foo'], 'mike')
+        self.assertEquals('mike', mike.sub['foo'])
 
     def test_forbidden_methods(self):
         Country = warlock.model_factory(fixture)
@@ -159,7 +178,7 @@
         sweden = Country(name='Sweden', population=9379116)
 
         sweden['name'] = 'Finland'
-        self.assertEqual(sweden['name'], 'Finland')
+        self.assertEqual('Finland', sweden['name'])
 
         del sweden['name']
         self.assertRaises(AttributeError, getattr, sweden, 'name')
@@ -169,7 +188,7 @@
         sweden = Country(name='Sweden', population=9379116)
 
         sweden.name = 'Finland'
-        self.assertEqual(sweden.name, 'Finland')
+        self.assertEqual('Finland', sweden.name)
 
         delattr(sweden, 'name')
         self.assertRaises(AttributeError, getattr, sweden, 'name')
@@ -236,3 +255,53 @@
 
         for patch in json.loads(sweden.patch):
             self.assertTrue(patch in patches)
+
+    def test_resolver(self):
+        from jsonschema import RefResolver
+        dirname = os.path.dirname(__file__)
+        schemas_path = 'file://' + os.path.join(dirname, 'schemas/')
+        resolver = RefResolver(schemas_path, None)
+
+        country_schema_file = \
+            open(os.path.join(dirname, 'schemas/') + 'country.json')
+        person_schema_file = \
+            open(os.path.join(dirname, 'schemas/') + 'person.json')
+
+        country_schema = json.load(country_schema_file)
+        person_schema = json.load(person_schema_file)
+        Country = warlock.model_factory(country_schema, resolver)
+        Person = warlock.model_factory(person_schema, resolver)
+
+        england = Country(
+            name="England",
+            population=53865800,
+            overlord=Person(
+                title="Queen",
+                firstname="Elizabeth",
+                lastname="Windsor"
+            )
+        )
+        expected = {
+            'name': 'England',
+            'population': 53865800,
+            'overlord': {
+                'title': 'Queen',
+                'lastname': 'Windsor',
+                'firstname': 'Elizabeth'
+             }
+        }
+        self.assertEqual(england, expected)
+
+    def test_recursive_models(self):
+        Parent = warlock.model_factory(parent_fixture)
+        Child = warlock.model_factory(child_fixture)
+
+        mom = Parent(name='Abby', children=[])
+
+        teenager = Child(age=15, mother=mom)
+        toddler = Child(age=3, mother=mom)
+
+        mom.children = [teenager, toddler]
+
+        self.assertEqual(mom.children[0].age, 15)
+        self.assertEqual(mom.children[1].age, 3)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/warlock/__init__.py 
new/warlock-1.3.0/warlock/__init__.py
--- old/warlock-1.2.0/warlock/__init__.py       2015-10-12 18:48:26.000000000 
+0200
+++ new/warlock-1.3.0/warlock/__init__.py       2016-06-25 20:01:00.000000000 
+0200
@@ -14,6 +14,5 @@
 
 """Public-facing Warlock API"""
 
-# pylint: disable=W0611
-from warlock.core import model_factory
-from warlock.exceptions import InvalidOperation
+from warlock.core import model_factory  # NOQA
+from warlock.exceptions import InvalidOperation  # NOQA
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/warlock/core.py 
new/warlock-1.3.0/warlock/core.py
--- old/warlock-1.2.0/warlock/core.py   2015-10-12 18:48:26.000000000 +0200
+++ new/warlock-1.3.0/warlock/core.py   2016-06-25 19:48:59.000000000 +0200
@@ -19,19 +19,24 @@
 from . import model
 
 
-def model_factory(schema, base_class=model.Model, name=None):
+def model_factory(schema, resolver=None, base_class=model.Model, name=None):
     """Generate a model class based on the provided JSON Schema
 
     :param schema: dict representing valid JSON schema
     :param name: A name to give the class, if `name` is not in `schema`
     """
     schema = copy.deepcopy(schema)
+    resolver = resolver
 
     class Model(base_class):
         def __init__(self, *args, **kwargs):
             self.__dict__['schema'] = schema
+            self.__dict__['resolver'] = resolver
             base_class.__init__(self, *args, **kwargs)
 
+    if resolver is not None:
+        Model.resolver = resolver
+
     if name is not None:
         Model.__name__ = name
     elif 'name' in schema:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/warlock/model.py 
new/warlock-1.3.0/warlock/model.py
--- old/warlock-1.2.0/warlock/model.py  2015-10-12 18:48:26.000000000 +0200
+++ new/warlock-1.3.0/warlock/model.py  2016-06-25 20:08:28.000000000 +0200
@@ -25,6 +25,7 @@
 
 
 class Model(dict):
+
     def __init__(self, *args, **kwargs):
         # we overload setattr so set this manually
         d = dict(*args, **kwargs)
@@ -45,7 +46,7 @@
         try:
             self.validate(mutation)
         except exceptions.ValidationError as exc:
-            msg = ("Unable to set '%s' to '%s'. Reason: %s"
+            msg = ("Unable to set '%s' to %r. Reason: %s"
                    % (key, value, str(exc)))
             raise exceptions.InvalidOperation(msg)
 
@@ -77,7 +78,7 @@
     def __delattr__(self, key):
         self.__delitem__(key)
 
-    ### BEGIN dict compatibility methods ###
+    # BEGIN dict compatibility methods
 
     def clear(self):
         raise exceptions.InvalidOperation()
@@ -91,6 +92,12 @@
     def copy(self):
         return copy.deepcopy(dict(self))
 
+    def __copy__(self):
+        return self.copy()
+
+    def __deepcopy__(self, memo):
+        return copy.deepcopy(dict(self), memo)
+
     def update(self, other):
         mutation = dict(self.items())
         mutation.update(other)
@@ -112,7 +119,7 @@
     def values(self):
         return copy.deepcopy(dict(self)).values()
 
-    ### END dict compatibility methods ###
+    # END dict compatibility methods
 
     @property
     def patch(self):
@@ -130,6 +137,9 @@
     def validate(self, obj):
         """Apply a JSON schema to an object"""
         try:
-            jsonschema.validate(obj, self.schema)
+            if self.resolver is not None:
+                jsonschema.validate(obj, self.schema, resolver=self.resolver)
+            else:
+                jsonschema.validate(obj, self.schema)
         except jsonschema.ValidationError as exc:
             raise exceptions.ValidationError(str(exc))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/warlock-1.2.0/warlock.egg-info/PKG-INFO 
new/warlock-1.3.0/warlock.egg-info/PKG-INFO
--- old/warlock-1.2.0/warlock.egg-info/PKG-INFO 2015-10-12 19:09:45.000000000 
+0200
+++ new/warlock-1.3.0/warlock.egg-info/PKG-INFO 2016-06-25 20:13:37.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: warlock
-Version: 1.2.0
+Version: 1.3.0
 Summary: Python object model built on JSON schema and JSON patch.
 Home-page: http://github.com/bcwaldon/warlock
 Author: Brian Waldon


Reply via email to