Hello community, here is the log from the commit of package python-python-daemon for openSUSE:Factory checked in at 2015-09-08 17:39:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-python-daemon (Old) and /work/SRC/openSUSE:Factory/.python-python-daemon.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-daemon" Changes: -------- --- /work/SRC/openSUSE:Factory/python-python-daemon/python-python-daemon.changes 2015-05-27 12:50:08.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-python-daemon.new/python-python-daemon.changes 2015-09-08 17:42:44.000000000 +0200 @@ -1,0 +2,9 @@ +Thu Sep 3 14:17:06 UTC 2015 - toddrme2...@gmail.com + +- Update to 2.0.6 + * Lower dependency for unittest2, we can work with an earlier version. + * Specify development status Production/Stable in Trove classifiers. + * Migrate to mock version 1.3 with corresponding API changes. + * Use current Python concept of basestring to test for an attribute name. + +------------------------------------------------------------------- Old: ---- python-daemon-2.0.5.tar.gz New: ---- python-daemon-2.0.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-python-daemon.spec ++++++ --- /var/tmp/diff_new_pack.ez8x4B/_old 2015-09-08 17:42:45.000000000 +0200 +++ /var/tmp/diff_new_pack.ez8x4B/_new 2015-09-08 17:42:45.000000000 +0200 @@ -17,7 +17,7 @@ Name: python-python-daemon -Version: 2.0.5 +Version: 2.0.6 Release: 0 Url: http://pypi.python.org/pypi/python-daemon/ Summary: Library to implement a well-behaved Unix daemon process ++++++ python-daemon-2.0.5.tar.gz -> python-daemon-2.0.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/ChangeLog new/python-daemon-2.0.6/ChangeLog --- old/python-daemon-2.0.5/ChangeLog 2015-02-02 05:43:28.000000000 +0100 +++ new/python-daemon-2.0.6/ChangeLog 2015-08-30 11:14:42.000000000 +0200 @@ -1,3 +1,16 @@ +Version 2.0.6 +============= + +:Released: 2015-08-30 +:Maintainer: Ben Finney <ben+pyt...@benfinney.id.au> + +* Lower dependency for ‘unittest2’, we can work with an earlier version. +* Specify development status “Production/Stable” in Trove classifiers. +* Migrate to ‘mock’ version 1.3 with corresponding API changes. +* Use current Python concept of “basestring” to test for an attribute name. + Thanks to Arthur de Jong for the bug report. + + Version 2.0.5 ============= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/PKG-INFO new/python-daemon-2.0.6/PKG-INFO --- old/python-daemon-2.0.5/PKG-INFO 2015-02-02 05:44:42.000000000 +0100 +++ new/python-daemon-2.0.6/PKG-INFO 2015-08-30 11:16:48.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: python-daemon -Version: 2.0.5 +Version: 2.0.6 Summary: Library to implement a well-behaved Unix daemon process. Home-page: https://alioth.debian.org/projects/python-daemon/ Author: Ben Finney @@ -29,7 +29,7 @@ documentation for that class for each option. Keywords: daemon,fork,unix Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta +Classifier: Development Status :: 5 - Production/Stable Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 2.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/daemon/daemon.py new/python-daemon-2.0.6/daemon/daemon.py --- old/python-daemon-2.0.5/daemon/daemon.py 2015-02-02 05:43:28.000000000 +0100 +++ new/python-daemon-2.0.6/daemon/daemon.py 2015-08-30 11:10:43.000000000 +0200 @@ -483,7 +483,7 @@ """ if target is None: result = signal.SIG_IGN - elif isinstance(target, unicode): + elif isinstance(target, basestring): name = target result = getattr(self, name) else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/python_daemon.egg-info/PKG-INFO new/python-daemon-2.0.6/python_daemon.egg-info/PKG-INFO --- old/python-daemon-2.0.5/python_daemon.egg-info/PKG-INFO 2015-02-02 05:44:32.000000000 +0100 +++ new/python-daemon-2.0.6/python_daemon.egg-info/PKG-INFO 2015-08-30 11:16:48.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: python-daemon -Version: 2.0.5 +Version: 2.0.6 Summary: Library to implement a well-behaved Unix daemon process. Home-page: https://alioth.debian.org/projects/python-daemon/ Author: Ben Finney @@ -29,7 +29,7 @@ documentation for that class for each option. Keywords: daemon,fork,unix Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta +Classifier: Development Status :: 5 - Production/Stable Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 2.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/python_daemon.egg-info/version_info.json new/python-daemon-2.0.6/python_daemon.egg-info/version_info.json --- old/python-daemon-2.0.5/python_daemon.egg-info/version_info.json 2015-02-02 05:44:33.000000000 +0100 +++ new/python-daemon-2.0.6/python_daemon.egg-info/version_info.json 2015-08-30 11:16:48.000000000 +0200 @@ -1,6 +1,6 @@ { - "release_date": "2015-02-02", - "version": "2.0.5", - "maintainer": "Ben Finney <ben+pyt...@benfinney.id.au>", - "body": "* Refine compatibility of exceptions for file operations.\n* Specify the text encoding when opening the changelog file.\n" + "release_date": "2015-08-30", + "version": "2.0.6", + "maintainer": "Ben Finney <ben+pyt...@benfinney.id.au>", + "body": "* Lower dependency for \u2018unittest2\u2019, we can work with an earlier version.\n* Specify development status \u201cProduction/Stable\u201d in Trove classifiers.\n* Migrate to \u2018mock\u2019 version 1.3 with corresponding API changes.\n* Use current Python concept of \u201cbasestring\u201d to test for an attribute name.\n Thanks to Arthur de Jong for the bug report.\n" } \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/setup.cfg new/python-daemon-2.0.6/setup.cfg --- old/python-daemon-2.0.5/setup.cfg 2015-02-02 05:44:42.000000000 +0100 +++ new/python-daemon-2.0.6/setup.cfg 2015-08-30 11:16:48.000000000 +0200 @@ -4,8 +4,11 @@ [bdist_wheel] universal = true +[upload] +sign = true + [egg_info] -tag_svn_revision = 0 -tag_date = 0 tag_build = +tag_date = 0 +tag_svn_revision = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/setup.py new/python-daemon-2.0.6/setup.py --- old/python-daemon-2.0.5/setup.py 2015-02-02 05:43:28.000000000 +0100 +++ new/python-daemon-2.0.6/setup.py 2015-08-30 11:08:58.000000000 +0200 @@ -66,10 +66,10 @@ ], test_suite="unittest2.collector", tests_require=[ - "unittest2 >=0.6", + "unittest2 >=0.5.1", "testtools", "testscenarios >=0.4", - "mock >=1.0", + "mock >=1.3", "docutils", ], install_requires=[ @@ -88,7 +88,7 @@ long_description=long_description, classifiers=[ # Reference: http://pypi.python.org/pypi?%3Aaction=list_classifiers - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Operating System :: POSIX", "Programming Language :: Python :: 2.7", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/test/scaffold.py new/python-daemon-2.0.6/test/scaffold.py --- old/python-daemon-2.0.5/test/scaffold.py 2015-01-10 12:29:24.000000000 +0100 +++ new/python-daemon-2.0.6/test/scaffold.py 2015-02-22 20:46:58.000000000 +0100 @@ -61,8 +61,8 @@ * 'arg_count': The number of arguments expected by the function. * 'arg_names': A sequence of the argument names, as strings. * 'arg_defaults': A sequence of the default values for the arguments. - * 'va_args': The name bound to remaining positional arguments. - * 'va_kw_args': The name bound to remaining keyword arguments. + * 'var_args': The name bound to remaining positional arguments. + * 'var_kw_args': The name bound to remaining keyword arguments. """ try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/test/test_daemon.py new/python-daemon-2.0.6/test/test_daemon.py --- old/python-daemon-2.0.5/test/test_daemon.py 2015-02-02 05:43:28.000000000 +0100 +++ new/python-daemon-2.0.6/test/test_daemon.py 2015-08-30 11:10:43.000000000 +0200 @@ -744,10 +744,18 @@ result = instance._make_signal_handler(target) self.assertEqual(expected_result, result) - def test_returns_method_for_name(self): - """ Should return method of DaemonContext when name specified. """ + def test_returns_method_for_str_name(self): + """ Should return DaemonContext method for name of type ‘str’. """ instance = self.test_instance - target = 'terminate' + target = str('terminate') + expected_result = instance.terminate + result = instance._make_signal_handler(target) + self.assertEqual(expected_result, result) + + def test_returns_method_for_unicode_name(self): + """ Should return DaemonContext method for name of type ‘unicode’. """ + instance = self.test_instance + target = unicode('terminate') expected_result = instance.terminate result = instance._make_signal_handler(target) self.assertEqual(expected_result, result) @@ -1011,9 +1019,14 @@ """ args = self.test_args + mock_os_module = mock.MagicMock() + mock_os_module.attach_mock(mock_func_os_setuid, "setuid") + mock_os_module.attach_mock(mock_func_os_setgid, "setgid") daemon.daemon.change_process_owner(**args) - mock_func_os_setuid.assert_called() - mock_func_os_setgid.assert_called() + mock_os_module.assert_has_calls([ + mock.call.setgid(mock.ANY), + mock.call.setuid(mock.ANY), + ]) def test_changes_group_id_to_gid( self, @@ -1022,7 +1035,7 @@ args = self.test_args gid = self.test_gid daemon.daemon.change_process_owner(**args) - mock_func_os_setgid.assert_called(gid) + mock_func_os_setgid.assert_called_once_with(gid) def test_changes_user_id_to_uid( self, @@ -1031,7 +1044,7 @@ args = self.test_args uid = self.test_uid daemon.daemon.change_process_owner(**args) - mock_func_os_setuid.assert_called(uid) + mock_func_os_setuid.assert_called_once_with(uid) def test_raises_daemon_error_on_os_error_from_setgid( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/test_version.py new/python-daemon-2.0.6/test_version.py --- old/python-daemon-2.0.5/test_version.py 2015-02-02 05:43:28.000000000 +0100 +++ new/python-daemon-2.0.6/test_version.py 2015-02-03 02:10:54.000000000 +0100 @@ -19,6 +19,7 @@ import io import errno import functools +import contextlib import collections import textwrap import json @@ -249,7 +250,25 @@ self.assertEqual(expected_output, instance.output) -class ChangeLogEntry_TestCase(testtools.TestCase): +class NoOpContextManager: + """ A context manager with no effect. """ + def __enter__(self): pass + def __exit__(self, exc_type, exc_value, traceback): pass + + +class ChangeLogEntry_BaseTestCase( + testscenarios.WithScenarios, testtools.TestCase): + """ Base class for ‘ChangeLogEntry’ test case classes. """ + + def expected_error_context(self): + """ Make a context manager to expect the nominated error. """ + context = NoOpContextManager() + if hasattr(self, 'expected_error'): + context = testtools.ExpectedException(self.expected_error) + return context + + +class ChangeLogEntry_TestCase(ChangeLogEntry_BaseTestCase): """ Test cases for ‘ChangeLogEntry’ class. """ def setUp(self): @@ -269,8 +288,7 @@ self.assertIsNot(instance, None) -class ChangeLogEntry_release_date_TestCase( - testscenarios.WithScenarios, testtools.TestCase): +class ChangeLogEntry_release_date_TestCase(ChangeLogEntry_BaseTestCase): """ Test cases for ‘ChangeLogEntry.release_date’ attribute. """ scenarios = [ @@ -299,17 +317,13 @@ def test_has_expected_release_date(self): """ Should have default `release_date` attribute. """ - if hasattr(self, 'expected_error'): - self.assertRaises( - self.expected_error, - version.ChangeLogEntry, **self.test_args) - else: + with self.expected_error_context(): instance = version.ChangeLogEntry(**self.test_args) + if hasattr(self, 'expected_release_date'): self.assertEqual(self.expected_release_date, instance.release_date) -class ChangeLogEntry_version_TestCase( - testscenarios.WithScenarios, testtools.TestCase): +class ChangeLogEntry_version_TestCase(ChangeLogEntry_BaseTestCase): """ Test cases for ‘ChangeLogEntry.version’ attribute. """ scenarios = [ @@ -322,20 +336,57 @@ 'test_args': {'version': "UNKNOWN"}, 'expected_version': "UNKNOWN", }), + ('next token', { + 'test_args': {'version': "NEXT"}, + 'expected_version': "NEXT", + }), ('0.0', { 'test_args': {'version': "0.0"}, 'expected_version': "0.0", }), + ('1.2.3', { + 'test_args': {'version': "1.2.3"}, + 'expected_version': "1.2.3", + }), + ('1.23.456', { + 'test_args': {'version': "1.23.456"}, + 'expected_version': "1.23.456", + }), + ('1.23.456a5', { + 'test_args': {'version': "1.23.456a5"}, + 'expected_version': "1.23.456a5", + }), + ('123.456.789', { + 'test_args': {'version': "123.456.789"}, + 'expected_version': "123.456.789", + }), + ('non-number', { + 'test_args': {'version': "b0gUs"}, + 'expected_error': ValueError, + }), + ('negative', { + 'test_args': {'version': "-1.0"}, + 'expected_error': ValueError, + }), + ('non-number parts', { + 'test_args': {'version': "1.b0gUs.0"}, + 'expected_error': ValueError, + }), + ('too many parts', { + 'test_args': {'version': "1.2.3.4.5"}, + 'expected_error': ValueError, + }), ] def test_has_expected_version(self): """ Should have default `version` attribute. """ - instance = version.ChangeLogEntry(**self.test_args) - self.assertEqual(self.expected_version, instance.version) + with self.expected_error_context(): + instance = version.ChangeLogEntry(**self.test_args) + if hasattr(self, 'expected_version'): + self.assertEqual(self.expected_version, instance.version) -class ChangeLogEntry_maintainer_TestCase( - testscenarios.WithScenarios, testtools.TestCase): +class ChangeLogEntry_maintainer_TestCase(ChangeLogEntry_BaseTestCase): """ Test cases for ‘ChangeLogEntry.maintainer’ attribute. """ scenarios = [ @@ -355,17 +406,13 @@ def test_has_expected_maintainer(self): """ Should have default `maintainer` attribute. """ - if hasattr(self, 'expected_error'): - self.assertRaises( - self.expected_error, - version.ChangeLogEntry, **self.test_args) - else: + with self.expected_error_context(): instance = version.ChangeLogEntry(**self.test_args) + if hasattr(self, 'expected_maintainer'): self.assertEqual(self.expected_maintainer, instance.maintainer) -class ChangeLogEntry_body_TestCase( - testscenarios.WithScenarios, testtools.TestCase): +class ChangeLogEntry_body_TestCase(ChangeLogEntry_BaseTestCase): """ Test cases for ‘ChangeLogEntry.body’ attribute. """ scenarios = [ @@ -386,7 +433,7 @@ class ChangeLogEntry_as_version_info_entry_TestCase( - testscenarios.WithScenarios, testtools.TestCase): + ChangeLogEntry_BaseTestCase): """ Test cases for ‘ChangeLogEntry.as_version_info_entry’ attribute. """ scenarios = [ @@ -697,15 +744,19 @@ }), ] + def expected_error_context(self): + """ Make a context manager to expect the nominated error. """ + context = NoOpContextManager() + if hasattr(self, 'expected_error'): + context = testtools.ExpectedException(self.expected_error) + return context + def test_returns_expected_version_info(self): """ Should return expected version info mapping. """ infile = StringIO(self.test_input) - if hasattr(self, 'expected_error'): - self.assertRaises( - self.expected_error, - version.changelog_to_version_info_collection, infile) - else: + with self.expected_error_context(): result = version.changelog_to_version_info_collection(infile) + if hasattr(self, 'expected_version_info'): self.assertThat(result, JsonEqual(self.expected_version_info)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-daemon-2.0.5/version.py new/python-daemon-2.0.6/version.py --- old/python-daemon-2.0.5/version.py 2015-02-02 05:43:28.000000000 +0100 +++ new/python-daemon-2.0.6/version.py 2015-02-06 01:57:57.000000000 +0100 @@ -42,6 +42,7 @@ import distutils import distutils.errors import distutils.cmd +import distutils.version try: # Python 2 has both ‘str’ (bytes) and ‘unicode’ (text). basestring = basestring @@ -143,6 +144,7 @@ self.validate_release_date(release_date) self.release_date = release_date + self.validate_version(version) self.version = version self.validate_maintainer(maintainer) @@ -166,6 +168,25 @@ datetime.datetime.strptime(value, ChangeLogEntry.date_format) @classmethod + def validate_version(cls, value): + """ Validate the `version` value. + + :param vaue: The prospective `version` value. + :return: ``None`` if the value is valid. + :raises ValueError: If the value is invalid. + + """ + if value in ["UNKNOWN", "NEXT"]: + # A valid non-version value. + return None + + match = distutils.version.StrictVersion.version_re.match(value) + if match is None: + raise ValueError( + "not a valid version string {value!r}".format( + value=value)) + + @classmethod def validate_maintainer(cls, value): """ Validate the `maintainer` value. @@ -182,7 +203,9 @@ valid = True if not valid: - raise ValueError("Not a valid person specification {value!r}") + raise ValueError( + "not a valid person specification {value!r}".format( + value=value)) else: return None