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