Hello community, here is the log from the commit of package python-slumber for openSUSE:Factory checked in at 2015-05-18 22:25:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-slumber (Old) and /work/SRC/openSUSE:Factory/.python-slumber.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-slumber" Changes: -------- --- /work/SRC/openSUSE:Factory/python-slumber/python-slumber.changes 2013-09-16 16:35:35.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-slumber.new/python-slumber.changes 2015-05-18 22:25:39.000000000 +0200 @@ -1,0 +2,14 @@ +Wed May 13 10:51:10 UTC 2015 - benoit.mo...@gmx.fr + +- update to version 0.7.0: + * no changelog available +- additional changes from version 0.6.2: + * Further Python 3 compatibility fixes, many thanks to + Alexander Shchepetilnikov (irqed) +- additional changes from version 0.6.1: + * Remove simplejson dependency. + * Support range now Python 2.6 - Python 3.4 +- suggests python-PyYAML and python-simplejson + instead of requiring them + +------------------------------------------------------------------- Old: ---- slumber-0.6.0.tar.gz New: ---- slumber-0.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-slumber.spec ++++++ --- /var/tmp/diff_new_pack.a6cyGr/_old 2015-05-18 22:25:40.000000000 +0200 +++ /var/tmp/diff_new_pack.a6cyGr/_new 2015-05-18 22:25:40.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-slumber # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 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 @@ -17,7 +17,7 @@ Name: python-slumber -Version: 0.6.0 +Version: 0.7.0 Release: 0 Url: http://slumber.in/ Summary: A library that makes consuming a REST API easier and more convenient @@ -29,9 +29,9 @@ BuildRequires: python-setuptools #BuildRequires: python-mock #BuildRequires: python-requests -Requires: python-PyYAML Requires: python-requests -Requires: python-simplejson +Suggests: python-PyYAML +Suggests: python-simplejson %if 0%{?suse_version} && 0%{?suse_version} <= 1110 %{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} %else ++++++ slumber-0.6.0.tar.gz -> slumber-0.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/CHANGELOG.rst new/slumber-0.7.0/CHANGELOG.rst --- old/slumber-0.6.0/CHANGELOG.rst 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/CHANGELOG.rst 2015-02-27 10:53:09.000000000 +0100 @@ -3,6 +3,23 @@ Changelog ========= + +development version +------------------- + +0.6.2 +----- + +* Further Python 3 compatibility fixes, many thanks to Alexander Shchepetilnikov (irqed) + +0.6.1 +----- + +* Remove ``simplejson`` dependency. + +* Support range now Python 2.6 - Python 3.4 + + 0.6.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/PKG-INFO new/slumber-0.7.0/PKG-INFO --- old/slumber-0.6.0/PKG-INFO 2013-04-01 20:25:05.000000000 +0200 +++ new/slumber-0.7.0/PKG-INFO 2015-04-17 11:29:45.000000000 +0200 @@ -1,25 +1,25 @@ Metadata-Version: 1.0 Name: slumber -Version: 0.6.0 +Version: 0.7.0 Summary: A library that makes consuming a REST API easier and more convenient -Home-page: http://slumber.in/ -Author: Donald Stufft -Author-email: donald.stu...@gmail.com +Home-page: http://github.com/samgiles/slumber +Author: Samuel Giles +Author-email: sam.e.gi...@gmail.com License: UNKNOWN -Description: Slumber - ======= +Description: Slumber |build-status| |coverage-status| |docs| + =============================================== - Slumber is a python library that provides a convenient yet powerful object - orientated interface to ReSTful APIs. It acts as a wrapper around the - excellent requests_ library and abstracts away the handling of urls, serialization, - and processing requests. + Slumber is a Python library that provides a convenient yet powerful + object-oriented interface to ReSTful APIs. It acts as a wrapper around the + excellent requests_ library and abstracts away the handling of URLs, serialization, + and request processing. .. _requests: http://python-requests.org/ Getting Help ============ - I have an IRC channel (`#slumber on irc.freenode.net`_) to get help, bounce idea + Visit IRC channel (`#slumber on irc.freenode.net`_) to get help, bounce ideas or generally shoot the breeze. .. _#slumber on irc.freenode.net: irc://irc.freenode.net/slumber @@ -31,9 +31,9 @@ $ pip install slumber - 2. Install Optional Requirements:: + 2. Install Optional Requirement:: - pip install simplejson pyyaml + pip install pyyaml 3. Use Slumber! @@ -44,11 +44,17 @@ * Python 2.6+ * requests - * simplejson (If you desire the speedups for JSON serialization) - * pyyaml (If you are using the optional yaml serialization) - - .. _Pip: http://pip.openplans.org/ + * pyyaml (If you are using the optional YAML serialization) + .. |build-status| image:: https://travis-ci.org/samgiles/slumber.svg?branch=master + :target: https://travis-ci.org/samgiles/slumber + :alt: Build status + .. |coverage-status| image:: https://img.shields.io/coveralls/samgiles/slumber.svg + :target: https://coveralls.io/r/samgiles/slumber + :alt: Test coverage percentage + .. |docs| image:: https://readthedocs.org/projects/slumber/badge/?version=latest + :target: http://slumber.readthedocs.org/ + :alt: Documentation .. :changelog: @@ -56,6 +62,23 @@ Changelog ========= + + development version + ------------------- + + 0.6.2 + ----- + + * Further Python 3 compatibility fixes, many thanks to Alexander Shchepetilnikov (irqed) + + 0.6.1 + ----- + + * Remove ``simplejson`` dependency. + + * Support range now Python 2.6 - Python 3.4 + + 0.6.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/README.rst new/slumber-0.7.0/README.rst --- old/slumber-0.6.0/README.rst 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/README.rst 2015-02-27 10:53:09.000000000 +0100 @@ -1,17 +1,17 @@ -Slumber -======= +Slumber |build-status| |coverage-status| |docs| +=============================================== -Slumber is a python library that provides a convenient yet powerful object -orientated interface to ReSTful APIs. It acts as a wrapper around the -excellent requests_ library and abstracts away the handling of urls, serialization, -and processing requests. +Slumber is a Python library that provides a convenient yet powerful +object-oriented interface to ReSTful APIs. It acts as a wrapper around the +excellent requests_ library and abstracts away the handling of URLs, serialization, +and request processing. .. _requests: http://python-requests.org/ Getting Help ============ -I have an IRC channel (`#slumber on irc.freenode.net`_) to get help, bounce idea +Visit IRC channel (`#slumber on irc.freenode.net`_) to get help, bounce ideas or generally shoot the breeze. .. _#slumber on irc.freenode.net: irc://irc.freenode.net/slumber @@ -23,9 +23,9 @@ $ pip install slumber -2. Install Optional Requirements:: +2. Install Optional Requirement:: - pip install simplejson pyyaml + pip install pyyaml 3. Use Slumber! @@ -36,8 +36,14 @@ * Python 2.6+ * requests -* simplejson (If you desire the speedups for JSON serialization) -* pyyaml (If you are using the optional yaml serialization) - -.. _Pip: http://pip.openplans.org/ +* pyyaml (If you are using the optional YAML serialization) +.. |build-status| image:: https://travis-ci.org/samgiles/slumber.svg?branch=master + :target: https://travis-ci.org/samgiles/slumber + :alt: Build status +.. |coverage-status| image:: https://img.shields.io/coveralls/samgiles/slumber.svg + :target: https://coveralls.io/r/samgiles/slumber + :alt: Test coverage percentage +.. |docs| image:: https://readthedocs.org/projects/slumber/badge/?version=latest + :target: http://slumber.readthedocs.org/ + :alt: Documentation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/docs/index.rst new/slumber-0.7.0/docs/index.rst --- old/slumber-0.6.0/docs/index.rst 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/docs/index.rst 2015-02-27 10:53:09.000000000 +0100 @@ -31,9 +31,9 @@ $ pip install slumber -2. Install Optional Requirements:: +2. Install Optional Requirement:: - pip install simplejson pyyaml + pip install pyyaml 3. Use Slumber! @@ -42,9 +42,8 @@ Slumber requires the following modules: -* Python 2.5+ +* Python 2.6+ * requests -* simplejson (If using Python 2.5, or you desire the speedups for JSON serialization) * pyyaml (If you are using the optional yaml serialization) .. _Pip: http://pip.openplans.org/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/docs/options.rst new/slumber-0.7.0/docs/options.rst --- old/slumber-0.6.0/docs/options.rst 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/docs/options.rst 2015-02-27 10:53:09.000000000 +0100 @@ -25,6 +25,21 @@ And slumber will attempt to use those credentials with each request. +With Tastypie ApikeyAuthentication you can use:: + + from requests.auth import AuthBase + + class TastypieApikeyAuth(AuthBase): + def __init__(self, username, apikey): + self.username = username + self.apikey = apikey + + def __call__(self, r): + r.headers['Authorization'] = "ApiKey {0}:{1}".format(self.username, self.apikey) + return r + + api = slumber.API("http://path/to/my/api/", auth=TastypieApikeyAuth("myuser", "mypass")) + To Use Digest or OAuth please consult the requests documentation. The auth argument is passed directly to requests and thus works exactly the same way and accepts exactly the same arguments. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/setup.py new/slumber-0.7.0/setup.py --- old/slumber-0.6.0/setup.py 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/setup.py 2015-04-17 11:29:16.000000000 +0200 @@ -1,23 +1,40 @@ import os +import sys from setuptools import setup install_requires = ["requests"] +tests_require = ["mock", "unittest2"] base_dir = os.path.dirname(os.path.abspath(__file__)) +version = "0.7.0" + +if sys.argv[-1] == 'publish': + os.system("git tag -a %s -m 'v%s'" % (version, version)) + os.system("python setup.py sdist bdist_wheel upload -r pypi") + print("Published version %s, do `git push --tags` to push new tag to remote" % version) + sys.exit() + +if sys.argv[-1] == 'syncci': + os.system("panci --to=tox .travis.yml > tox.ini"); + sys.exit(); + setup( name = "slumber", - version = "0.6.0", + version = version, 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(), open(os.path.join(base_dir, "CHANGELOG.rst"), "r").read() ]), - url = "http://slumber.in/", + url = "http://github.com/samgiles/slumber", author = "Donald Stufft", author_email = "donald.stu...@gmail.com", + maintainer = "Samuel Giles", + maintainer_email = "sam.e.gi...@gmail.com", packages = ["slumber"], zip_safe = False, install_requires = install_requires, + tests_require = tests_require, test_suite = "tests.get_tests", ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/slumber/__init__.py new/slumber-0.7.0/slumber/__init__.py --- old/slumber-0.6.0/slumber/__init__.py 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/slumber/__init__.py 2015-04-17 10:58:57.000000000 +0200 @@ -1,45 +1,42 @@ -import posixpath -import urlparse - import requests -from slumber import exceptions -from slumber.serialize import Serializer +try: + from urllib.parse import urlparse, urlsplit, urlunsplit +except ImportError: + from urlparse import urlparse, urlsplit, urlunsplit + +from . import exceptions +from .serialize import Serializer +from .utils import url_join, iterator, copy_kwargs __all__ = ["Resource", "API"] -def url_join(base, *args): - """ - Helper function to join an arbitrary number of url segments together. - """ - scheme, netloc, path, query, fragment = urlparse.urlsplit(base) - path = path if len(path) else "/" - path = posixpath.join(path, *[('%s' % x) for x in args]) - return urlparse.urlunsplit([scheme, netloc, path, query, fragment]) - - class ResourceAttributesMixin(object): """ - A Mixin that makes it so that accessing an undefined attribute on a class - results in returning a Resource Instance. This Instance can then be used - to make calls to the a Resource. + A Mixin that allows access to an undefined attribute on a class. + Instead of raising an attribute error, the undefined attribute will + return a Resource Instance which can be used to make calls to the + resource identified by the attribute. + + The type of the resource returned can be overridden by adding a + resource_class attribute. It assumes that a Meta class exists at self._meta with all the required attributes. """ def __getattr__(self, item): + # Don't allow access to 'private' by convention attributes. + # @@@: How would this work with resources names that begin with + # underscores? if item.startswith("_"): raise AttributeError(item) - kwargs = {} - for key, value in self._store.iteritems(): - kwargs[key] = value - + kwargs = copy_kwargs(self._store) kwargs.update({"base_url": url_join(self._store["base_url"], item)}) - return Resource(**kwargs) + return self._get_resource(**kwargs) class Resource(ResourceAttributesMixin, object): @@ -68,9 +65,7 @@ if id is None and format is None and url_override is None: return self - kwargs = {} - for key, value in self._store.iteritems(): - kwargs[key] = value + kwargs = copy_kwargs(self._store) if id is not None: kwargs["base_url"] = url_join(self._store["base_url"], id) @@ -86,26 +81,24 @@ kwargs["session"] = self._store["session"] - return self.__class__(**kwargs) + return self._get_resource(**kwargs) def _request(self, method, data=None, files=None, params=None): - s = self._store["serializer"] - url = self._store["base_url"] - - if self._store["append_slash"] and not url.endswith("/"): - url = url + "/" + serializer = self._store["serializer"] + url = self.url() - headers = {"accept": s.get_content_type()} + headers = {"accept": serializer.get_content_type()} if not files: - headers["content-type"] = s.get_content_type() + headers["content-type"] = serializer.get_content_type() if data is not None: - data = s.dumps(data) + data = serializer.dumps(data) resp = self._store["session"].request(method, url, data=data, params=params, files=files, headers=headers) if 400 <= resp.status_code <= 499: - raise exceptions.HttpClientError("Client Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) + exception_class = exceptions.HttpNotFoundError if resp.status_code == 404 else exceptions.HttpClientError + raise exception_class("Client Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) elif 500 <= resp.status_code <= 599: raise exceptions.HttpServerError("Server Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content) @@ -116,12 +109,14 @@ 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) + return resource_obj.get(**kwargs) def _try_to_serialize_response(self, resp): s = self._store["serializer"] + if resp.status_code in [204, 205]: + return - if resp.headers.get("content-type", None): + if resp.headers.get("content-type", None) and resp.content: content_type = resp.headers.get("content-type").split(";")[0].strip() try: @@ -129,44 +124,55 @@ except exceptions.SerializerNotAvailable: return resp.content + if type(resp.content) == bytes: + try: + return stype.loads(resp.content.decode()) + except: + return resp.content return stype.loads(resp.content) else: return resp.content - def get(self, **kwargs): - resp = self._request("GET", params=kwargs) + def _process_response(self, resp): + # TODO: something to expose headers and status + if 200 <= resp.status_code <= 299: 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=None, files=None, **kwargs): - s = self._store["serializer"] + def url(self): + url = self._store["base_url"] + + if self._store["append_slash"] and not url.endswith("/"): + url = url + "/" + + return url + # TODO: refactor these methods - lots of commonality + def get(self, **kwargs): + resp = self._request("GET", params=kwargs) + return self._process_response(resp) + + def options(self, **kwargs): + resp = self._request("OPTIONS", params=kwargs) + return self._process_response(resp) + + def head(self, **kwargs): + resp = self._request("HEAD", params=kwargs) + return self._process_response(resp) + + def post(self, data=None, files=None, **kwargs): resp = self._request("POST", data=data, files=files, 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 + return self._process_response(resp) def patch(self, data=None, files=None, **kwargs): - s = self._store["serializer"] - resp = self._request("PATCH", data=data, files=files, 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 + return self._process_response(resp) def put(self, data=None, files=None, **kwargs): resp = self._request("PUT", data=data, files=files, params=kwargs) - - if 200 <= resp.status_code <= 299: - return self._try_to_serialize_response(resp) - else: - return False + return self._process_response(resp) def delete(self, **kwargs): resp = self._request("DELETE", params=kwargs) @@ -178,15 +184,22 @@ else: return False + def _get_resource(self, **kwargs): + return self.__class__(**kwargs) + class API(ResourceAttributesMixin, object): + resource_class = Resource + def __init__(self, base_url=None, auth=None, format=None, append_slash=True, session=None, serializer=None): if serializer is None: serializer = Serializer(default=format) if session is None: session = requests.session() + + if auth is not None: session.auth = auth self._store = { @@ -200,3 +213,6 @@ # Do some Checks for Required Values if self._store.get("base_url") is None: raise exceptions.ImproperlyConfigured("base_url is required") + + def _get_resource(self, **kwargs): + return self.resource_class(**kwargs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/slumber/exceptions.py new/slumber-0.7.0/slumber/exceptions.py --- old/slumber-0.6.0/slumber/exceptions.py 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/slumber/exceptions.py 2015-04-17 10:54:38.000000000 +0200 @@ -1,3 +1,6 @@ +from .utils import url_join, iterator + + class SlumberBaseException(Exception): """ All Slumber exceptions inherit from this exception. @@ -10,7 +13,7 @@ """ def __init__(self, *args, **kwargs): - for key, value in kwargs.iteritems(): + for key, value in iterator(kwargs): setattr(self, key, value) super(SlumberHttpBaseException, self).__init__(*args) @@ -21,6 +24,12 @@ """ +class HttpNotFoundError(HttpClientError): + """ + Called when the server sends a 404 error. + """ + + class HttpServerError(SlumberHttpBaseException): """ Called when the server tells us there was a server error (5xx). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/slumber/serialize.py new/slumber-0.7.0/slumber/serialize.py --- old/slumber-0.6.0/slumber/serialize.py 2013-04-01 19:27:51.000000000 +0200 +++ new/slumber-0.7.0/slumber/serialize.py 2015-04-17 10:54:38.000000000 +0200 @@ -6,12 +6,9 @@ } try: - import simplejson as json + import json except ImportError: - try: - import json - except ImportError: - _SERIALIZERS["json"] = False + _SERIALIZERS["json"] = False try: import yaml @@ -48,7 +45,7 @@ key = "json" def loads(self, data): - return json.loads(data) + return json.loads(str(data)) def dumps(self, data): return json.dumps(data) @@ -60,7 +57,7 @@ key = "yaml" def loads(self, data): - return yaml.safe_load(data) + return yaml.safe_load(str(data)) def dumps(self, data): return yaml.dump(data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/slumber/utils.py new/slumber-0.7.0/slumber/utils.py --- old/slumber-0.6.0/slumber/utils.py 1970-01-01 01:00:00.000000000 +0100 +++ new/slumber-0.7.0/slumber/utils.py 2015-04-17 10:54:38.000000000 +0200 @@ -0,0 +1,32 @@ +import posixpath + +try: + from urllib.parse import urlsplit, urlunsplit +except ImportError: + from urlparse import urlsplit, urlunsplit + + +def url_join(base, *args): + """ + Helper function to join an arbitrary number of url segments together. + """ + scheme, netloc, path, query, fragment = urlsplit(base) + path = path if len(path) else "/" + path = posixpath.join(path, *[('%s' % x) for x in args]) + return urlunsplit([scheme, netloc, path, query, fragment]) + +def copy_kwargs(dictionary): + kwargs = {} + for key, value in iterator(dictionary): + kwargs[key] = value + + return kwargs + +def iterator(d): + """ + Helper to get and a proper dict iterator with Py2k and Py3k + """ + try: + return d.iteritems() + except AttributeError: + return d.items() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/slumber.egg-info/PKG-INFO new/slumber-0.7.0/slumber.egg-info/PKG-INFO --- old/slumber-0.6.0/slumber.egg-info/PKG-INFO 2013-04-01 20:25:05.000000000 +0200 +++ new/slumber-0.7.0/slumber.egg-info/PKG-INFO 2015-04-17 11:29:41.000000000 +0200 @@ -1,25 +1,25 @@ Metadata-Version: 1.0 Name: slumber -Version: 0.6.0 +Version: 0.7.0 Summary: A library that makes consuming a REST API easier and more convenient -Home-page: http://slumber.in/ -Author: Donald Stufft -Author-email: donald.stu...@gmail.com +Home-page: http://github.com/samgiles/slumber +Author: Samuel Giles +Author-email: sam.e.gi...@gmail.com License: UNKNOWN -Description: Slumber - ======= +Description: Slumber |build-status| |coverage-status| |docs| + =============================================== - Slumber is a python library that provides a convenient yet powerful object - orientated interface to ReSTful APIs. It acts as a wrapper around the - excellent requests_ library and abstracts away the handling of urls, serialization, - and processing requests. + Slumber is a Python library that provides a convenient yet powerful + object-oriented interface to ReSTful APIs. It acts as a wrapper around the + excellent requests_ library and abstracts away the handling of URLs, serialization, + and request processing. .. _requests: http://python-requests.org/ Getting Help ============ - I have an IRC channel (`#slumber on irc.freenode.net`_) to get help, bounce idea + Visit IRC channel (`#slumber on irc.freenode.net`_) to get help, bounce ideas or generally shoot the breeze. .. _#slumber on irc.freenode.net: irc://irc.freenode.net/slumber @@ -31,9 +31,9 @@ $ pip install slumber - 2. Install Optional Requirements:: + 2. Install Optional Requirement:: - pip install simplejson pyyaml + pip install pyyaml 3. Use Slumber! @@ -44,11 +44,17 @@ * Python 2.6+ * requests - * simplejson (If you desire the speedups for JSON serialization) - * pyyaml (If you are using the optional yaml serialization) - - .. _Pip: http://pip.openplans.org/ + * pyyaml (If you are using the optional YAML serialization) + .. |build-status| image:: https://travis-ci.org/samgiles/slumber.svg?branch=master + :target: https://travis-ci.org/samgiles/slumber + :alt: Build status + .. |coverage-status| image:: https://img.shields.io/coveralls/samgiles/slumber.svg + :target: https://coveralls.io/r/samgiles/slumber + :alt: Test coverage percentage + .. |docs| image:: https://readthedocs.org/projects/slumber/badge/?version=latest + :target: http://slumber.readthedocs.org/ + :alt: Documentation .. :changelog: @@ -56,6 +62,23 @@ Changelog ========= + + development version + ------------------- + + 0.6.2 + ----- + + * Further Python 3 compatibility fixes, many thanks to Alexander Shchepetilnikov (irqed) + + 0.6.1 + ----- + + * Remove ``simplejson`` dependency. + + * Support range now Python 2.6 - Python 3.4 + + 0.6.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slumber-0.6.0/slumber.egg-info/SOURCES.txt new/slumber-0.7.0/slumber.egg-info/SOURCES.txt --- old/slumber-0.6.0/slumber.egg-info/SOURCES.txt 2013-04-01 20:25:05.000000000 +0200 +++ new/slumber-0.7.0/slumber.egg-info/SOURCES.txt 2015-04-17 11:29:44.000000000 +0200 @@ -10,6 +10,7 @@ slumber/__init__.py slumber/exceptions.py slumber/serialize.py +slumber/utils.py slumber.egg-info/PKG-INFO slumber.egg-info/SOURCES.txt slumber.egg-info/dependency_links.txt