[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