Hello community,
here is the log from the commit of package python3-logilab-common for
openSUSE:Factory checked in at 2016-05-30 09:58:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-logilab-common (Old)
and /work/SRC/openSUSE:Factory/.python3-logilab-common.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-logilab-common"
Changes:
--------
---
/work/SRC/openSUSE:Factory/python3-logilab-common/python3-logilab-common.changes
2016-05-25 21:24:44.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python3-logilab-common.new/python3-logilab-common.changes
2016-05-30 09:58:50.000000000 +0200
@@ -1,0 +2,14 @@
+Sun May 29 04:24:46 UTC 2016 - [email protected]
+
+- update to version 1.2.1:
+ * [test] noop instead of skip test_utcdatetime for mxDateTime
+ * [pkg] add egenix-mx-base in test requirements
+ * [pkg] add a requirements-test.txt
+ * [pep8] changelog.py
+ * [pep8] test/unittest_changelog
+ * [changelog] ensure ChangeLogEntry write unicode (closes #6213577)
+ * [registry] Stop using load_module_from_name
+ * Fix regression with datetime2ticks vs date object as argument
+ * [spec] Only require python-egenix-mx-base on EL6
+
+-------------------------------------------------------------------
@@ -6 +19,0 @@
-
Old:
----
logilab-common-1.2.0.tar.gz
New:
----
logilab-common-1.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-logilab-common.spec ++++++
--- /var/tmp/diff_new_pack.hvQaRW/_old 2016-05-30 09:58:51.000000000 +0200
+++ /var/tmp/diff_new_pack.hvQaRW/_new 2016-05-30 09:58:51.000000000 +0200
@@ -17,7 +17,7 @@
Name: python3-logilab-common
-Version: 1.2.0
+Version: 1.2.1
Release: 0
Url: http://www.logilab.org/projects/common/
Summary: Python lowlevel functionality shared by logilab projects
++++++ logilab-common-1.2.0.tar.gz -> logilab-common-1.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/PKG-INFO
new/logilab-common-1.2.1/PKG-INFO
--- old/logilab-common-1.2.0/PKG-INFO 2016-03-15 10:38:06.000000000 +0100
+++ new/logilab-common-1.2.1/PKG-INFO 2016-05-27 15:27:30.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: logilab-common
-Version: 1.2.0
+Version: 1.2.1
Summary: collection of low-level Python packages and modules used by Logilab
projects
Home-page: http://www.logilab.org/project/logilab-common
Author: Logilab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/__pkginfo__.py
new/logilab-common-1.2.1/__pkginfo__.py
--- old/logilab-common-1.2.0/__pkginfo__.py 2016-03-15 10:24:29.000000000
+0100
+++ new/logilab-common-1.2.1/__pkginfo__.py 2016-05-27 15:12:20.000000000
+0200
@@ -25,7 +25,7 @@
subpackage_of = 'logilab'
subpackage_master = True
-numversion = (1, 2, 0)
+numversion = (1, 2, 1)
version = '.'.join([str(num) for num in numversion])
license = 'LGPL' # 2.1 or later
@@ -41,10 +41,13 @@
include_dirs = [join('test', 'data')]
install_requires = [
- 'setuptools',
- 'six >= 1.4.0',
- ]
-tests_require = ['pytz']
+ 'setuptools',
+ 'six >= 1.4.0',
+]
+tests_require = [
+ 'pytz',
+ 'egenix-mx-base',
+]
if sys.version_info < (2, 7):
install_requires.append('unittest2 >= 0.5.1')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/logilab/common/changelog.py
new/logilab-common-1.2.1/logilab/common/changelog.py
--- old/logilab-common-1.2.0/logilab/common/changelog.py 2016-03-15
10:24:29.000000000 +0100
+++ new/logilab-common-1.2.1/logilab/common/changelog.py 2016-05-27
15:12:20.000000000 +0200
@@ -3,18 +3,18 @@
#
# This file is part of logilab-common.
#
-# logilab-common is free software: you can redistribute it and/or modify it
under
+# logilab-common is free software: you can redistribute it or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation, either version 2.1 of the License, or (at your option)
any
-# later version.
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
#
# logilab-common is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
-# You should have received a copy of the GNU Lesser General Public License
along
-# with logilab-common. If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with logilab-common. If not, see <http://www.gnu.org/licenses/>.
"""Manipulation of upstream change log files.
The upstream change log files format handled is simpler than the one
@@ -48,6 +48,7 @@
import sys
from stat import S_IWRITE
+import codecs
from six import string_types
@@ -55,19 +56,22 @@
SUBBULLET = '-'
INDENT = ' ' * 4
+
class NoEntry(Exception):
"""raised when we are unable to find an entry"""
+
class EntryNotFound(Exception):
"""raised when we are unable to find a given entry"""
+
class Version(tuple):
"""simple class to handle soft version number has a tuple while
correctly printing it as X.Y.Z
"""
def __new__(cls, versionstr):
if isinstance(versionstr, string_types):
- versionstr = versionstr.strip(' :') # XXX (syt) duh?
+ versionstr = versionstr.strip(' :') # XXX (syt) duh?
parsed = cls.parse(versionstr)
else:
parsed = versionstr
@@ -79,11 +83,13 @@
try:
return [int(i) for i in versionstr.split('.')]
except ValueError as ex:
- raise ValueError("invalid literal for version '%s'
(%s)"%(versionstr, ex))
+ raise ValueError("invalid literal for version '%s' (%s)" %
+ (versionstr, ex))
def __str__(self):
return '.'.join([str(i) for i in self])
+
# upstream change log #########################################################
class ChangeLogEntry(object):
@@ -109,44 +115,50 @@
"""complete the latest added message
"""
if not self.messages:
- raise ValueError('unable to complete last message as there is no
previous message)')
- if self.messages[-1][1]: # sub messages
+ raise ValueError('unable to complete last message as '
+ 'there is no previous message)')
+ if self.messages[-1][1]: # sub messages
self.messages[-1][1][-1].append(msg_suite)
- else: # message
+ else: # message
self.messages[-1][0].append(msg_suite)
def add_sub_message(self, sub_msg, key=None):
if not self.messages:
- raise ValueError('unable to complete last message as there is no
previous message)')
+ raise ValueError('unable to complete last message as '
+ 'there is no previous message)')
if key is None:
self.messages[-1][1].append([sub_msg])
else:
- raise NotImplementedError("sub message to specific key are not
implemented yet")
+ raise NotImplementedError('sub message to specific key '
+ 'are not implemented yet')
def write(self, stream=sys.stdout):
"""write the entry to file """
- stream.write('%s -- %s\n' % (self.date or '', self.version or ''))
+ stream.write(u'%s -- %s\n' % (self.date or '', self.version or ''))
for msg, sub_msgs in self.messages:
- stream.write('%s%s %s\n' % (INDENT, BULLET, msg[0]))
- stream.write(''.join(msg[1:]))
+ stream.write(u'%s%s %s\n' % (INDENT, BULLET, msg[0]))
+ stream.write(u''.join(msg[1:]))
if sub_msgs:
- stream.write('\n')
+ stream.write(u'\n')
for sub_msg in sub_msgs:
- stream.write('%s%s %s\n' % (INDENT * 2, SUBBULLET, sub_msg[0]))
- stream.write(''.join(sub_msg[1:]))
- stream.write('\n')
+ stream.write(u'%s%s %s\n' %
+ (INDENT * 2, SUBBULLET, sub_msg[0]))
+ stream.write(u''.join(sub_msg[1:]))
+ stream.write(u'\n')
+
+ stream.write(u'\n\n')
- stream.write('\n\n')
class ChangeLog(object):
"""object representation of a whole ChangeLog file"""
entry_class = ChangeLogEntry
- def __init__(self, changelog_file, title=''):
+ def __init__(self, changelog_file, title=u''):
self.file = changelog_file
+ assert isinstance(title, type(u'')), 'title must be a unicode object'
self.title = title
- self.additional_content = ''
+ self.additional_content = u''
self.entries = []
self.load()
@@ -184,12 +196,12 @@
def load(self):
""" read a logilab's ChangeLog from file """
try:
- stream = open(self.file)
+ stream = codecs.open(self.file, encoding='utf-8')
except IOError:
return
last = None
expect_sub = False
- for line in stream.readlines():
+ for line in stream:
sline = line.strip()
words = sline.split()
# if new entry
@@ -221,18 +233,17 @@
stream.close()
def format_title(self):
- return '%s\n\n' % self.title.strip()
+ return u'%s\n\n' % self.title.strip()
def save(self):
"""write back change log"""
# filetutils isn't importable in appengine, so import locally
from logilab.common.fileutils import ensure_fs_mode
ensure_fs_mode(self.file, S_IWRITE)
- self.write(open(self.file, 'w'))
+ self.write(codecs.open(self.file, 'w', encoding='utf-8'))
def write(self, stream=sys.stdout):
"""write changelog to stream"""
stream.write(self.format_title())
for entry in self.entries:
entry.write(stream)
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/logilab/common/date.py
new/logilab-common-1.2.1/logilab/common/date.py
--- old/logilab-common-1.2.0/logilab/common/date.py 2016-03-15
10:24:29.000000000 +0100
+++ new/logilab-common-1.2.1/logilab/common/date.py 2016-05-27
15:12:20.000000000 +0200
@@ -237,7 +237,7 @@
return datetime(somedate.year, somedate.month, somedate.day)
def datetime2ticks(somedate):
- return timegm(somedate.timetuple()) * 1000 + int(somedate.microsecond /
1000)
+ return timegm(somedate.timetuple()) * 1000 + int(getattr(somedate,
'microsecond', 0) / 1000)
def ticks2datetime(ticks):
miliseconds, microseconds = divmod(ticks, 1000)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/logilab/common/registry.py
new/logilab-common-1.2.1/logilab/common/registry.py
--- old/logilab-common-1.2.0/logilab/common/registry.py 2016-03-15
10:24:29.000000000 +0100
+++ new/logilab-common-1.2.1/logilab/common/registry.py 2016-05-27
15:12:20.000000000 +0200
@@ -720,7 +720,6 @@
def load_file(self, filepath, modname):
""" load registrable objects (if any) from a python file """
- from logilab.common.modutils import load_module_from_name
if modname in self._loadedmods:
return
self._loadedmods[modname] = {}
@@ -735,7 +734,7 @@
# module
self._lastmodifs[filepath] = mdate
# load the module
- module = load_module_from_name(modname)
+ module = __import__(modname, fromlist=modname.split('.')[:-1])
self.load_module(module)
def load_module(self, module):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/logilab-common-1.2.0/logilab_common.egg-info/PKG-INFO
new/logilab-common-1.2.1/logilab_common.egg-info/PKG-INFO
--- old/logilab-common-1.2.0/logilab_common.egg-info/PKG-INFO 2016-03-15
10:37:37.000000000 +0100
+++ new/logilab-common-1.2.1/logilab_common.egg-info/PKG-INFO 2016-05-27
15:27:25.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: logilab-common
-Version: 1.2.0
+Version: 1.2.1
Summary: collection of low-level Python packages and modules used by Logilab
projects
Home-page: http://www.logilab.org/project/logilab-common
Author: Logilab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/test/unittest_changelog.py
new/logilab-common-1.2.1/test/unittest_changelog.py
--- old/logilab-common-1.2.0/test/unittest_changelog.py 2016-03-15
10:24:29.000000000 +0100
+++ new/logilab-common-1.2.1/test/unittest_changelog.py 2016-05-27
15:12:20.000000000 +0200
@@ -1,28 +1,29 @@
-# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:[email protected]
#
# This file is part of logilab-common.
#
-# logilab-common is free software: you can redistribute it and/or modify it
under
+# logilab-common is free software: you can redistribute it or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation, either version 2.1 of the License, or (at your option)
any
-# later version.
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
#
# logilab-common is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
-# You should have received a copy of the GNU Lesser General Public License
along
-# with logilab-common. If not, see <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with logilab-common. If not, see <http://www.gnu.org/licenses/>.
from os.path import join, dirname
-from logilab.common.compat import StringIO
+from io import StringIO
from logilab.common.testlib import TestCase, unittest_main
from logilab.common.changelog import ChangeLog
+
class ChangeLogTC(TestCase):
cl_class = ChangeLog
cl_file = join(dirname(__file__), 'data', 'ChangeLog')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/logilab-common-1.2.0/test/unittest_date.py
new/logilab-common-1.2.1/test/unittest_date.py
--- old/logilab-common-1.2.0/test/unittest_date.py 2016-03-15
10:24:29.000000000 +0100
+++ new/logilab-common-1.2.1/test/unittest_date.py 2016-05-27
15:12:20.000000000 +0200
@@ -149,7 +149,7 @@
def test_utcdatetime(self):
if self.datetimecls is mxDateTime:
- raise self.skipTest('standard datetime only test')
+ return
d = self.datetimecls(2014, 11, 26, 12, 0, 0, 57, tzinfo=pytz.utc)
d = utcdatetime(d)
self.assertEqual(d, self.datetimecls(2014, 11, 26, 12, 0, 0, 57))
@@ -174,6 +174,11 @@
d = d.replace(microsecond=123456)
self.assertEqual(datetime2ticks(d), timestamp * 1000 + 123)
+ def test_datetime2ticks_date_argument(self):
+ d = date(2014, 11, 26)
+ timestamp = timegm(d.timetuple())
+ self.assertEqual(datetime2ticks(d), timestamp * 1000)
+
class MxDateTC(DateTC):
datecls = mxDate