Branch 'dev/boddie' - 14 commits - pykolab/auth pykolab/cli pykolab/conf pykolab/imap pykolab/translit.py pykolab/wap_client pykolab/xml tests/functional tests/unit wallace/__init__.py

Paul Boddie boddie at kolabsys.com
Thu Jun 12 21:16:06 CEST 2014


 pykolab/auth/ldap/__init__.py                      |   32 ++++++++++++-----
 pykolab/auth/ldap/cache.py                         |   11 +++---
 pykolab/cli/cmd_remove_user_subscription.py        |    6 ++-
 pykolab/conf/__init__.py                           |   24 +++++++++++--
 pykolab/imap/__init__.py                           |   37 +++++++++++---------
 pykolab/translit.py                                |   23 ++++++++----
 pykolab/wap_client/__init__.py                     |   14 +++++--
 pykolab/xml/attendee.py                            |    1 
 tests/functional/test_kolabd/test_001_user_sync.py |    7 ++-
 tests/unit/test-002-attendee.py                    |    4 +-
 tests/unit/test-003-event.py                       |    4 +-
 tests/unit/test-014-conf-and-raw.py                |   38 +++++++++++++++++++++
 wallace/__init__.py                                |    1 
 13 files changed, 146 insertions(+), 56 deletions(-)

New commits:
commit f337f57fe6b0afe718efa426f89945720d456d94
Merge: 065e117 4b1f027
Author: Paul Boddie <paul at boddie.org.uk>
Date:   Thu Jun 12 21:14:58 2014 +0200

    Merge branch 'master' of git://git.kolab.org/git/pykolab into dev/boddie
    
    Conflicts:
    	pykolab/auth/ldap/__init__.py
    	pykolab/cli/cmd_remove_user_subscription.py

diff --cc pykolab/auth/ldap/__init__.py
index b22c49a,aa9736b..1c4fdb3
--- a/pykolab/auth/ldap/__init__.py
+++ b/pykolab/auth/ldap/__init__.py
@@@ -1494,20 -1684,32 +1494,32 @@@ class LDAP(pykolab.base.Base)
              )
  
          if entry_changes.has_key(result_attribute):
 -            if not entry_changes[result_attribute] == old_canon_attr:
 -                if old_canon_attr == None:
 +            if entry_changes[result_attribute] != old_canon_attr:
-                 self.imap.user_mailbox_rename(
-                         old_canon_attr,
-                         entry_changes[result_attribute]
-                     )
++                if old_canon_attr is None:
+                     self.imap.user_mailbox_create(
+                             entry_changes[result_attribute]
+                         )
+ 
+                 else:
+                     self.imap.user_mailbox_rename(
+                             old_canon_attr,
+                             entry_changes[result_attribute]
+                         )
  
                  entry[result_attribute] = entry_changes[result_attribute]
                  cache.get_entry(self.domain, entry)
          elif entry.has_key(result_attribute):
 -            if not entry[result_attribute] == old_canon_attr:
 -                if old_canon_attr == None:
 +            if entry[result_attribute] != old_canon_attr:
-                 self.imap.user_mailbox_rename(
-                         old_canon_attr,
-                         entry[result_attribute]
-                     )
++                if old_canon_attr is None:
+                     self.imap.user_mailbox_create(
+                             entry[result_attribute]
+                         )
+ 
+                 else:
+                     self.imap.user_mailbox_rename(
+                             old_canon_attr,
+                             entry[result_attribute]
+                         )
  
                  cache.get_entry(self.domain, entry)
  
diff --cc pykolab/imap/__init__.py
index 2f103d2,fcf374c..2115bdf
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@@ -1008,11 -1026,11 +1011,11 @@@ class IMAP(object)
                  #if acceptable:
                      #folder_name = "%s@%s" % (folder.split(self.separator)[1].split('@')[0],folder.split('@')[1])
  
-                 folder_name = "%s@%s" % (folder.split(self.imap.separator)[1].split('@')[0],folder.split('@')[1])
+                 folder_name = "%s@%s" % (folder.split(self.get_separator())[1].split('@')[0],folder.split('@')[1])
              else:
-                 folder_name = "%s" % (folder.split(self.imap.separator)[1])
+                 folder_name = "%s" % (folder.split(self.get_separator())[1])
  
 -            if not folder_name == None:
 +            if folder_name is not None:
                  if not folder_name in folders:
                      folders.append(folder_name)
  


commit 4b1f0279d79478555d9d568a58199759296a7b2e
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Jun 9 16:49:36 2014 +0200

    Tests setting and getting items with '%' in it (#3099)

diff --git a/tests/unit/test-014-conf-and-raw.py b/tests/unit/test-014-conf-and-raw.py
new file mode 100644
index 0000000..677cb2f
--- /dev/null
+++ b/tests/unit/test-014-conf-and-raw.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+
+import os
+import pykolab
+import tempfile
+import unittest
+
+conf = pykolab.getConf()
+conf.finalize_conf(fatal=False)
+
+class TestConfRaw(unittest.TestCase):
+    config_file = None
+
+    @classmethod
+    def setup_class(self, *args, **kw):
+        (fp, self.config_file) = tempfile.mkstemp()
+        os.write(fp, '[kolab]\n')
+        os.close(fp)
+        conf.read_config(self.config_file)
+
+    @classmethod
+    def teardown_class(self, *args, **kw):
+        os.remove(self.config_file)
+
+    def test_001_set(self):
+        password = '$%something'
+        conf.command_set('kolab', 'test_password', password)
+        
+    def test_002_get(self):
+        password = conf.get('kolab', 'test_password')
+        self.assertEqual('$%something', password)
+
+    def test_003_get_raw(self):
+        password = conf.get_raw('kolab', 'test_password')
+        self.assertNotEqual('$%something', password)
+
+if __name__ == '__main__':
+    unittest.main()


commit 4825f5d6ae9b9c4266d4b694d6fda1c71a7f04a1
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Jun 9 16:48:47 2014 +0200

    Add commentary with the RFC references (since "OPTIONAL" and "REQUIRED" were changed to "OPT-PARTICIPANT" and "REQ-PARTICIPANT")

diff --git a/pykolab/xml/attendee.py b/pykolab/xml/attendee.py
index 877f810..b496899 100644
--- a/pykolab/xml/attendee.py
+++ b/pykolab/xml/attendee.py
@@ -22,6 +22,7 @@ class Attendee(kolabformat.Attendee):
             #"IN-PROCESS": ,
         }
 
+    # See RFC 2445, 5445
     role_map = {
             "CHAIR": kolabformat.Chair,
             "REQ-PARTICIPANT": kolabformat.Required,


commit b5247cc255d0e5fa1afe9760dca8c026c3539586
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Jun 9 16:23:05 2014 +0200

    "OPTIONAL" is supposed to be "OPT-PARTICIPANT"

diff --git a/tests/unit/test-003-event.py b/tests/unit/test-003-event.py
index 429e5bc..61ea8ec 100644
--- a/tests/unit/test-003-event.py
+++ b/tests/unit/test-003-event.py
@@ -44,7 +44,7 @@ class TestEventXML(unittest.TestCase):
         self.assertEqual(len(self.event.get_attendees()), 1)
 
     def test_005_attendee_add_name_and_props(self):
-        self.event.add_attendee("jane at doe.org", "Doe, Jane", role="OPTIONAL", cutype="RESOURCE")
+        self.event.add_attendee("jane at doe.org", "Doe, Jane", role="OPT-PARTICIPANT", cutype="RESOURCE")
         self.assertIsInstance(self.event.get_attendees(), list)
         self.assertEqual(len(self.event.get_attendees()), 2)
 
@@ -129,7 +129,7 @@ UID:7a35527d-f783-4b58-b404-b1389bd2fc57
 ATTENDEE;CN="Doe, Jane";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED
  ;ROLE=REQ-PARTICIPANT;RSVP=FALSE:MAILTO:jane at doe.org
 ATTENDEE;CUTYPE=RESOURCE;PARTSTAT=NEEDS-ACTION
- ;ROLE=OPTIONAL;RSVP=FALSE:MAILTO:max at imum.com
+ ;ROLE=OPT-PARTICIPANT;RSVP=FALSE:MAILTO:max at imum.com
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR


commit d7c32d8ce509a16d635569949b1058f832cc0051
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Jun 9 16:22:23 2014 +0200

    Assure when a configuration file is read, it is also configured as the configuration file in use

diff --git a/pykolab/conf/__init__.py b/pykolab/conf/__init__.py
index 675944a..c5e5b09 100644
--- a/pykolab/conf/__init__.py
+++ b/pykolab/conf/__init__.py
@@ -377,6 +377,11 @@ class Conf(object):
         self.cfg_parser = SafeConfigParser()
         self.cfg_parser.read(value)
 
+        if hasattr(self, 'cli_keywords') and hasattr(self.cli_keywords, 'config_file'):
+            self.cli_keywords.config_file = value
+        self.defaults.config_file = value
+        self.config_file = value
+
     def command_get(self, *args, **kw):
         """
             Get a configuration option.
@@ -413,10 +418,21 @@ class Conf(object):
         if not self.cfg_parser.has_section(args[0]):
             log.error(_("No section '%s' exists.") % (args[0]))
 
-        self.cfg_parser.set(args[0], args[1], args[2])
-        fp = open(self.cli_keywords.config_file, "w+")
-        self.cfg_parser.write(fp)
-        fp.close()
+        if '%' in args[2]:
+            value = args[2].replace('%', '%%')
+        else:
+            value = args[2]
+
+        self.cfg_parser.set(args[0], args[1], value)
+
+        if hasattr(self, 'cli_keywords') and hasattr(self.cli_keywords, 'config_file'):
+            fp = open(self.cli_keywords.config_file, "w+")
+            self.cfg_parser.write(fp)
+            fp.close()
+        else:
+            fp = open(self.config_file, "w+")
+            self.cfg_parser.write(fp)
+            fp.close()
 
     def create_logger(self):
         """


commit bf56250be719dae16808914e681b8f08980546c3
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Jun 9 16:21:54 2014 +0200

    Only non-unicode strings need be decoded

diff --git a/pykolab/translit.py b/pykolab/translit.py
index 855e249..fd27d8f 100644
--- a/pykolab/translit.py
+++ b/pykolab/translit.py
@@ -102,13 +102,22 @@ def transliterate(_input, lang, _output_expected=None):
 
     _output = ''
 
-    for char in _input.decode('utf-8'):
-        if translit_map[_translit_name].has_key(char):
-            _output += translit_map[_translit_name][char]
-        elif char in [repr(x) for x in translit_map[_translit_name].keys()]:
-            _output += translit_map[_translit_name][[char in [raw(x) for x in translit_map[_translit_name].keys()]][0]]
-        else:
-            _output += char
+    if not isinstance(_input, unicode):
+        for char in _input.decode('utf-8'):
+            if translit_map[_translit_name].has_key(char):
+                _output += translit_map[_translit_name][char]
+            elif char in [repr(x) for x in translit_map[_translit_name].keys()]:
+                _output += translit_map[_translit_name][[char in [raw(x) for x in translit_map[_translit_name].keys()]][0]]
+            else:
+                _output += char
+    else:
+        for char in _input:
+            if translit_map[_translit_name].has_key(char):
+                _output += translit_map[_translit_name][char]
+            elif char in [repr(x) for x in translit_map[_translit_name].keys()]:
+                _output += translit_map[_translit_name][[char in [raw(x) for x in translit_map[_translit_name].keys()]][0]]
+            else:
+                _output += char
 
     return _output
 


commit fd2ca3c222295bc7b52db6f5edd9a2d911046e81
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon Jun 9 16:09:03 2014 +0200

    Fix unit test for attendee

diff --git a/tests/unit/test-002-attendee.py b/tests/unit/test-002-attendee.py
index cbfa9cc..9da93c7 100644
--- a/tests/unit/test-002-attendee.py
+++ b/tests/unit/test-002-attendee.py
@@ -79,13 +79,13 @@ class TestEventXML(unittest.TestCase):
     def test_016_role_map_forward_lookup(self):
         self.assertEqual(self.attendee.role_map["REQ-PARTICIPANT"], 0)
         self.assertEqual(self.attendee.role_map["CHAIR"], 1)
-        self.assertEqual(self.attendee.role_map["OPTIONAL"], 2)
+        self.assertEqual(self.attendee.role_map["OPT-PARTICIPANT"], 2)
         self.assertEqual(self.attendee.role_map["NON-PARTICIPANT"], 3)
 
     def test_017_role_map_reverse_lookup(self):
         self.assertEqual([k for k,v in self.attendee.role_map.iteritems() if v == 0][0], "REQ-PARTICIPANT")
         self.assertEqual([k for k,v in self.attendee.role_map.iteritems() if v == 1][0], "CHAIR")
-        self.assertEqual([k for k,v in self.attendee.role_map.iteritems() if v == 2][0], "OPTIONAL")
+        self.assertEqual([k for k,v in self.attendee.role_map.iteritems() if v == 2][0], "OPT-PARTICIPANT")
         self.assertEqual([k for k,v in self.attendee.role_map.iteritems() if v == 3][0], "NON-PARTICIPANT")
 
     def test_015_cutype_map_length(self):


commit bddd2e8bd8d7dbdbb7b5d1c0eab337e74d0ef019
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Tue May 27 14:15:06 2014 +0200

    Make sure a mailbox is only renamed if it actually exists.

diff --git a/pykolab/auth/ldap/__init__.py b/pykolab/auth/ldap/__init__.py
index 8379c0c..aa9736b 100644
--- a/pykolab/auth/ldap/__init__.py
+++ b/pykolab/auth/ldap/__init__.py
@@ -1346,7 +1346,7 @@ class LDAP(pykolab.base.Base):
                 )
 
         else:
-            folder = "user%s%s" % (self.imap.separator,entry[result_attribute].lower())
+            folder = "user%s%s" % (self.imap.get_separator(),entry[result_attribute].lower())
 
         server = self.imap.user_mailbox_server(folder)
 
@@ -1685,19 +1685,31 @@ class LDAP(pykolab.base.Base):
 
         if entry_changes.has_key(result_attribute):
             if not entry_changes[result_attribute] == old_canon_attr:
-                self.imap.user_mailbox_rename(
-                        old_canon_attr,
-                        entry_changes[result_attribute]
-                    )
+                if old_canon_attr == None:
+                    self.imap.user_mailbox_create(
+                            entry_changes[result_attribute]
+                        )
+
+                else:
+                    self.imap.user_mailbox_rename(
+                            old_canon_attr,
+                            entry_changes[result_attribute]
+                        )
 
                 entry[result_attribute] = entry_changes[result_attribute]
                 cache.get_entry(self.domain, entry)
         elif entry.has_key(result_attribute):
             if not entry[result_attribute] == old_canon_attr:
-                self.imap.user_mailbox_rename(
-                        old_canon_attr,
-                        entry[result_attribute]
-                    )
+                if old_canon_attr == None:
+                    self.imap.user_mailbox_create(
+                            entry[result_attribute]
+                        )
+
+                else:
+                    self.imap.user_mailbox_rename(
+                            old_canon_attr,
+                            entry[result_attribute]
+                        )
 
                 cache.get_entry(self.domain, entry)
 
@@ -1873,7 +1885,7 @@ class LDAP(pykolab.base.Base):
                 server = self.imap.user_mailbox_server(folder)
             else:
                 folder = "user%s%s" % (
-                        self.imap.separator,
+                        self.imap.get_separator(),
                         entry[result_attribute]
                     )
 
diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
index c9df6d3..fcf374c 100644
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -384,10 +384,10 @@ class IMAP(object):
             Create a shared folder.
         """
 
-        folder_name = "shared%s%s" % (self.imap.separator, folder_path)
+        folder_name = "shared%s%s" % (self.get_separator(), folder_path)
 
         # Correct folder_path being supplied with "shared/shared/" for example
-        if folder_name.startswith("shared%s" % (self.imap.separator) * 2):
+        if folder_name.startswith("shared%s" % (self.get_separator()) * 2):
             folder_name = folder_name[7:]
 
         log.info(_("Creating new shared folder %s") %(folder_name))
@@ -397,19 +397,19 @@ class IMAP(object):
         """
             Check if a shared mailbox exists.
         """
-        folder_name = 'shared%s%s' % (self.imap.separator, folder_path)
+        folder_name = 'shared%s%s' % (self.get_separator(), folder_path)
 
         # Correct folder_path being supplied with "shared/shared/" for example
-        if folder_name.startswith("shared%s" % (self.imap.separator) * 2):
+        if folder_name.startswith("shared%s" % (self.get_separator()) * 2):
             folder_name = folder_name[7:]
 
         return self.has_folder(folder_name)
 
     def shared_folder_set_type(self, folder_path, folder_type):
-        folder_name = 'shared%s%s' % (self.imap.separator, folder_path)
+        folder_name = 'shared%s%s' % (self.get_separator(), folder_path)
 
         # Correct folder_path being supplied with "shared/shared/" for example
-        if folder_name.startswith("shared%s" % (self.imap.separator) * 2):
+        if folder_name.startswith("shared%s" % (self.get_separator()) * 2):
             folder_name = folder_name[7:]
 
         self.set_metadata(folder_name, '/shared/vendor/kolab/folder-type', folder_type)
@@ -419,10 +419,10 @@ class IMAP(object):
             Create a shared folder.
         """
 
-        folder_name = "shared%s%s" % (self.imap.separator, mailbox_base_name)
+        folder_name = "shared%s%s" % (self.get_separator(), mailbox_base_name)
 
         # Correct folder_path being supplied with "shared/shared/" for example
-        if folder_name.startswith("shared%s" % (self.imap.separator) * 2):
+        if folder_name.startswith("shared%s" % (self.get_separator()) * 2):
             folder_name = folder_name[7:]
 
         log.info(_("Creating new shared folder %s") %(mailbox_base_name))
@@ -432,10 +432,10 @@ class IMAP(object):
         """
             Check if a shared mailbox exists.
         """
-        folder_name = "shared%s%s" % (self.imap.separator, mailbox_base_name)
+        folder_name = "shared%s%s" % (self.get_separator(), mailbox_base_name)
 
         # Correct folder_path being supplied with "shared/shared/" for example
-        if folder_name.startswith("shared%s" % (self.imap.separator) * 2):
+        if folder_name.startswith("shared%s" % (self.get_separator()) * 2):
             folder_name = folder_name[7:]
 
         return self.has_folder(folder_name)
@@ -453,7 +453,7 @@ class IMAP(object):
             log.warning(_("Downcasing mailbox name %r") % (mailbox_base_name))
             mailbox_base_name = mailbox_base_name.lower()
 
-        folder_name = "user%s%s" % (self.imap.separator, mailbox_base_name)
+        folder_name = "user%s%s" % (self.get_separator(), mailbox_base_name)
         log.info(_("Creating new mailbox for user %s") %(mailbox_base_name))
 
         self.create_folder(folder_name, server)
@@ -637,9 +637,9 @@ class IMAP(object):
                 folder_name = additional_folder
 
             folder_name = "user%s%s%s%s%s" % (
-                    self.imap.separator,
+                    self.get_separator(),
                     localpart,
-                    self.imap.separator,
+                    self.get_separator(),
                     folder_name,
                     domain_suffix
                 )
@@ -663,7 +663,7 @@ class IMAP(object):
         """
         self.connect()
 
-        folder = "user%s%s" %(self.imap.separator,mailbox_base_name)
+        folder = "user%s%s" %(self.get_separator(),mailbox_base_name)
         self.delete_mailfolder(folder)
         self.cleanup_acls(mailbox_base_name)
 
@@ -675,7 +675,7 @@ class IMAP(object):
             log.warning(_("Downcasing mailbox name %r") % (mailbox_base_name))
             mailbox_base_name = mailbox_base_name.lower()
 
-        return self.has_folder('user%s%s' %(self.imap.separator, mailbox_base_name))
+        return self.has_folder('user%s%s' %(self.get_separator(), mailbox_base_name))
 
     def user_mailbox_quota(self, mailbox_quota):
         pass
@@ -687,6 +687,9 @@ class IMAP(object):
         if old_name == new_name and partition == None:
             return
 
+        if not self.has_folder(old_name):
+            log.error(_("INBOX folder to rename (%s) does not exist") % (old_name))
+
         if not self.has_folder(new_name) or not partition == None:
             log.info(_("Renaming INBOX from %s to %s") % (old_name,new_name))
             try:
@@ -1023,9 +1026,9 @@ class IMAP(object):
                 #if acceptable:
                     #folder_name = "%s@%s" % (folder.split(self.separator)[1].split('@')[0],folder.split('@')[1])
 
-                folder_name = "%s@%s" % (folder.split(self.imap.separator)[1].split('@')[0],folder.split('@')[1])
+                folder_name = "%s@%s" % (folder.split(self.get_separator())[1].split('@')[0],folder.split('@')[1])
             else:
-                folder_name = "%s" % (folder.split(self.imap.separator)[1])
+                folder_name = "%s" % (folder.split(self.get_separator())[1])
 
             if not folder_name == None:
                 if not folder_name in folders:


commit 919a49642431156183b5f6d7d2e6c9ea8c97793b
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Wed Apr 23 12:02:15 2014 +0200

    LSUB with a pattern does not return the expected results at all

diff --git a/pykolab/cli/cmd_remove_user_subscription.py b/pykolab/cli/cmd_remove_user_subscription.py
index 17ff818..a09bb31 100644
--- a/pykolab/cli/cmd_remove_user_subscription.py
+++ b/pykolab/cli/cmd_remove_user_subscription.py
@@ -74,7 +74,7 @@ def execute(*args, **kw):
         sys.exit(1)
 
     _folders = imap.lm(folder_pattern)
-    _subscribed_folders = imap.lsub(folder_pattern)
+    _subscribed_folders = imap.lsub()
     unsubscribed_folders = []
 
     for _folder in _folders:
@@ -89,8 +89,8 @@ def execute(*args, **kw):
 
         print "\n".join(unsubscribed_folders)
     else:
-        print >> sys.stderr, _("User %s not be unsubscribed from any folders.") % (
+        print >> sys.stderr, _("User %s was not unsubscribed from any folders.") % (
                 user
             )
 
-        sys.exit(1)
\ No newline at end of file
+        sys.exit(1)


commit 065e117b6f4d2a77c0b9034fb5d9ba1522428244
Author: Paul Boddie <paul at boddie.org.uk>
Date:   Mon Jun 9 00:47:03 2014 +0200

    Removed redundant import.

diff --git a/wallace/__init__.py b/wallace/__init__.py
index e37f76f..6549781 100644
--- a/wallace/__init__.py
+++ b/wallace/__init__.py
@@ -23,7 +23,6 @@ import grp
 import multiprocessing
 import os
 import pwd
-import traceback
 from smtpd import SMTPChannel
 import socket
 import sys


commit bcda21375fd7340db0198c2e717eb2f71f33ea37
Merge: 4be0f28 8678e41
Author: Paul Boddie <paul at boddie.org.uk>
Date:   Mon Jun 9 00:22:30 2014 +0200

    Merge branch 'master' of git://git.kolab.org/git/pykolab into dev/boddie
    
    Conflicts:
    	pykolab/auth/ldap/cache.py
    	pykolab/wap_client/__init__.py

diff --cc pykolab/auth/ldap/cache.py
index f3e96f2,9be4c3e..292bc52
--- a/pykolab/auth/ldap/cache.py
+++ b/pykolab/auth/ldap/cache.py
@@@ -141,11 -150,12 +141,12 @@@ def get_entry(domain, entry, update=Tru
              db.commit()
              _entry = db.query(Entry).filter_by(uniqueid=entry['id']).first()
  
-         if _entry.result_attribute != entry[result_attribute]:
-             log.debug(_("Updating result_attribute for cache entry %r") % (entry['id']), level=8)
-             _entry.result_attribute = entry[result_attribute]
-             db.commit()
-             _entry = db.query(Entry).filter_by(uniqueid=entry['id']).first()
+         if entry.has_key(result_attribute):
 -            if not _entry.result_attribute == entry[result_attribute]:
++            if _entry.result_attribute != entry[result_attribute]:
+                 log.debug(_("Updating result_attribute for cache entry %r") % (entry['id']), level=8)
+                 _entry.result_attribute = entry[result_attribute]
+                 db.commit()
+                 _entry = db.query(Entry).filter_by(uniqueid=entry['id']).first()
  
      return _entry
  
diff --cc pykolab/wap_client/__init__.py
index 5785220,b7ac1e9..38a5381
--- a/pykolab/wap_client/__init__.py
+++ b/pykolab/wap_client/__init__.py
@@@ -312,7 -312,9 +312,9 @@@ def request_raw(method, api_uri, get=No
      if conf.debuglevel > 8:
          conn.set_debuglevel(9)
  
+     conn.set_debuglevel(9)
+ 
 -    if not get == None:
 +    if get is not None:
          _get = "?%s" % (urllib.urlencode(get))
      else:
          _get = ""
@@@ -360,9 -363,9 +363,9 @@@ def user_add(params=None)
      return request('POST', 'user.add', post=params)
  
  def user_delete(params=None):
 -    if params == None:
 +    if params is None:
          params = {
-                 'user': utils.ask_question("Username for user to delete", "user")
+                 'id': utils.ask_question("Username for user to delete", "user")
              }
  
      post = json.dumps(params)
@@@ -370,9 -373,9 +373,9 @@@
      return request('POST', 'user.delete', post=post)
  
  def user_edit(user = None, attributes={}):
 -    if user == None:
 +    if user is None:
          get = {
-                 'user': utils.ask_question("Username for user to edit", "user")
+                 'id': utils.ask_question("Username for user to edit", "user")
              }
      else:
          get = {
@@@ -512,10 -515,13 +515,13 @@@ def user_form_value_generate_userpasswo
      return { 'userpassword': result['password'] }
  
  def user_info(user=None):
 -    if user == None:
 +    if user is None:
          user = utils.ask_question("User email address")
-     _params = { 'user': user }
+ 
+     _params = { 'id': user }
+ 
      user = request('GET', 'user.info', get=_params)
+ 
      return user
  
  def user_types_list():


commit 8678e417a9cdb7c65c6ebc0c70ab65b79475af68
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Thu Jun 5 14:24:29 2014 +0200

    Only compare result attribute values if indeed the input has such key

diff --git a/pykolab/auth/ldap/cache.py b/pykolab/auth/ldap/cache.py
index ad50e9b..9be4c3e 100644
--- a/pykolab/auth/ldap/cache.py
+++ b/pykolab/auth/ldap/cache.py
@@ -150,11 +150,12 @@ def get_entry(domain, entry, update=True):
             db.commit()
             _entry = db.query(Entry).filter_by(uniqueid=entry['id']).first()
 
-        if not _entry.result_attribute == entry[result_attribute]:
-            log.debug(_("Updating result_attribute for cache entry %r") % (entry['id']), level=8)
-            _entry.result_attribute = entry[result_attribute]
-            db.commit()
-            _entry = db.query(Entry).filter_by(uniqueid=entry['id']).first()
+        if entry.has_key(result_attribute):
+            if not _entry.result_attribute == entry[result_attribute]:
+                log.debug(_("Updating result_attribute for cache entry %r") % (entry['id']), level=8)
+                _entry.result_attribute = entry[result_attribute]
+                db.commit()
+                _entry = db.query(Entry).filter_by(uniqueid=entry['id']).first()
 
     return _entry
 


commit 4583e353fcb16fb5de8f2e83d11173d1f784b80a
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Wed May 14 14:05:56 2014 +0200

    Use 'id' rather than 'user' parameter

diff --git a/pykolab/wap_client/__init__.py b/pykolab/wap_client/__init__.py
index 54ef541..b7ac1e9 100644
--- a/pykolab/wap_client/__init__.py
+++ b/pykolab/wap_client/__init__.py
@@ -312,6 +312,8 @@ def request_raw(method, api_uri, get=None, post=None, headers={}):
     if conf.debuglevel > 8:
         conn.set_debuglevel(9)
 
+    conn.set_debuglevel(9)
+
     if not get == None:
         _get = "?%s" % (urllib.urlencode(get))
     else:
@@ -326,6 +328,7 @@ def request_raw(method, api_uri, get=None, post=None, headers={}):
     data = response.read()
 
     log.debug(_("Got response: %r") % (data), level=8)
+
     try:
         response_data = json.loads(data)
     except ValueError, e:
@@ -362,7 +365,7 @@ def user_add(params=None):
 def user_delete(params=None):
     if params == None:
         params = {
-                'user': utils.ask_question("Username for user to delete", "user")
+                'id': utils.ask_question("Username for user to delete", "user")
             }
 
     post = json.dumps(params)
@@ -372,11 +375,11 @@ def user_delete(params=None):
 def user_edit(user = None, attributes={}):
     if user == None:
         get = {
-                'user': utils.ask_question("Username for user to edit", "user")
+                'id': utils.ask_question("Username for user to edit", "user")
             }
     else:
         get = {
-                'user': user
+                'id': user
             }
 
     user_info = request('GET', 'user.info', get=get)
@@ -514,8 +517,11 @@ def user_form_value_generate_userpassword(*args, **kw):
 def user_info(user=None):
     if user == None:
         user = utils.ask_question("User email address")
-    _params = { 'user': user }
+
+    _params = { 'id': user }
+
     user = request('GET', 'user.info', get=_params)
+
     return user
 
 def user_types_list():
diff --git a/tests/functional/test_kolabd/test_001_user_sync.py b/tests/functional/test_kolabd/test_001_user_sync.py
index aef47aa..671188a 100644
--- a/tests/functional/test_kolabd/test_001_user_sync.py
+++ b/tests/functional/test_kolabd/test_001_user_sync.py
@@ -37,6 +37,7 @@ class TestKolabDaemon(unittest.TestCase):
         self.assertEqual(recipient, "uid=doe,ou=People,dc=example,dc=org")
 
         result = wap_client.user_info(recipient)
+
         self.assertEqual(result['mail'], 'john.doe at example.org')
         self.assertEqual(result['alias'], ['doe at example.org', 'j.doe at example.org'])
 
@@ -82,7 +83,8 @@ class TestKolabDaemon(unittest.TestCase):
         imap = IMAP()
         imap.connect()
 
-        exec("ac_folders = %s" % (conf.get_raw(conf.get('kolab', 'primary_domain'), 'autocreate_folders')))
+        ac_folders = conf.get_raw('kolab', 'autocreate_folders')
+        exec("ac_folders = %s" % (ac_folders))
 
         folders = imap.lm('user/%(local)s/*@%(domain)s' % (self.user))
 
@@ -92,7 +94,8 @@ class TestKolabDaemon(unittest.TestCase):
         imap = IMAP()
         imap.connect()
 
-        exec("ac_folders = %s" % (conf.get_raw(conf.get('kolab', 'primary_domain'), 'autocreate_folders')))
+        ac_folders = conf.get_raw('kolab', 'autocreate_folders')
+        exec("ac_folders = %s" % (ac_folders))
 
         folders = []
         folders.extend(imap.lm('user/%(local)s@%(domain)s' % (self.user)))


commit 58674fa2c72a8a6f230d787db9444d279f951ba5
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Wed May 14 09:50:33 2014 +0200

    Remove kolab/Makefile

diff --git a/configure.ac b/configure.ac
index c1a3399..3c521fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,7 +32,6 @@ bin/rebuild.sh
 Makefile
 pykolab.spec
 conf/Makefile
-kolab/Makefile
 kolabd/Makefile
 po/Makefile.in
 pykolab/constants.py




More information about the commits mailing list