Hello community,

here is the log from the commit of package python-slumber for openSUSE:Factory 
checked in at 2012-11-12 16:06:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-slumber (Old)
 and      /work/SRC/openSUSE:Factory/.python-slumber.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-slumber", Maintainer is ""

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-slumber/python-slumber.changes    
2012-06-10 21:52:18.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-slumber.new/python-slumber.changes       
2012-11-12 16:06:33.000000000 +0100
@@ -1,0 +2,9 @@
+Mon Nov  5 21:48:52 UTC 2012 - sasc...@suse.de
+
+- Update to version 0.5.1:
+  + Fix serializers to work with multiple content_types
+- Changes from version 0.5.0:
+  + Refactoring release
+- Disabled testsuite, upstream seems to have dropped it
+
+-------------------------------------------------------------------

Old:
----
  slumber-0.4.2.tar.gz

New:
----
  slumber-0.5.1.tar.gz

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

Other differences:
------------------
++++++ python-slumber.spec ++++++
--- /var/tmp/diff_new_pack.5OJSIP/_old  2012-11-12 16:06:34.000000000 +0100
+++ /var/tmp/diff_new_pack.5OJSIP/_new  2012-11-12 16:06:34.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           python-slumber
-Version:        0.4.2
+Version:        0.5.1
 Release:        0
 Url:            http://slumber.in/
 Summary:        A library that makes consuming a REST API easier and more 
convenient
@@ -27,8 +27,8 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  python-devel
 BuildRequires:  python-distribute
-BuildRequires:  python-mock
-BuildRequires:  python-requests
+#BuildRequires:  python-mock
+#BuildRequires:  python-requests
 Requires:       python-PyYAML
 Requires:       python-requests
 Requires:       python-simplejson
@@ -53,10 +53,8 @@
 %install
 python setup.py install --prefix=%{_prefix} --root=%{buildroot}
 
-%if 0%{?suse_version} != 1110
-%check
-python setup.py test
-%endif
+#check
+#python setup.py test
 
 %files
 %defattr(-,root,root,-)

++++++ slumber-0.4.2.tar.gz -> slumber-0.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/MANIFEST.in 
new/slumber-0.5.1/MANIFEST.in
--- old/slumber-0.4.2/MANIFEST.in       2012-01-21 21:48:34.000000000 +0100
+++ new/slumber-0.5.1/MANIFEST.in       2012-10-29 17:12:17.000000000 +0100
@@ -2,3 +2,4 @@
 include README.rst
 include LICENSE.txt
 include CHANGELOG.rst
+prune tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/PKG-INFO new/slumber-0.5.1/PKG-INFO
--- old/slumber-0.4.2/PKG-INFO  2012-04-16 13:58:11.000000000 +0200
+++ new/slumber-0.5.1/PKG-INFO  2012-10-30 18:08:48.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: slumber
-Version: 0.4.2
+Version: 0.5.1
 Summary: A library that makes consuming a REST API easier and more convenient
 Home-page: http://slumber.in/
 Author: Donald Stufft
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/docs/options.rst 
new/slumber-0.5.1/docs/options.rst
--- old/slumber-0.4.2/docs/options.rst  2012-04-13 01:25:01.000000000 +0200
+++ new/slumber-0.5.1/docs/options.rst  2012-10-29 17:12:17.000000000 +0100
@@ -32,9 +32,9 @@
 Serializer
 ==========
 
-Slumber allows you to use either json or yaml as your serializer. It defaults 
to using
-json. You can change this default by specifying a ``format`` argument to your
-api class.::
+Slumber allows you to use any serialization you want. It comes with json and
+yaml but creating your own is easy. By default it will attempt to use json. You
+can change the default by specifying a ``format`` argument to your api class.::
 
     # Use Yaml instead of Json
     api = slumber.API("http://path/to/my/api/";, format="yaml")
@@ -45,6 +45,40 @@
     api = slumber.API("http://path/to/my/api/";) # Serializer defaults to Json
     api.resource_name(format="yaml").get() # Serializer will be Yaml
 
+If you want to create your own serializer you can do so. A serialize inherits 
from
+``slumber.serialize.BaseSerializer`` and implements ``loads``, ``dumps``. It
+also must have a class member of ``key`` which will be the string key for this
+serialization (such as "json").The final requirement is either a class member
+of ``content_type`` which is the content type to use for requests (such as
+"application/json") or define a ``get_content_type`` method.
+
+An example::
+
+    class PickleSerializer(slumber.serialize.BaseSerializer):
+        key = "pickle"
+        content_type = "x-application/pickle"
+
+        def loads(self, data):
+            return pickle.loads(data)
+
+        def dumps(self, data):
+            return pickle.dumps(data)
+
+Once you have a custom serializer you can pass it to slumber like so::
+
+    from slumber import serialize
+    import slumber
+
+    s = serialize.Serializer(
+                    default="pickle",
+                    serializers=[
+                        serialize.JsonSerializer(),
+                        serialize.YamlSerializer(),
+                        PickleSerializer(),
+                    ]
+                )
+    api = slumber.API("http://example.com/api/v1/";, format="pickle", 
serializer=s)
+
 Slashes
 =======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/docs/tutorial.rst 
new/slumber-0.5.1/docs/tutorial.rst
--- old/slumber-0.4.2/docs/tutorial.rst 2012-04-16 13:30:26.000000000 +0200
+++ new/slumber-0.5.1/docs/tutorial.rst 2012-10-29 17:12:17.000000000 +0100
@@ -44,6 +44,8 @@
     >>> new = api.note.post({"title": "My Test Note", "content": "This is the 
content of my Test Note!"})
     >>> ## PUT http://slumber.in/api/v1/note/{id}/
     >>> api.note(new["id"]).put({"content": "I just changed the content of my 
Test Note!"})
+    >>> ## PATCH http://slumber.in/api/v1/note/{id}/
+    >>> api.note(new["id"]).patch({"content": "Wat!"})
     >>> ## GET http://slumber.in/api/v1/note/{id}/
     >>> api.note(new["id"]).get()
     >>> ## DELETE http://slumber.in/api/v1/note/{id}/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/setup.py new/slumber-0.5.1/setup.py
--- old/slumber-0.4.2/setup.py  2012-04-16 13:56:18.000000000 +0200
+++ new/slumber-0.5.1/setup.py  2012-10-30 18:07:44.000000000 +0100
@@ -11,7 +11,7 @@
 
 setup(
     name = "slumber",
-    version = "0.4.2",
+    version = "0.5.1",
     description = "A library that makes consuming a REST API easier and more 
convenient",
     long_description="\n\n".join([
         open(os.path.join(base_dir, "README.rst"), "r").read(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/slumber/__init__.py 
new/slumber-0.5.1/slumber/__init__.py
--- old/slumber-0.4.2/slumber/__init__.py       2012-04-16 13:55:47.000000000 
+0200
+++ new/slumber-0.5.1/slumber/__init__.py       2012-10-30 18:04:33.000000000 
+0100
@@ -88,11 +88,8 @@
 
         return self.__class__(**kwargs)
 
-    def get_serializer(self):
-        return Serializer(default_format=self._store["format"])
-
     def _request(self, method, data=None, params=None):
-        s = self.get_serializer()
+        s = self._store["serializer"]
         url = self._store["base_url"]
 
         if self._store["append_slash"] and not url.endswith("/"):
@@ -105,44 +102,63 @@
         elif 500 <= resp.status_code <= 599:
             raise exceptions.HttpServerError("Server Error %s: %s" % 
(resp.status_code, url), response=resp, content=resp.content)
 
+        self._ = resp
+
         return resp
 
-    def get(self, **kwargs):
-        s = self.get_serializer()
+    def _handle_redirect(self, resp, **kwargs):
+        # @@@ Hacky, see description in __call__
+        resource_obj = self(url_override=resp.headers["location"])
+        return resource_obj.get(params=kwargs)
+
+    def _try_to_serialize_response(self, resp):
+        s = self._store["serializer"]
+
+        if resp.headers.get("content-type", None):
+            content_type = 
resp.headers.get("content-type").split(";")[0].strip()
+
+            try:
+                stype = s.get_serializer(content_type=content_type)
+            except exceptions.SerializerNotAvailable:
+                return resp.content
+
+            return stype.loads(resp.content)
+        else:
+            return resp.content
 
+    def get(self, **kwargs):
         resp = self._request("GET", params=kwargs)
         if 200 <= resp.status_code <= 299:
-            if resp.status_code == 200:
-                return s.loads(resp.content)
-            else:
-                return resp.content
+            return self._try_to_serialize_response(resp)
         else:
             return  # @@@ We should probably do some sort of error here? (Is 
this even possible?)
 
     def post(self, data, **kwargs):
-        s = self.get_serializer()
+        s = self._store["serializer"]
 
         resp = self._request("POST", data=s.dumps(data), params=kwargs)
         if 200 <= resp.status_code <= 299:
-            if resp.status_code == 201:
-                # @@@ Hacky, see description in __call__
-                resource_obj = self(url_override=resp.headers["location"])
-                return resource_obj.get(params=kwargs)
-            else:
-                return resp.content
+            return self._try_to_serialize_response(resp)
+        else:
+            # @@@ Need to be Some sort of Error Here or Something
+            return
+
+    def patch(self, data, **kwargs):
+        s = self._store["serializer"]
+
+        resp = self._request("PATCH", data=s.dumps(data), params=kwargs)
+        if 200 <= resp.status_code <= 299:
+            return self._try_to_serialize_response(resp)
         else:
             # @@@ Need to be Some sort of Error Here or Something
             return
 
     def put(self, data, **kwargs):
-        s = self.get_serializer()
+        s = self._store["serializer"]
 
         resp = self._request("PUT", data=s.dumps(data), params=kwargs)
         if 200 <= resp.status_code <= 299:
-            if resp.status_code == 204:
-                return True
-            else:
-                return True  # @@@ Should this really be True?
+            return self._try_to_serialize_response(resp)
         else:
             return False
 
@@ -159,12 +175,16 @@
 
 class API(ResourceAttributesMixin, object):
 
-    def __init__(self, base_url=None, auth=None, format=None, 
append_slash=True, session=None):
+    def __init__(self, base_url=None, auth=None, format=None, 
append_slash=True, session=None, serializer=None):
+        if serializer is None:
+            s = Serializer(default=format)
+
         self._store = {
             "base_url": base_url,
             "format": format if format is not None else "json",
             "append_slash": append_slash,
             "session": requests.session(auth=auth) if session is None else 
session,
+            "serializer": s,
         }
 
         # Do some Checks for Required Values
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/slumber/serialize.py 
new/slumber-0.5.1/slumber/serialize.py
--- old/slumber-0.4.2/slumber/serialize.py      2012-01-21 21:48:34.000000000 
+0100
+++ new/slumber-0.5.1/slumber/serialize.py      2012-10-30 17:48:33.000000000 
+0100
@@ -1,6 +1,6 @@
 from slumber import exceptions
 
-SERIALIZERS = {
+_SERIALIZERS = {
     "json": True,
     "yaml": True,
 }
@@ -11,25 +11,23 @@
     try:
         import json
     except ImportError:
-        SERIALIZERS["json"] = False
+        _SERIALIZERS["json"] = False
 
 try:
     import yaml
 except ImportError:
-    SERIALIZERS["yaml"] = False
-
-if not len([x for x in SERIALIZERS.values() if x]):
-    raise exceptions.SerializerNoAvailable("There are no Available 
Serializers.")
+    _SERIALIZERS["yaml"] = False
 
 
 class BaseSerializer(object):
 
-    content_type = None
+    content_types = None
+    key = None
 
     def get_content_type(self):
-        if self.content_type is None:
+        if self.content_types is None:
             raise NotImplementedError()
-        return self.content_type
+        return self.content_types[0]
 
     def loads(self, data):
         raise NotImplementedError()
@@ -40,7 +38,14 @@
 
 class JsonSerializer(BaseSerializer):
 
-    content_type = "application/json"
+    content_types = [
+                        "application/json",
+                        "application/x-javascript",
+                        "text/javascript",
+                        "text/x-javascript",
+                        "text/x-json",
+                    ]
+    key = "json"
 
     def loads(self, data):
         return json.loads(data)
@@ -51,7 +56,8 @@
 
 class YamlSerializer(BaseSerializer):
 
-    content_type = "text/yaml"
+    content_types = ["text/yaml"]
+    key = "yaml"
 
     def loads(self, data):
         return yaml.safe_load(data)
@@ -62,24 +68,36 @@
 
 class Serializer(object):
 
-    _serializers = {
-        "json": JsonSerializer(),
-        "yaml": YamlSerializer(),
-    }
-
-    def __init__(self, default_format="json"):
-        default_format = default_format if default_format is not None else 
"json"
-
-        self.available_serializers = [x[0] for x in SERIALIZERS.items() if 
x[1]]
-        self.default_format = self.get_serializer(default_format)
-
-    def get_serializer(self, name=None):
-        if name is None:
-            return self.default_format
-        else:
-            if not name in self.available_serializers:
+    def __init__(self, default=None, serializers=None):
+        if default is None:
+            default = "json" if _SERIALIZERS["json"] else "yaml"
+
+        if serializers is None:
+            serializers = [x() for x in [JsonSerializer, YamlSerializer] if 
_SERIALIZERS[x.key]]
+
+        if not serializers:
+            raise exceptions.SerializerNoAvailable("There are no Available 
Serializers.")
+
+        self.serializers = {}
+
+        for serializer in serializers:
+            self.serializers[serializer.key] = serializer
+
+        self.default = default
+
+    def get_serializer(self, name=None, content_type=None):
+        if name is None and content_type is None:
+            return self.serializers[self.default]
+        elif name is not None and content_type is None:
+            if not name in self.serializers:
                 raise exceptions.SerializerNotAvailable("%s is not an 
available serializer" % name)
-            return self._serializers[name]
+            return self.serializers[name]
+        else:
+            for x in self.serializers.values():
+                for ctype in x.content_types:
+                    if content_type == ctype:
+                        return x
+            raise exceptions.SerializerNotAvailable("%s is not an available 
serializer" % content_type)
 
     def loads(self, data, format=None):
         s = self.get_serializer(format)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/slumber.egg-info/PKG-INFO 
new/slumber-0.5.1/slumber.egg-info/PKG-INFO
--- old/slumber-0.4.2/slumber.egg-info/PKG-INFO 2012-04-16 13:58:09.000000000 
+0200
+++ new/slumber-0.5.1/slumber.egg-info/PKG-INFO 2012-10-30 18:08:46.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: slumber
-Version: 0.4.2
+Version: 0.5.1
 Summary: A library that makes consuming a REST API easier and more convenient
 Home-page: http://slumber.in/
 Author: Donald Stufft
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/slumber.egg-info/SOURCES.txt 
new/slumber-0.5.1/slumber.egg-info/SOURCES.txt
--- old/slumber-0.4.2/slumber.egg-info/SOURCES.txt      2012-04-16 
13:58:09.000000000 +0200
+++ new/slumber-0.5.1/slumber.egg-info/SOURCES.txt      2012-10-30 
18:08:46.000000000 +0100
@@ -15,7 +15,4 @@
 slumber.egg-info/dependency_links.txt
 slumber.egg-info/not-zip-safe
 slumber.egg-info/requires.txt
-slumber.egg-info/top_level.txt
-tests/__init__.py
-tests/resource.py
-tests/utils.py
\ No newline at end of file
+slumber.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/tests/__init__.py 
new/slumber-0.5.1/tests/__init__.py
--- old/slumber-0.4.2/tests/__init__.py 2012-01-21 21:48:34.000000000 +0100
+++ new/slumber-0.5.1/tests/__init__.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-import os.path
-import unittest
-
-
-def get_tests():
-    start_dir = os.path.dirname(__file__)
-    return unittest.TestLoader().discover(start_dir, pattern="*.py")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/tests/resource.py 
new/slumber-0.5.1/tests/resource.py
--- old/slumber-0.4.2/tests/resource.py 2012-04-13 01:25:10.000000000 +0200
+++ new/slumber-0.5.1/tests/resource.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,36 +0,0 @@
-import mock
-import unittest
-import requests
-import slumber
-
-
-class ResourceTestCase(unittest.TestCase):
-
-    def setUp(self):
-        self.base_resource = 
slumber.Resource(base_url="http://example/api/v1/test";, format="json", 
append_slash=False)
-
-    def test_get_serializer(self):
-        self.assertTrue(isinstance(self.base_resource.get_serializer(), 
slumber.Serializer))
-
-    def test_request_200(self):
-        r = mock.Mock(spec=requests.Response)
-        r.status_code = 200
-        r.content = "Mocked Content"
-
-        self.base_resource._store.update({
-            "session": mock.Mock(spec=requests.Session),
-        })
-        self.base_resource._store["session"].request.return_value = r
-
-        resp = self.base_resource._request("GET")
-
-        self.assertTrue(resp is r)
-        self.assertEqual(resp.content, "Mocked Content")
-
-        self.base_resource._store["session"].request.assert_called_once_with(
-            "GET",
-            "http://example/api/v1/test";,
-            data=None,
-            params=None,
-            headers={"content-type": 
self.base_resource.get_serializer().get_content_type(), "accept": 
self.base_resource.get_serializer().get_content_type()}
-        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/slumber-0.4.2/tests/utils.py 
new/slumber-0.5.1/tests/utils.py
--- old/slumber-0.4.2/tests/utils.py    2012-04-16 13:55:47.000000000 +0200
+++ new/slumber-0.5.1/tests/utils.py    1970-01-01 01:00:00.000000000 +0100
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import unittest
-import slumber
-
-
-class UtilsTestCase(unittest.TestCase):
-
-    def test_url_join_http(self):
-        self.assertEqual(slumber.url_join("http://example.com/";), 
"http://example.com/";)
-        self.assertEqual(slumber.url_join("http://example.com/";, "test"), 
"http://example.com/test";)
-        self.assertEqual(slumber.url_join("http://example.com/";, "test", 
"example"), "http://example.com/test/example";)
-
-        self.assertEqual(slumber.url_join("http://example.com";), 
"http://example.com/";)
-        self.assertEqual(slumber.url_join("http://example.com";, "test"), 
"http://example.com/test";)
-        self.assertEqual(slumber.url_join("http://example.com";, "test", 
"example"), "http://example.com/test/example";)
-
-    def test_url_join_https(self):
-        self.assertEqual(slumber.url_join("https://example.com/";), 
"https://example.com/";)
-        self.assertEqual(slumber.url_join("https://example.com/";, "test"), 
"https://example.com/test";)
-        self.assertEqual(slumber.url_join("https://example.com/";, "test", 
"example"), "https://example.com/test/example";)
-
-        self.assertEqual(slumber.url_join("https://example.com";), 
"https://example.com/";)
-        self.assertEqual(slumber.url_join("https://example.com";, "test"), 
"https://example.com/test";)
-        self.assertEqual(slumber.url_join("https://example.com";, "test", 
"example"), "https://example.com/test/example";)
-
-    def test_url_join_http_port(self):
-        self.assertEqual(slumber.url_join("http://example.com:80/";), 
"http://example.com:80/";)
-        self.assertEqual(slumber.url_join("http://example.com:80/";, "test"), 
"http://example.com:80/test";)
-        self.assertEqual(slumber.url_join("http://example.com:80/";, "test", 
"example"), "http://example.com:80/test/example";)
-
-    def test_url_join_https_port(self):
-        self.assertEqual(slumber.url_join("https://example.com:443/";), 
"https://example.com:443/";)
-        self.assertEqual(slumber.url_join("https://example.com:443/";, "test"), 
"https://example.com:443/test";)
-        self.assertEqual(slumber.url_join("https://example.com:443/";, "test", 
"example"), "https://example.com:443/test/example";)
-
-    def test_url_join_path(self):
-        self.assertEqual(slumber.url_join("/"), "/")
-        self.assertEqual(slumber.url_join("/", "test"), "/test")
-        self.assertEqual(slumber.url_join("/", "test", "example"), 
"/test/example")
-
-        self.assertEqual(slumber.url_join("/path/"), "/path/")
-        self.assertEqual(slumber.url_join("/path/", "test"), "/path/test")
-        self.assertEqual(slumber.url_join("/path/", "test", "example"), 
"/path/test/example")
-
-    def test_url_join_trailing_slash(self):
-        self.assertEqual(slumber.url_join("http://example.com/";, "test/"), 
"http://example.com/test/";)
-        self.assertEqual(slumber.url_join("http://example.com/";, "test/", 
"example/"), "http://example.com/test/example/";)
-
-    def test_url_join_encoded_unicode(self):
-        expected = "http://example.com/tǝst/";
-
-        url = slumber.url_join("http://example.com/";, "tǝst/")
-        self.assertEqual(url, expected)
-
-        url = slumber.url_join("http://example.com/";, 
"tǝst/".decode('utf8').encode('utf8'))
-        self.assertEqual(url, expected)
-
-    def test_url_join_decoded_unicode(self):
-        url = slumber.url_join("http://example.com/";, "tǝst/".decode('utf8'))
-        expected = "http://example.com/tǝst/".decode('utf8')
-        self.assertEqual(url, expected)

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to