Changeset View
Changeset View
Standalone View
Standalone View
pykolab/imap/cyrus.py
Show All 11 Lines | |||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | # GNU General Public License for more details. | ||||
# You should have received a copy of the GNU General Public License | # You should have received a copy of the GNU General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | # | ||||
from __future__ import print_function | |||||
import cyruslib | import cyruslib | ||||
import sys | import sys | ||||
import time | import time | ||||
from urlparse import urlparse | from urlparse import urlparse | ||||
import pykolab | import pykolab | ||||
▲ Show 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | class Cyrus(cyruslib.CYRUS): | ||||
def login(self, *args, **kw): | def login(self, *args, **kw): | ||||
""" | """ | ||||
Login to the Cyrus IMAP server through cyruslib.CYRUS, but set our | Login to the Cyrus IMAP server through cyruslib.CYRUS, but set our | ||||
hierarchy separator. | hierarchy separator. | ||||
""" | """ | ||||
try: | try: | ||||
cyruslib.CYRUS.login(self, *args, **kw) | cyruslib.CYRUS.login(self, *args, **kw) | ||||
except cyruslib.CYRUSError, errmsg: | except cyruslib.CYRUSError as errmsg: | ||||
log.error("Login to Cyrus IMAP server failed: %r", errmsg) | log.error("Login to Cyrus IMAP server failed: %r", errmsg) | ||||
except Exception, errmsg: | except Exception as errmsg: | ||||
log.exception(errmsg) | log.exception(errmsg) | ||||
self.separator = self.SEP | self.separator = self.SEP | ||||
try: | try: | ||||
self._id() | self._id() | ||||
except Exception, errmsg: | except Exception: | ||||
pass | pass | ||||
log.debug( | log.debug( | ||||
_("Continuing with separator: %r") % (self.separator), | _("Continuing with separator: %r") % (self.separator), | ||||
level=8 | level=8 | ||||
) | ) | ||||
self.murder = False | self.murder = False | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | def find_mailfolder_server(self, mailfolder): | ||||
log.debug( | log.debug( | ||||
_("Checking actual backend server for folder %s " + | _("Checking actual backend server for folder %s " + | ||||
"through annotations") % ( | "through annotations") % ( | ||||
mailfolder | mailfolder | ||||
), | ), | ||||
level=8 | level=8 | ||||
) | ) | ||||
if self.mbox.has_key(mailfolder): | if mailfolder in self.mbox: | ||||
log.debug( | log.debug( | ||||
_( | _( | ||||
"Possibly reproducing the find " + | "Possibly reproducing the find " + | ||||
"mailfolder server answer from " + | "mailfolder server answer from " + | ||||
"previously detected and stored " + | "previously detected and stored " + | ||||
"annotation value: %r" | "annotation value: %r" | ||||
) % ( | ) % ( | ||||
self.mbox[mailfolder] | self.mbox[mailfolder] | ||||
Show All 12 Lines | def find_mailfolder_server(self, mailfolder): | ||||
while 1: | while 1: | ||||
num_try += 1 | num_try += 1 | ||||
annotations = self._getannotation( | annotations = self._getannotation( | ||||
'"%s"' % (mailfolder), | '"%s"' % (mailfolder), | ||||
ann_path | ann_path | ||||
) | ) | ||||
if annotations.has_key(mailfolder): | if mailfolder in annotations: | ||||
if annotations[mailfolder].has_key(s_ann_path): | if s_ann_path in annotations[mailfolder]: | ||||
break | break | ||||
if max_tries <= num_try: | if max_tries <= num_try: | ||||
log.error( | log.error( | ||||
_("Could not get the annotations after %s tries.") % ( | _("Could not get the annotations after %s tries.") % ( | ||||
num_try | num_try | ||||
) | ) | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 116 Lines • ▼ Show 20 Lines | def _setannotation(self, mailfolder, annotation, value, shared=False): | ||||
annotation, | annotation, | ||||
mailfolder | mailfolder | ||||
), | ), | ||||
level=8 | level=8 | ||||
) | ) | ||||
try: | try: | ||||
self.setannotation(mailfolder, annotation, value, shared) | self.setannotation(mailfolder, annotation, value, shared) | ||||
except cyruslib.CYRUSError, errmsg: | except cyruslib.CYRUSError as errmsg: | ||||
log.error( | log.error( | ||||
_("Could not set annotation %r on mail folder %r: %r") % ( | _("Could not set annotation %r on mail folder %r: %r") % ( | ||||
annotation, | annotation, | ||||
mailfolder, | mailfolder, | ||||
errmsg | errmsg | ||||
) | ) | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | def undelete_mailfolder( | ||||
target_folder = self.folder_utf7(target_folder) | target_folder = self.folder_utf7(target_folder) | ||||
if not target_server == source_server: | if not target_server == source_server: | ||||
self.xfer(undelete_folder, target_server) | self.xfer(undelete_folder, target_server) | ||||
self.rename(undelete_folder, target_folder) | self.rename(undelete_folder, target_folder) | ||||
else: | else: | ||||
if not target_server == source_server: | if not target_server == source_server: | ||||
print >> sys.stdout, \ | print(_("Would have transferred %s from %s to %s") % ( | ||||
_("Would have transferred %s from %s to %s") % ( | |||||
undelete_folder, | undelete_folder, | ||||
source_server, | source_server, | ||||
target_server | target_server | ||||
) | ), file=sys.stdout) | ||||
print >> sys.stdout, \ | print(_("Would have renamed %s to %s") % ( | ||||
_("Would have renamed %s to %s") % ( | |||||
undelete_folder, | undelete_folder, | ||||
target_folder | target_folder | ||||
) | ), file=sys.stdout) | ||||
def parse_mailfolder(self, mailfolder): | def parse_mailfolder(self, mailfolder): | ||||
""" | """ | ||||
Parse a mailfolder name to it's parts. | Parse a mailfolder name to it's parts. | ||||
Takes a fully qualified mailfolder or mailfolder sub-folder. | Takes a fully qualified mailfolder or mailfolder sub-folder. | ||||
""" | """ | ||||
mbox = { | mbox = { | ||||
▲ Show 20 Lines • Show All 110 Lines • Show Last 20 Lines |