Hello community,

here is the log from the commit of package python-amqp for openSUSE:Factory 
checked in at 2015-10-19 22:48:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-amqp (Old)
 and      /work/SRC/openSUSE:Factory/.python-amqp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-amqp"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-amqp/python-amqp.changes  2015-08-11 
08:26:51.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-amqp.new/python-amqp.changes     
2015-10-19 22:48:42.000000000 +0200
@@ -1,0 +2,17 @@
+Mon Oct  5 13:43:48 UTC 2015 - mci...@suse.cz
+
+- Add uniittest2 to BuildRequires for Python 2.6
+
+-------------------------------------------------------------------
+Sun Oct  4 09:50:25 UTC 2015 - tbecht...@suse.com
+
+- update to 1.4.7:
+  * Fixed libSystem error on OS X 10.11 (El Capitan)
+  * ``channel.basic_publish`` now raises :exc:`amqp.exceptions.NotConfirmed` on
+    ``basic.nack``.
+  * AMQP timestamps received are now converted from GMT instead of local time
+    (Issue #67).
+  * Wheel package installation now supported by both Python 2 and Python3.
+- Add python-mock as BuildRequires. Needed for tests
+
+-------------------------------------------------------------------

Old:
----
  amqp-1.4.6.tar.gz

New:
----
  amqp-1.4.7.tar.gz

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

Other differences:
------------------
++++++ python-amqp.spec ++++++
--- /var/tmp/diff_new_pack.eXrXRm/_old  2015-10-19 22:48:42.000000000 +0200
+++ /var/tmp/diff_new_pack.eXrXRm/_new  2015-10-19 22:48:42.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-amqp
-Version:        1.4.6
+Version:        1.4.7
 Release:        0
 Summary:        Low-level AMQP client for Python (fork of amqplib)
 License:        LGPL-2.1+
@@ -32,7 +32,11 @@
 # Documentation requirements:
 BuildRequires:  python-Sphinx
 # Test requirements:
+BuildRequires:  python-mock
 BuildRequires:  python-nose
+%if 0%{?suse_version} && 0%{?suse_version} <= 1110
+BuildRequires:  python-unittest2
+%endif
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %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()")}

++++++ amqp-1.4.6.tar.gz -> amqp-1.4.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/Changelog new/amqp-1.4.7/Changelog
--- old/amqp-1.4.6/Changelog    2014-08-11 19:00:17.000000000 +0200
+++ new/amqp-1.4.7/Changelog    2015-10-03 02:31:01.000000000 +0200
@@ -5,6 +5,27 @@
 The previous amqplib changelog is here:
 http://code.google.com/p/py-amqplib/source/browse/CHANGES
 
+.. _version-1.4.7:
+
+1.4.7
+=====
+:release-date: 2015-10-02 05:30 P.M PDT
+:release-by: Ask Solem
+
+- Fixed libSystem error on OS X 10.11 (El Capitan)
+
+    Fix contributed by Eric Wang.
+
+- ``channel.basic_publish`` now raises :exc:`amqp.exceptions.NotConfirmed` on
+    ``basic.nack``.
+
+- AMQP timestamps received are now converted from GMT instead of local time
+    (Issue #67).
+
+- Wheel package installation now supported by both Python 2 and Python3.
+
+    Fix contributed by Rémy Greinhofer.
+
 .. _version-1.4.6:
 
 1.4.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/PKG-INFO new/amqp-1.4.7/PKG-INFO
--- old/amqp-1.4.6/PKG-INFO     2014-08-11 19:02:54.000000000 +0200
+++ new/amqp-1.4.7/PKG-INFO     2015-10-03 02:33:44.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: amqp
-Version: 1.4.6
+Version: 1.4.7
 Summary: Low-level AMQP client for Python (fork of amqplib)
 Home-page: http://github.com/celery/py-amqp
 Author: Ask Solem
@@ -10,7 +10,7 @@
          Python AMQP 0.9.1 client library
         =====================================================================
         
-        :Version: 1.4.6
+        :Version: 1.4.7
         :Web: http://amqp.readthedocs.org/
         :Download: http://pypi.python.org/pypi/amqp/
         :Source: http://github.com/celery/py-amqp/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/README.rst new/amqp-1.4.7/README.rst
--- old/amqp-1.4.6/README.rst   2014-08-11 19:00:36.000000000 +0200
+++ new/amqp-1.4.7/README.rst   2015-10-03 00:02:20.000000000 +0200
@@ -2,7 +2,7 @@
  Python AMQP 0.9.1 client library
 =====================================================================
 
-:Version: 1.4.6
+:Version: 1.4.7
 :Web: http://amqp.readthedocs.org/
 :Download: http://pypi.python.org/pypi/amqp/
 :Source: http://github.com/celery/py-amqp/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/__init__.py 
new/amqp-1.4.7/amqp/__init__.py
--- old/amqp-1.4.6/amqp/__init__.py     2014-08-11 19:00:30.000000000 +0200
+++ new/amqp-1.4.7/amqp/__init__.py     2015-10-03 00:02:20.000000000 +0200
@@ -16,7 +16,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
 from __future__ import absolute_import
 
-VERSION = (1, 4, 6)
+VERSION = (1, 4, 7)
 __version__ = '.'.join(map(str, VERSION[0:3])) + ''.join(VERSION[3:])
 __author__ = 'Barry Pederson'
 __maintainer__ = 'Ask Solem'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/channel.py 
new/amqp-1.4.7/amqp/channel.py
--- old/amqp-1.4.6/amqp/channel.py      2014-08-11 18:56:50.000000000 +0200
+++ new/amqp-1.4.7/amqp/channel.py      2015-10-03 00:06:13.000000000 +0200
@@ -22,7 +22,9 @@
 from warnings import warn
 
 from .abstract_channel import AbstractChannel
-from .exceptions import ChannelError, ConsumerCancelled, error_for_code
+from .exceptions import (
+    ChannelError, ConsumerCancelled, NotConfirmed, error_for_code,
+)
 from .five import Queue
 from .protocol import basic_return_t, queue_declare_ok_t
 from .serialization import AMQPWriter
@@ -1069,7 +1071,6 @@
         args.write_shortstr(queue)
         args.write_shortstr(exchange)
         args.write_shortstr(routing_key)
-        #args.write_bit(nowait)
         args.write_table(arguments)
         self._send_method((50, 50), args)
 
@@ -2127,7 +2128,8 @@
             self._confirm_selected = True
             self.confirm_select()
         ret = self._basic_publish(*args, **kwargs)
-        self.wait([(60, 80)])
+        # Basic.Ack / Basic.Nack
+        self.wait([(60, 80), (60, 120)])
         return ret
 
     def basic_qos(self, prefetch_size, prefetch_count, a_global):
@@ -2498,8 +2500,18 @@
     def _basic_ack_recv(self, args):
         delivery_tag = args.read_longlong()
         multiple = args.read_bit()
-        for callback in self.events['basic_ack']:
-            callback(delivery_tag, multiple)
+        self._apply_callbacks('basic_ack', delivery_tag, multiple)
+
+    def _apply_callbacks(self, event, *args):
+        return [callback(*args) for callback in self.events[event]]
+
+    def _basic_nack(self, args):
+        delivery_tag = args.read_longlong()
+        multiple = args.read_bit()
+        requeue = args.read_bit()
+        if not self._apply_callbacks(
+                'basic_nack', delivery_tag, multiple, requeue):
+            raise NotConfirmed(delivery_tag, (60, 120), 'basic.nack')
 
     _METHOD_MAP = {
         (20, 11): _open_ok,
@@ -2525,6 +2537,7 @@
         (60, 71): _basic_get_ok,
         (60, 72): _basic_get_empty,
         (60, 80): _basic_ack_recv,
+        (60, 120): _basic_nack,
         (60, 111): _basic_recover_ok,
         (85, 11): _confirm_select_ok,
         (90, 11): _tx_select_ok,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/connection.py 
new/amqp-1.4.7/amqp/connection.py
--- old/amqp-1.4.6/amqp/connection.py   2014-08-11 18:56:50.000000000 +0200
+++ new/amqp-1.4.7/amqp/connection.py   2015-10-03 00:05:01.000000000 +0200
@@ -127,8 +127,8 @@
                 and (password is not None):
             login_response = AMQPWriter()
             login_response.write_table({'LOGIN': userid, 'PASSWORD': password})
-            login_response = login_response.getvalue()[4:]  # Skip the length
-                                                            # at the beginning
+            # Skip the length at the beginning
+            login_response = login_response.getvalue()[4:]
 
         d = dict(LIBRARY_PROPERTIES, **client_properties or {})
         self._method_override = {(60, 50): self._dispatch_basic_return}
@@ -338,7 +338,7 @@
                 # http://bugs.python.org/issue10272
                 if 'timed out' in str(exc):
                     raise socket.timeout()
-               # Non-blocking SSL sockets can throw SSLError
+                # Non-blocking SSL sockets can throw SSLError
                 if 'The operation did not complete' in str(exc):
                     raise socket.timeout()
                 raise
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/exceptions.py 
new/amqp-1.4.7/amqp/exceptions.py
--- old/amqp-1.4.6/amqp/exceptions.py   2014-07-24 17:52:53.000000000 +0200
+++ new/amqp-1.4.7/amqp/exceptions.py   2015-10-03 00:05:01.000000000 +0200
@@ -27,7 +27,7 @@
     'ConnectionForced', 'InvalidPath', 'AccessRefused', 'NotFound',
     'ResourceLocked', 'PreconditionFailed', 'FrameError', 'FrameSyntaxError',
     'InvalidCommand', 'ChannelNotOpen', 'UnexpectedFrame', 'ResourceError',
-    'NotAllowed', 'AMQPNotImplementedError', 'InternalError',
+    'NotConfirmed', 'NotAllowed', 'AMQPNotImplementedError', 'InternalError',
 ]
 
 
@@ -112,6 +112,10 @@
     code = 404
 
 
+class NotConfirmed(RecoverableConnectionError):
+    pass
+
+
 class ResourceLocked(RecoverableChannelError):
     code = 405
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/five.py new/amqp-1.4.7/amqp/five.py
--- old/amqp-1.4.6/amqp/five.py 2014-08-11 18:56:50.000000000 +0200
+++ new/amqp-1.4.7/amqp/five.py 2015-10-03 00:02:20.000000000 +0200
@@ -10,7 +10,7 @@
 """
 from __future__ import absolute_import
 
-############## py3k #########################################################
+# ############# py3k #########################################################
 import sys
 PY3 = sys.version_info[0] == 3
 
@@ -132,7 +132,7 @@
 
     return _clone_with_metaclass
 
-############## time.monotonic ################################################
+# ############# time.monotonic ################################################
 
 if sys.version_info < (3, 3):
 
@@ -142,7 +142,7 @@
     if SYSTEM == 'Darwin':
         import ctypes
         from ctypes.util import find_library
-        libSystem = ctypes.CDLL('libSystem.dylib')
+        libSystem = ctypes.CDLL(find_library('libSystem.dylib'))
         CoreServices = ctypes.CDLL(find_library('CoreServices'),
                                    use_errno=True)
         mach_absolute_time = libSystem.mach_absolute_time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/serialization.py 
new/amqp-1.4.7/amqp/serialization.py
--- old/amqp-1.4.6/amqp/serialization.py        2014-08-11 18:56:50.000000000 
+0200
+++ new/amqp-1.4.7/amqp/serialization.py        2015-10-03 00:02:20.000000000 
+0200
@@ -21,13 +21,13 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
 from __future__ import absolute_import
 
+import calendar
 import sys
 
 from datetime import datetime
 from decimal import Decimal
 from io import BytesIO
 from struct import pack, unpack
-from time import mktime
 
 from .exceptions import FrameSyntaxError
 from .five import int_types, long_t, string, string_t, items
@@ -224,7 +224,7 @@
         expressed as localtime.
 
         """
-        return datetime.fromtimestamp(self.read_longlong())
+        return datetime.utcfromtimestamp(self.read_longlong())
 
 
 class AMQPWriter(object):
@@ -377,7 +377,6 @@
         elif isinstance(v, datetime):
             self.write(b'T')
             self.write_timestamp(v)
-            ## FIXME: timezone ?
         elif isinstance(v, dict):
             self.write(b'F')
             self.write_table(v)
@@ -402,7 +401,7 @@
     def write_timestamp(self, v):
         """Write out a Python datetime.datetime object as a 64-bit integer
         representing seconds since the Unix epoch."""
-        self.out.write(pack('>q', long_t(mktime(v.timetuple()))))
+        self.out.write(pack('>Q', long_t(calendar.timegm(v.utctimetuple()))))
 
 
 class GenericContent(object):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/tests/case.py 
new/amqp-1.4.7/amqp/tests/case.py
--- old/amqp-1.4.6/amqp/tests/case.py   1970-01-01 01:00:00.000000000 +0100
+++ new/amqp-1.4.7/amqp/tests/case.py   2015-10-03 00:02:20.000000000 +0200
@@ -0,0 +1,85 @@
+from __future__ import absolute_import
+
+import sys
+
+from functools import wraps
+from io import StringIO
+
+import mock
+
+from nose import SkipTest  # noqa
+
+try:
+    import unittest
+    unittest.skip
+except AttributeError:
+    import unittest2 as unittest  # noqa
+
+PY3 = sys.version_info[0] == 3
+
+patch = mock.patch
+call = mock.call
+
+
+class Case(unittest.TestCase):
+
+    def assertItemsEqual(self, a, b, *args, **kwargs):
+        return self.assertEqual(sorted(a), sorted(b), *args, **kwargs)
+    assertSameElements = assertItemsEqual
+
+
+class Mock(mock.Mock):
+
+    def __init__(self, *args, **kwargs):
+        attrs = kwargs.pop('attrs', None) or {}
+        super(Mock, self).__init__(*args, **kwargs)
+        for attr_name, attr_value in attrs.items():
+            setattr(self, attr_name, attr_value)
+
+
+class _ContextMock(Mock):
+    """Dummy class implementing __enter__ and __exit__
+    as the with statement requires these to be implemented
+    in the class, not just the instance."""
+
+    def __enter__(self):
+        pass
+
+    def __exit__(self, *exc_info):
+        pass
+
+
+def ContextMock(*args, **kwargs):
+    obj = _ContextMock(*args, **kwargs)
+    obj.attach_mock(Mock(), '__enter__')
+    obj.attach_mock(Mock(), '__exit__')
+    obj.__enter__.return_value = obj
+    # if __exit__ return a value the exception is ignored,
+    # so it must return None here.
+    obj.__exit__.return_value = None
+    return obj
+
+
+class MockPool(object):
+
+    def __init__(self, value=None):
+        self.value = value or ContextMock()
+
+    def acquire(self, **kwargs):
+        return self.value
+
+
+def redirect_stdouts(fun):
+
+    @wraps(fun)
+    def _inner(*args, **kwargs):
+        sys.stdout = StringIO()
+        sys.stderr = StringIO()
+        try:
+            return fun(*args, **dict(kwargs,
+                                     stdout=sys.stdout, stderr=sys.stderr))
+        finally:
+            sys.stdout = sys.__stdout__
+            sys.stderr = sys.__stderr__
+
+    return _inner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp/tests/test_channel.py 
new/amqp-1.4.7/amqp/tests/test_channel.py
--- old/amqp-1.4.6/amqp/tests/test_channel.py   1970-01-01 01:00:00.000000000 
+0100
+++ new/amqp-1.4.7/amqp/tests/test_channel.py   2015-10-03 00:02:20.000000000 
+0200
@@ -0,0 +1,35 @@
+from __future__ import absolute_import
+
+from collections import defaultdict
+
+from amqp.channel import Channel
+from amqp.exceptions import NotConfirmed
+from amqp.serialization import AMQPWriter, AMQPReader
+
+from amqp.tests.case import Case, Mock
+
+
+class NoOpenChannel(Channel):
+
+    def _x_open(self):
+        pass
+
+
+class test_Channel(Case):
+
+    def setUp(self):
+        self.args = AMQPWriter()
+        self.connection = Mock(name='connection')
+        self.connection.channels = defaultdict(lambda: None)
+        self.channel = NoOpenChannel(self.connection, channel_id=1)
+
+    def test_basic_nack(self, delivery_tag=3172312312):
+        self.args.write_longlong(delivery_tag)
+        self.args.write_bit(0)
+        self.args.write_bit(0)
+        with self.assertRaises(NotConfirmed):
+            self.channel._basic_nack(AMQPReader(self.args.getvalue()))
+        callback = Mock(name='callback')
+        self.channel.events['basic_nack'].add(callback)
+        self.channel._basic_nack(AMQPReader(self.args.getvalue()))
+        callback.assert_called_with(delivery_tag, False, False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp.egg-info/PKG-INFO 
new/amqp-1.4.7/amqp.egg-info/PKG-INFO
--- old/amqp-1.4.6/amqp.egg-info/PKG-INFO       2014-08-11 19:02:37.000000000 
+0200
+++ new/amqp-1.4.7/amqp.egg-info/PKG-INFO       2015-10-03 02:33:39.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: amqp
-Version: 1.4.6
+Version: 1.4.7
 Summary: Low-level AMQP client for Python (fork of amqplib)
 Home-page: http://github.com/celery/py-amqp
 Author: Ask Solem
@@ -10,7 +10,7 @@
          Python AMQP 0.9.1 client library
         =====================================================================
         
-        :Version: 1.4.6
+        :Version: 1.4.7
         :Web: http://amqp.readthedocs.org/
         :Download: http://pypi.python.org/pypi/amqp/
         :Source: http://github.com/celery/py-amqp/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/amqp.egg-info/SOURCES.txt 
new/amqp-1.4.7/amqp.egg-info/SOURCES.txt
--- old/amqp-1.4.6/amqp.egg-info/SOURCES.txt    2014-08-11 19:02:38.000000000 
+0200
+++ new/amqp-1.4.7/amqp.egg-info/SOURCES.txt    2015-10-03 02:33:39.000000000 
+0200
@@ -2,6 +2,7 @@
 LICENSE
 MANIFEST.in
 README.rst
+setup.cfg
 setup.py
 amqp/__init__.py
 amqp/abstract_channel.py
@@ -20,6 +21,9 @@
 amqp.egg-info/dependency_links.txt
 amqp.egg-info/not-zip-safe
 amqp.egg-info/top_level.txt
+amqp/tests/__init__.py
+amqp/tests/case.py
+amqp/tests/test_channel.py
 demo/amqp_clock.py
 demo/demo_receive.py
 demo/demo_send.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/docs/changelog.rst 
new/amqp-1.4.7/docs/changelog.rst
--- old/amqp-1.4.6/docs/changelog.rst   2014-08-11 19:00:17.000000000 +0200
+++ new/amqp-1.4.7/docs/changelog.rst   2015-10-03 02:31:01.000000000 +0200
@@ -5,6 +5,27 @@
 The previous amqplib changelog is here:
 http://code.google.com/p/py-amqplib/source/browse/CHANGES
 
+.. _version-1.4.7:
+
+1.4.7
+=====
+:release-date: 2015-10-02 05:30 P.M PDT
+:release-by: Ask Solem
+
+- Fixed libSystem error on OS X 10.11 (El Capitan)
+
+    Fix contributed by Eric Wang.
+
+- ``channel.basic_publish`` now raises :exc:`amqp.exceptions.NotConfirmed` on
+    ``basic.nack``.
+
+- AMQP timestamps received are now converted from GMT instead of local time
+    (Issue #67).
+
+- Wheel package installation now supported by both Python 2 and Python3.
+
+    Fix contributed by Rémy Greinhofer.
+
 .. _version-1.4.6:
 
 1.4.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/amqp-1.4.6/setup.cfg new/amqp-1.4.7/setup.cfg
--- old/amqp-1.4.6/setup.cfg    2014-08-11 19:02:54.000000000 +0200
+++ new/amqp-1.4.7/setup.cfg    2015-10-03 02:33:44.000000000 +0200
@@ -1,3 +1,9 @@
+[nosetests]
+where = amqp/tests
+
+[bdist_wheel]
+universal = 1
+
 [egg_info]
 tag_build = 
 tag_date = 0


Reply via email to