9 commits - pykolab/cli pykolab/conf pykolab/setup pykolab/utils.py pykolab/wap_client

Jeroen van Meeuwen vanmeeuwen at kolabsys.com
Mon May 14 13:53:35 CEST 2012


 pykolab/cli/cmd_list_deleted_mailboxes.py |    2 
 pykolab/cli/cmd_list_domains.py           |   19 ++++-----
 pykolab/cli/commands.py                   |    1 
 pykolab/conf/__init__.py                  |    4 -
 pykolab/conf/entitlement.py               |    9 ++--
 pykolab/setup/setup_mta.py                |    2 
 pykolab/utils.py                          |   12 ++---
 pykolab/wap_client/__init__.py            |   62 ++++++++++++++++++++++++++++--
 pykolab/wap_client/request.py             |   29 --------------
 9 files changed, 85 insertions(+), 55 deletions(-)

New commits:
commit f6a8abaa0233ef94850a9493d56440eec19200e1
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 12:53:11 2012 +0100

    The setting is called content_filter, not content-filter

diff --git a/pykolab/setup/setup_mta.py b/pykolab/setup/setup_mta.py
index f3d6d9b..ab5cfb6 100644
--- a/pykolab/setup/setup_mta.py
+++ b/pykolab/setup/setup_mta.py
@@ -201,7 +201,7 @@ result_attribute = mail
             "submission_recipient_restrictions": "check_policy_service unix:private/submission_policy, permit_sasl_authenticated, reject",
             "submission_sender_restrictions": "reject_non_fqdn_sender, check_policy_service unix:private/submission_policy, permit_sasl_authenticated, reject",
             "submission_data_restrictions": "check_policy_service unix:private/submission_policy",
-            "content-filter": "smtp-amavis:[127.0.0.1]:10024"
+            "content_filter": "smtp-amavis:[127.0.0.1]:10024"
 
         }
 


commit 15d0c430d3b7f985821c05942826786035980e27
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:59:17 2012 +0100

    Add domain_add() function
    Add more debugging statements

diff --git a/pykolab/wap_client/__init__.py b/pykolab/wap_client/__init__.py
index 998fcef..381e946 100644
--- a/pykolab/wap_client/__init__.py
+++ b/pykolab/wap_client/__init__.py
@@ -2,19 +2,40 @@
 import json
 import httplib
 import sys
+from urlparse import urlparse
 
 import pykolab
 
 from pykolab import utils
+from pykolab.translate import _
 
 log = pykolab.getLogger('pykolab.wap_client')
 conf = pykolab.getConf()
 
+if not hasattr(conf, 'defaults'):
+    conf.finalize_conf()
+
 API_HOSTNAME = "localhost"
 API_SCHEME = "http"
 API_PORT = 80
 API_BASE = "/kolab-webadmin/api/"
 
+kolab_wap_url = conf.get('kolab_wap', 'api_url')
+
+if not kolab_wap_url == None:
+    result = urlparse(kolab_wap_url)
+else:
+    result = None
+
+if hasattr(result, 'hostname'):
+    API_HOSTNAME = result.hostname
+
+if hasattr(result, 'port'):
+    API_PORT = result.port
+
+if hasattr(result, 'path'):
+    API_BASE = result.path
+
 session_id = None
 
 conn = None
@@ -61,15 +82,47 @@ def connect():
 
     return conn
 
+def domain_add(domain, parent=None):
+    params = {
+            'domain': domain,
+        }
+
+    dna = conf.get('ldap', 'domain_name_attribute')
+
+    if not parent == None:
+        domains = domains_list()
+        parent_found = False
+        if isinstance(domains['list'], dict):
+            for _domain in domains['list'].keys():
+                if parent_found:
+                    continue
+
+                if isinstance(domains['list'][_domain][dna], basestring):
+                    if parent == domains['list'][_domain][dna]:
+                        parent_found = True
+                elif isinstance(domains['list'][_domain][dna], list):
+                    if parent in domains['list'][_domain][dna]:
+                        parent_found = True
+
+        if parent_found:
+            params['parent'] = parent
+        else:
+            log.error(_("Invalid parent domain"))
+            return
+
+    params = json.dumps(params)
+
+    return request('POST', 'domain.add', params)
+
+def domain_info(domain):
+    return request('GET', 'domain.info?domain=%s' % (domain))
+
 def domains_capabilities():
     return request('GET', 'domains.capabilities')
 
 def domains_list():
     return request('GET', 'domains.list')
 
-def domain_info(domain):
-    return request('GET', 'domain.info?domain=%s' % (domain))
-
 def get_group_input():
     group_types = group_types_list()
 
@@ -184,10 +237,13 @@ def request(method, api_uri, params=None, headers={}):
         headers["X-Session-Token"] = session_id
 
     conn = connect()
+    log.debug(_("Requesting %r with params %r") % ("%s/%s" % (API_BASE,api_uri), params), level=8)
     conn.request(method.upper(), "%s/%s" % (API_BASE,api_uri), params, headers)
     response = conn.getresponse()
+
     data = response.read()
 
+    log.debug(_("Got response: %r") % (data), level=8)
     try:
         response_data = json.loads(data)
     except ValueError, e:


commit 8a9e853245a10e6b6906da121d3ae1e335d5621d
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:58:58 2012 +0100

    Remove wap_client/request.py it served no purpose

diff --git a/pykolab/wap_client/request.py b/pykolab/wap_client/request.py
deleted file mode 100644
index 0613333..0000000
--- a/pykolab/wap_client/request.py
+++ /dev/null
@@ -1,29 +0,0 @@
-def request(method, api_uri, params=None, headers={}):
-    global session_id
-
-    if not session_id == None:
-        headers["X-Session-Token"] = session_id
-
-    conn = connect()
-    conn.request(method.upper(), "%s/%s" % (API_BASE,api_uri), params, headers)
-    response = conn.getresponse()
-    data = response.read()
-
-    print method, api_uri, params
-    print data
-
-    try:
-        response_data = json.loads(data)
-    except ValueError, e:
-        # Some data is not JSON
-        print "Response data is not JSON"
-        sys.exit(1)
-
-    print response_data
-
-    if response_data['status'] == "OK":
-        del response_data['status']
-        return response_data['result']
-    else:
-        return response_data['result']
-


commit 63617be06a287fcba675d736eb20cbc2ec183539
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:58:01 2012 +0100

    Default can be an empty string as well as None (if the default is a missing configuration value)

diff --git a/pykolab/utils.py b/pykolab/utils.py
index ceb6f68..0da1664 100644
--- a/pykolab/utils.py
+++ b/pykolab/utils.py
@@ -36,12 +36,12 @@ def ask_question(question, default="", password=False, confirm=False):
         Usage: pykolab.utils.ask_question("What is the server?", default="localhost")
     """
     if password:
-        if default == "":
+        if default == "" or default == None:
             answer = getpass.getpass("%s: " % (question))
         else:
             answer = getpass.getpass("%s [%s]: " % (question, default))
     else:
-        if default == "":
+        if default == "" or default == None:
             answer = raw_input("%s: " % (question))
         else:
             answer = raw_input("%s [%s]: " % (question, default))
@@ -52,12 +52,12 @@ def ask_question(question, default="", password=False, confirm=False):
             answer_confirmed = False
             while not answer_confirmed:
                 if password:
-                    if default == "":
+                    if default == "" or default == None:
                         answer = getpass.getpass(_("Confirm %s: ") % (question))
                     else:
                         answer = getpass.getpass(_("Confirm %s [%s]: ") % (question, default))
                 else:
-                    if default == "":
+                    if default == "" or default == None:
                         answer = raw_input(_("Confirm %s: ") % (question))
                     else:
                         answer = raw_input(_("Confirm %s [%s]: ") % (question, default))
@@ -67,12 +67,12 @@ def ask_question(question, default="", password=False, confirm=False):
                             "Please try again.")
 
                     if password:
-                        if default == "":
+                        if default == "" or default == None:
                             answer = getpass.getpass(_("Confirm %s: ") % (question))
                         else:
                             answer = getpass.getpass(_("Confirm %s [%s]: ") % (question, default))
                     else:
-                        if default == "":
+                        if default == "" or default == None:
                             answer = raw_input(_("Confirm %s: ") % (question))
                         else:
                             answer = raw_input(_("Confirm %s [%s]: ") % (question, default))


commit deb3fd58506fbc8553ac3d52bd8a80576379d09c
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:57:39 2012 +0100

    Use log.error() instead of print >> sys.stderr

diff --git a/pykolab/conf/entitlement.py b/pykolab/conf/entitlement.py
index 54370c7..c726c1e 100644
--- a/pykolab/conf/entitlement.py
+++ b/pykolab/conf/entitlement.py
@@ -137,13 +137,14 @@ class Entitlement(object):
                                 )
 
                         else:
-                            print >> sys.stderr, \
+                            log.error(
                                     _("License file %s not readable!") % (
                                             os.path.join(root, entitlement_file)
                                         )
+                                )
 
             else:
-                print >> sys.stderr, _("No entitlement directory found")
+                log.error(_("No entitlement directory found"))
 
             for entitlement_file in self.entitlement_files:
 
@@ -187,8 +188,8 @@ class Entitlement(object):
                 license.verify_certificate(customer_cert_file)
                 self.entitlement = license.get()
 
-        else:
-            print "Error reading entitlement certificate authority file"
+#        else:
+#            log.error(_("Error reading entitlement certificate authority file"))
 
     def get(self):
         if len(self.entitlement.keys()) == 0:


commit 7960e263a1522142bfb845eb32ee7cbf810e14ee
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:57:12 2012 +0100

    The idea is to return none, not whatever arbitrary string

diff --git a/pykolab/conf/__init__.py b/pykolab/conf/__init__.py
index 9092689..441c99b 100644
--- a/pykolab/conf/__init__.py
+++ b/pykolab/conf/__init__.py
@@ -528,10 +528,10 @@ class Conf(object):
                     return _dict[key]
                 else:
                     log.warning(_("Option does not exist in defaults."))
-                    return _("Not available")
+                    return None
             else:
                 log.warning(_("Option does not exist in defaults."))
-                return _("Not available")
+                return None
 
     def check_setting_config_file(self, value):
         if os.path.isfile(value):


commit 6aefc3863a3669a261d2b0d704ff561ae387e715
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:56:40 2012 +0100

    Unset add_domain from not being implemented yet

diff --git a/pykolab/cli/commands.py b/pykolab/cli/commands.py
index 045bc15..f1b9ac8 100644
--- a/pykolab/cli/commands.py
+++ b/pykolab/cli/commands.py
@@ -59,7 +59,6 @@ def __init__():
     register('add_group', not_yet_implemented, description="Not yet implemented")
     register('delete_group', not_yet_implemented, description="Not yet implemented")
 
-    register('add_domain', not_yet_implemented, description="Not yet implemented")
     register('delete_domain', not_yet_implemented, description="Not yet implemented")
 
 def list_commands(*args, **kw):


commit 2f5b7c672f0794614e9b1cdcb23e333dedb78809
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:55:12 2012 +0100

    Correct cmd_list_domains to use the configured domain_name_attribute

diff --git a/pykolab/cli/cmd_list_domains.py b/pykolab/cli/cmd_list_domains.py
index cf12ee4..fd2c7da 100644
--- a/pykolab/cli/cmd_list_domains.py
+++ b/pykolab/cli/cmd_list_domains.py
@@ -22,7 +22,6 @@ import commands
 import pykolab
 
 from pykolab.translate import _
-from pykolab import wap_client
 
 log = pykolab.getLogger('pykolab.cli')
 conf = pykolab.getConf()
@@ -31,21 +30,23 @@ def __init__():
     commands.register('list_domains', execute, description="List Kolab domains.")
 
 def execute(*args, **kw):
+    from pykolab import wap_client
     # Create the authentication object.
     # TODO: Binds with superuser credentials!
     wap_client.authenticate()
     domains = wap_client.domains_list()
 
-    #print "domains:", domains['list']
+    dna = conf.get('ldap', 'domain_name_attribute')
 
     print "%-39s %-40s" % ("Primary Domain Name Space","Secondary Domain Name Space(s)")
 
     # TODO: Take a hint in --quiet, and otherwise print out a nice table
     # with headers and such.
-    for domain_dn in domains['list'].keys():
-        if isinstance(domains['list'][domain_dn]['associateddomain'], list):
-            print domains['list'][domain_dn]['associateddomain'][0]
-            for domain_alias in domains['list'][domain_dn]['associateddomain'][1:]:
-                print "%-39s %-40s" % ('', domain_alias)
-        else:
-            print domains['list'][domain_dn]['associateddomain']
+    if isinstance(domains['list'], dict):
+        for domain_dn in domains['list'].keys():
+            if isinstance(domains['list'][domain_dn][dna], list):
+                print domains['list'][domain_dn][dna][0]
+                for domain_alias in domains['list'][domain_dn][dna][1:]:
+                    print "%-39s %-40s" % ('', domain_alias)
+            else:
+                print domains['list'][domain_dn][dna]


commit 10dd11e96ad0bb535573953984a6e4c086d8e0bc
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Mon May 14 11:52:06 2012 +0100

    Correct cmd_list_deleted_mailboxes

diff --git a/pykolab/cli/cmd_list_deleted_mailboxes.py b/pykolab/cli/cmd_list_deleted_mailboxes.py
index b29e977..90bcddd 100644
--- a/pykolab/cli/cmd_list_deleted_mailboxes.py
+++ b/pykolab/cli/cmd_list_deleted_mailboxes.py
@@ -21,6 +21,7 @@ import commands
 
 import pykolab
 
+from pykolab.imap import IMAP
 from pykolab.translate import _
 
 log = pykolab.getLogger('pykolab.cli')
@@ -33,6 +34,7 @@ def execute(*args, **kw):
     """
         List deleted mailboxes
     """
+    imap = IMAP()
     imap.connect()
     folders = imap.lm("DELETED/*")
     print "Deleted folders:"





More information about the commits mailing list