summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Douard <david.douard@logilab.fr>2016-01-12 16:22:18 +0100
committerDavid Douard <david.douard@logilab.fr>2016-01-12 16:22:18 +0100
commit505c54164034d3cb29fc857504bbcaba1866428a (patch)
treeca89c052c5f987bfea05653c4243cca3a2ab13c0
parent5aa2744acaaee10eb9f3f72b8140f43791fd8924 (diff)
downloadlogilab-common-505c54164034d3cb29fc857504bbcaba1866428a.tar.gz
[changelog] ensure ChangeLogEntry write unicode (closes #6213577)
also use io.StingIO in unittest_changelog
-rw-r--r--logilab/common/changelog.py30
-rw-r--r--test/unittest_changelog.py2
2 files changed, 17 insertions, 15 deletions
diff --git a/logilab/common/changelog.py b/logilab/common/changelog.py
index 2fff2ed..8c9f4d6 100644
--- a/logilab/common/changelog.py
+++ b/logilab/common/changelog.py
@@ -48,6 +48,7 @@ __docformat__ = "restructuredtext en"
import sys
from stat import S_IWRITE
+import codecs
from six import string_types
@@ -125,28 +126,29 @@ class ChangeLogEntry(object):
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('\n\n')
+ stream.write(u'\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 +186,12 @@ class ChangeLog(object):
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,14 +223,14 @@ class ChangeLog(object):
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"""
diff --git a/test/unittest_changelog.py b/test/unittest_changelog.py
index 6f60ead..2cf7ade 100644
--- a/test/unittest_changelog.py
+++ b/test/unittest_changelog.py
@@ -18,7 +18,7 @@
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