From e72b25b8c2b40791d1ab0638efc6b55061c6ac32 Mon Sep 17 00:00:00 2001 From: Christian Hoffmann Date: Mon, 28 Sep 2015 15:31:40 +0200 Subject: [PATCH] Improve User lookup performance (fixes issue #29) The previous code always tried to retrieve the underlying mapiobj. This is not always needed and may involve multiple network round-trips. Therefore, this commit lazy-loads the mapiobj instance so that simple user attribute retrieval can be executed without loading this object at all. --- zarafa/__init__.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/zarafa/__init__.py b/zarafa/__init__.py index f742f52..d197122 100644 --- a/zarafa/__init__.py +++ b/zarafa/__init__.py @@ -2629,7 +2629,13 @@ def __init__(self, name, server=None): self._ecuser = self.server.sa.GetUser(self.server.sa.ResolveUserName(self._name, MAPI_UNICODE), MAPI_UNICODE) except MAPIErrorNotFound: raise ZarafaException("no such user: '%s'" % name) - self.mapiobj = self.server.mapisession.OpenEntry(self._ecuser.UserID, None, 0) + self._mapiobj = None + + @property + def mapiobj(self): + if not self._mapiobj: + self._mapiobj = self.server.mapisession.OpenEntry(self._ecuser.UserID, None, 0) + return self._mapiobj @property def name(self):