[Python-modules-commits] [python-odf] 57/118: Made sure userfield.py works with OpenOffice.org 3.x files.
Wolfgang Borgert
debacle at moszumanska.debian.org
Fri Oct 3 21:27:22 UTC 2014
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to reference refs/remotes/upstream/master
in repository python-odf.
commit 33d06078d81255207fbe466e13d9766e50347769
Author: Michael Howitz <mh at gocept.com>
Date: Tue Jun 9 06:32:00 2009 +0000
Made sure userfield.py works with OpenOffice.org 3.x files.
---
ChangeLog | 6 +-
odf/userfield.py | 22 ++-----
tests/examples/userfields_ooo3.odt | Bin 0 -> 38420 bytes
tests/testuserfields.py | 121 ++++++++++++++++++++++++-------------
4 files changed, 88 insertions(+), 61 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index d71c97d..7b8ff98 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,12 @@
+past 0.9
+ Made sure userfield.py works with OpenOffice.org 3.x files.
0.9
Updated to ODF version 1.1
0.8
Added the ability to load a document.
0.7
- refactored command-line tool odfuserfied into odf.userfield as a
- library and adapted odfuserfied to use this library
+ Refactored command-line tool odfuserfied into odf.userfield as a
+ library and adapted odfuserfied to use this library.
0.6.1
TODO: collect changes from svn check-in messages
diff --git a/odf/userfield.py b/odf/userfield.py
index 0e63976..5bf40c0 100644
--- a/odf/userfield.py
+++ b/odf/userfield.py
@@ -60,16 +60,16 @@ class UserFields(object):
src ... source document name, file like object or None for stdin
dest ... destination document name, file like object or None for stdout
-
+
"""
self.src_file = src
self.dest_file = dest
def list_fields(self):
"""List (extract) all known user-fields.
-
+
Returns list of user-field names.
-
+
"""
return [x[0] for x in self.list_fields_and_values()]
@@ -88,7 +88,7 @@ class UserFields(object):
value_type.encode(OUTENCODING),
value.encode(OUTENCODING)))
return attrs
-
+
self._content_handler(_callback)
return found_fields
@@ -274,19 +274,7 @@ class ODFContentParser(xml.sax.saxutils.XMLGenerator):
self._undeclared_ns_maps = []
for (name, value) in attrs.items():
- if name[0] is None:
- name = name[1]
- elif self._current_context[name[0]] is None:
- # default namespace
- #If an attribute has a nsuri but not a prefix, we must
- #create a prefix and add a nsdecl
- prefix = self.GENERATED_PREFIX % self._generated_prefix_ctr
- self._generated_prefix_ctr = self._generated_prefix_ctr + 1
- name = prefix + ':' + name[1]
- self._out.write(' xmlns:%s=%s' % (prefix, quoteattr(name[0])))
- self._current_context[name[0]] = prefix
- else:
- name = self._current_context[name[0]] + ":" + name[1]
+ name = self._qname(name)
self._out.write(' %s=' % name)
writeattr(self._out, value)
self._out.write('>')
diff --git a/tests/examples/userfields_ooo3.odt b/tests/examples/userfields_ooo3.odt
new file mode 100644
index 0000000..3816a07
Binary files /dev/null and b/tests/examples/userfields_ooo3.odt differ
diff --git a/tests/testuserfields.py b/tests/testuserfields.py
index 2e1285d..befc465 100644
--- a/tests/testuserfields.py
+++ b/tests/testuserfields.py
@@ -29,20 +29,26 @@ try:
except InputError:
from StringIO import StringIO
+
+def get_file_path(file_name):
+ return os.path.join(os.path.dirname(__file__), "examples", file_name)
+
+
+def get_user_fields(file_path):
+ return odf.userfield.UserFields(file_path)
+
+
class TestUserFields(unittest.TestCase):
- userfields_odt = os.path.join(
- os.path.dirname(__file__), "examples", "userfields.odt")
- no_userfields_odt = os.path.join(
- os.path.dirname(__file__), "examples", "no_userfields.odt")
+ userfields_odt = get_file_path("userfields.odt")
+ userfields_ooo3_odt = get_file_path("userfields_ooo3.odt")
+ no_userfields_odt = get_file_path("no_userfields.odt")
def setUp(self):
- self.user_fields = odf.userfield.UserFields(self.userfields_odt)
- self.no_user_fields = odf.userfield.UserFields(self.no_userfields_odt)
self.unlink_list = []
def tearDown(self):
- # delete created destionation files
+ # delete created destination files
for filename in self.unlink_list:
os.unlink(filename)
@@ -54,61 +60,91 @@ class TestUserFields(unittest.TestCase):
def test_list_fields(self):
""" Find the expected fields in the file """
- self.assertEqual([], self.no_user_fields.list_fields())
+ self.assertEqual([],
+ get_user_fields(self.no_userfields_odt).list_fields())
self.assertEqual(['username', 'firstname', 'lastname', 'address'],
- self.user_fields.list_fields())
+ get_user_fields(self.userfields_odt).list_fields())
def test_list_fields_and_values(self):
""" Find the expected fields and values in the file """
- self.assertEqual([], self.no_user_fields.list_fields_and_values())
- self.assertEqual(
- [], self.no_user_fields.list_fields_and_values(['username']))
+ no_user_fields = get_user_fields(self.no_userfields_odt)
+ self.assertEqual([],
+ no_user_fields.list_fields_and_values())
+ self.assertEqual([],
+ no_user_fields.list_fields_and_values(['username']))
+ user_fields = get_user_fields(self.userfields_odt)
self.assertEqual([('username', 'string', ''),
('lastname', 'string', '<none>')],
- self.user_fields.list_fields_and_values(['username',
- 'lastname']))
- self.assertEqual(4, len(self.user_fields.list_fields_and_values()))
+ user_fields.list_fields_and_values(['username',
+ 'lastname']))
+ self.assertEqual(4, len(user_fields.list_fields_and_values()))
def test_list_values(self):
- self.assertEqual([], self.no_user_fields.list_values(['username']))
- self.assertEqual(['', '<none>'],
- self.user_fields.list_values(['username', 'lastname']))
+ self.assertEqual(
+ [],
+ get_user_fields(self.no_userfields_odt).list_values(['username']))
+ self.assertEqual(
+ ['', '<none>'],
+ get_user_fields(self.userfields_odt).list_values(
+ ['username', 'lastname']))
def test_get(self):
- self.assertEqual(None, self.no_user_fields.get('username'))
- self.assertEqual('', self.user_fields.get('username'))
- self.assertEqual('<none>', self.user_fields.get('lastname'))
- self.assertEqual(None, self.user_fields.get('street'))
+ user_fields = get_user_fields(self.userfields_odt)
+ self.assertEqual(
+ None,
+ get_user_fields(self.no_userfields_odt).get('username'))
+ self.assertEqual('', user_fields.get('username'))
+ self.assertEqual('<none>', user_fields.get('lastname'))
+ self.assertEqual(None, user_fields.get('street'))
def test_get_type_and_value(self):
self.assertEqual(
- None, self.no_user_fields.get_type_and_value('username'))
+ None,
+ get_user_fields(self.no_userfields_odt).get_type_and_value(
+ 'username'))
+ user_fields = get_user_fields(self.userfields_odt)
self.assertEqual(
- ('string', ''), self.user_fields.get_type_and_value('username'))
+ ('string', ''), user_fields.get_type_and_value('username'))
self.assertEqual(
('string', '<none>'),
- self.user_fields.get_type_and_value('lastname'))
- self.assertEqual(None, self.user_fields.get_type_and_value('street'))
+ user_fields.get_type_and_value('lastname'))
+ self.assertEqual(None, user_fields.get_type_and_value('street'))
def test_update(self):
# test for file without user fields
- self.no_user_fields.dest_file = self._get_dest_file_name()
- self.no_user_fields.update({'username': 'mac'})
- dest = odf.userfield.UserFields(self.no_user_fields.dest_file)
+ no_user_fields = get_user_fields(self.no_userfields_odt)
+ no_user_fields.dest_file = self._get_dest_file_name()
+ no_user_fields.update({'username': 'mac'})
+ dest = odf.userfield.UserFields(no_user_fields.dest_file)
self.assertEqual([], dest.list_fields_and_values())
# test for file with user field, including test of encoding
- self.user_fields.dest_file = self._get_dest_file_name()
- self.user_fields.update({'username': 'mac',
- 'firstname': u'André',
- 'street': 'I do not exist'})
- dest = odf.userfield.UserFields(self.user_fields.dest_file)
+ user_fields = get_user_fields(self.userfields_odt)
+ user_fields.dest_file = self._get_dest_file_name()
+ user_fields.update({'username': 'mac',
+ 'firstname': u'André',
+ 'street': 'I do not exist'})
+ dest = odf.userfield.UserFields(user_fields.dest_file)
self.assertEqual([('username', 'string', 'mac'),
('firstname', 'string', 'André'),
('lastname', 'string', '<none>'),
('address', 'string', '')],
dest.list_fields_and_values())
+ def test_update_open_office_version_3(self):
+ """Update fields in OpenOffice.org 3.x version of file."""
+ user_fields = get_user_fields(self.userfields_ooo3_odt)
+ user_fields.dest_file = self._get_dest_file_name()
+ user_fields.update({'username': 'mari',
+ 'firstname': u'Lukas',
+ 'street': 'I might exist.'})
+ dest = odf.userfield.UserFields(user_fields.dest_file)
+ self.assertEqual([('username', 'string', 'mari'),
+ ('firstname', 'string', 'Lukas'),
+ ('lastname', 'string', '<none>'),
+ ('address', 'string', '')],
+ dest.list_fields_and_values())
+
def test_stringio(self):
# test wether it is possible to use a StringIO as src and dest
src = StringIO(file(self.userfields_odt).read())
@@ -125,20 +161,21 @@ class TestUserFields(unittest.TestCase):
('lastname', 'string', '<none>'),
('address', 'string', '')],
dest_user_fields.list_fields_and_values())
-
+
def test_newlines_in_values(self):
# test that newlines in values are encoded correctly so that
# they get read back correctly
- self.user_fields.dest_file = self._get_dest_file_name()
- self.user_fields.update({'username': 'mac',
- 'firstname': 'mac',
- 'lastname': 'mac',
- 'address': 'Hall-Platz 3\n01234 Testheim'})
- dest = odf.userfield.UserFields(self.user_fields.dest_file)
+ user_fields = get_user_fields(self.userfields_odt)
+ user_fields.dest_file = self._get_dest_file_name()
+ user_fields.update({'username': 'mac',
+ 'firstname': 'mac',
+ 'lastname': 'mac',
+ 'address': 'Hall-Platz 3\n01234 Testheim'})
+ dest = odf.userfield.UserFields(user_fields.dest_file)
self.assertEqual([('username', 'string', 'mac'),
('firstname', 'string', 'mac'),
('lastname', 'string', 'mac'),
- ('address', 'string',
+ ('address', 'string',
'Hall-Platz 3\n01234 Testheim')],
dest.list_fields_and_values())
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-odf.git
More information about the Python-modules-commits
mailing list