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