def test_02_flagsplit(self):
        """Test imaputil.flagsplit()"""
        res = imaputil.flagsplit(b'(\\Draft \\Deleted)')
        self.assertEqual(res, [b'\\Draft', b'\\Deleted'])

        res = imaputil.flagsplit(b'(FLAGS (\\Seen Old) UID 4807)')
        self.assertEqual(res, [b'FLAGS', b'(\\Seen Old)', b'UID', b'4807'])
Example #2
0
    def test_02_flagsplit(self):
        """Test imaputil.flagsplit()"""
        res = imaputil.flagsplit(b'(\\Draft \\Deleted)')
        self.assertEqual(res, [b'\\Draft', b'\\Deleted'])

        res = imaputil.flagsplit(b'(FLAGS (\\Seen Old) UID 4807)')
        self.assertEqual(res, [b'FLAGS', b'(\\Seen Old)', b'UID', b'4807'])
Example #3
0
 def getfolders(self):
     if self.folders != None:
         return self.folders
     retval = []
     imapobj = self.imapserver.acquireconnection()
     # check whether to list all folders, or subscribed only
     listfunction = imapobj.list
     if self.config.has_option(self.getsection(), 'subscribedonly'):
       if self.getconf('subscribedonly') == "yes":
         listfunction = imapobj.lsub
     try:
         listresult = listfunction(directory = self.imapserver.reference)[1]
     finally:
         self.imapserver.releaseconnection(imapobj)
     for string in listresult:
         if string == None or \
                (type(string) == types.StringType and string == ''):
             # Bug in imaplib: empty strings in results from
             # literals.
             continue
         flags, delim, name = imaputil.imapsplit(string)
         flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
         if '\\noselect' in flaglist:
             continue
         foldername = imaputil.dequote(name)
         if not self.folderfilter(foldername):
             self.ui.debug('imap',"Filtering out '%s' due to folderfilter" %\
                               foldername)
             continue
         retval.append(self.getfoldertype()(self.imapserver, foldername,
                                            self.nametrans(foldername),
                                            self.accountname, self))
     if len(self.folderincludes):
         imapobj = self.imapserver.acquireconnection()
         try:
             for foldername in self.folderincludes:
                 try:
                     imapobj.select(foldername, readonly = 1)
                 except OfflineImapError, e:
                     # couldn't select this folderinclude, so ignore folder.
                     if e.severity > OfflineImapError.ERROR.FOLDER:
                         raise
                     self.ui.error(e, exc_info()[2],
                                   'Invalid folderinclude:')
                     continue
                 retval.append(self.getfoldertype()(self.imapserver,
                                                    foldername,
                                                    self.nametrans(foldername),
                                                    self.accountname, self))
         finally:
             self.imapserver.releaseconnection(imapobj)
             
     retval.sort(lambda x, y: self.foldersort(x.getvisiblename(), y.getvisiblename()))
     self.folders = retval
     return retval
Example #4
0
    def getfolders(self):
        if self.folders != None:
            return self.folders
        retval = []
        imapobj = self.imapserver.acquireconnection()
        # check whether to list all folders, or subscribed only
        listfunction = imapobj.list
        if self.getconfboolean('subscribedonly', False):
            listfunction = imapobj.lsub
        try:
            listresult = listfunction(directory=self.imapserver.reference)[1]
        finally:
            self.imapserver.releaseconnection(imapobj)
        for string in listresult:
            if string == None or \
                   (type(string) == types.StringType and string == ''):
                # Bug in imaplib: empty strings in results from
                # literals.
                continue
            flags, delim, name = imaputil.imapsplit(string)
            flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
            if '\\noselect' in flaglist:
                continue
            foldername = imaputil.dequote(name)
            retval.append(self.getfoldertype()(self.imapserver, foldername,
                                               self))
            # filter out the folder?
            if not self.folderfilter(foldername):
                self.ui.debug(
                    'imap', "Filtering out '%s'[%s] due to folderfilt"
                    "er" % (foldername, self))
                retval[-1].sync_this = False
        # Add all folderincludes
        if len(self.folderincludes):
            imapobj = self.imapserver.acquireconnection()
            try:
                for foldername in self.folderincludes:
                    try:
                        imapobj.select(foldername, readonly=True)
                    except OfflineImapError, e:
                        # couldn't select this folderinclude, so ignore folder.
                        if e.severity > OfflineImapError.ERROR.FOLDER:
                            raise
                        self.ui.error(e,
                                      exc_info()[2], 'Invalid folderinclude:')
                        continue
                    retval.append(self.getfoldertype()(self.imapserver,
                                                       foldername, self))
            finally:
                self.imapserver.releaseconnection(imapobj)

        retval.sort(lambda x, y: self.foldersort(x.getvisiblename(),
                                                 y.getvisiblename()))
        self.folders = retval
        return self.folders
Example #5
0
    def getfolders(self):
        if self.folders != None:
            return self.folders
        retval = []
        imapobj = self.imapserver.acquireconnection()
        # check whether to list all folders, or subscribed only
        listfunction = imapobj.list
        if self.config.has_option(self.getsection(), 'subscribedonly'):
            if self.getconf('subscribedonly') == "yes":
                listfunction = imapobj.lsub
        try:
            listresult = listfunction(directory=self.imapserver.reference)[1]
        finally:
            self.imapserver.releaseconnection(imapobj)
        for string in listresult:
            if string == None or \
                   (type(string) == types.StringType and string == ''):
                # Bug in imaplib: empty strings in results from
                # literals.
                continue
            flags, delim, name = imaputil.imapsplit(string)
            flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
            if '\\noselect' in flaglist:
                continue
            foldername = imaputil.dequote(name)
            if not self.folderfilter(foldername):
                self.ui.debug('imap',"Filtering out '%s' due to folderfilter" %\
                                  foldername)
                continue
            retval.append(self.getfoldertype()(self.imapserver, foldername,
                                               self.nametrans(foldername),
                                               self.accountname, self))
        if len(self.folderincludes):
            imapobj = self.imapserver.acquireconnection()
            try:
                for foldername in self.folderincludes:
                    try:
                        imapobj.select(foldername, readonly=1)
                    except ValueError:
                        continue
                    retval.append(
                        self.getfoldertype()(self.imapserver, foldername,
                                             self.nametrans(foldername),
                                             self.accountname, self))
            finally:
                self.imapserver.releaseconnection(imapobj)

        retval.sort(lambda x, y: self.foldersort(x.getvisiblename(),
                                                 y.getvisiblename()))
        self.folders = retval
        return retval
Example #6
0
 def getfolders(self):
     if self.folders != None:
         return self.folders
     retval = []
     imapobj = self.imapserver.acquireconnection()
     # check whether to list all folders, or subscribed only
     listfunction = imapobj.list
     if self.config.has_option(self.getsection(), 'subscribedonly'):
       if self.getconf('subscribedonly') == "yes":
         listfunction = imapobj.lsub
     try:
         listresult = listfunction(directory = self.imapserver.reference)[1]
     finally:
         self.imapserver.releaseconnection(imapobj)
     for string in listresult:
         if string == None or \
                (type(string) == types.StringType and string == ''):
             # Bug in imaplib: empty strings in results from
             # literals.
             continue
         flags, delim, name = imaputil.imapsplit(string)
         flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
         if '\\noselect' in flaglist:
             continue
         foldername = imaputil.dequote(name)
         if not self.folderfilter(foldername):
             continue
         retval.append(self.getfoldertype()(self.imapserver, foldername,
                                            self.nametrans(foldername),
                                            self.accountname, self))
     if len(self.folderincludes):
         imapobj = self.imapserver.acquireconnection()
         try:
             for foldername in self.folderincludes:
                 try:
                     imapobj.select(foldername, readonly = 1)
                 except ValueError:
                     continue
                 retval.append(self.getfoldertype()(self.imapserver,
                                                    foldername,
                                                    self.nametrans(foldername),
                                                    self.accountname, self))
         finally:
             self.imapserver.releaseconnection(imapobj)
             
     retval.sort(lambda x, y: self.foldersort(x.getvisiblename(), y.getvisiblename()))
     self.folders = retval
     return retval
Example #7
0
    def getfolders(self):
        """Return a list of instances of OfflineIMAP representative folder."""

        if self.folders != None:
            return self.folders
        retval = []
        imapobj = self.imapserver.acquireconnection()
        # check whether to list all folders, or subscribed only
        listfunction = imapobj.list
        if self.getconfboolean('subscribedonly', False):
            listfunction = imapobj.lsub
        try:
            listresult = listfunction(directory=self.imapserver.reference)[1]
        finally:
            self.imapserver.releaseconnection(imapobj)
        for s in listresult:
            if s == None or \
                   (isinstance(s, basestring) and s == ''):
                # Bug in imaplib: empty strings in results from
                # literals. TODO: still relevant?
                continue
            flags, delim, name = imaputil.imapsplit(s)
            flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
            if '\\noselect' in flaglist:
                continue
            foldername = imaputil.dequote(name)
            retval.append(self.getfoldertype()(self.imapserver, foldername,
                                               self))
        # Add all folderincludes
        if len(self.folderincludes):
            imapobj = self.imapserver.acquireconnection()
            try:
                for foldername in self.folderincludes:
                    try:
                        imapobj.select(foldername, readonly=True)
                    except OfflineImapError as e:
                        # couldn't select this folderinclude, so ignore folder.
                        if e.severity > OfflineImapError.ERROR.FOLDER:
                            raise
                        self.ui.error(e,
                                      exc_info()[2], 'Invalid folderinclude:')
                        continue
                    retval.append(self.getfoldertype()(self.imapserver,
                                                       foldername, self))
            finally:
                self.imapserver.releaseconnection(imapobj)

        if self.foldersort is None:
            # default sorting by case insensitive transposed name
            retval.sort(key=lambda x: str.lower(x.getvisiblename()))
        else:
            # do foldersort in a python3-compatible way
            # http://bytes.com/topic/python/answers/844614-python-3-sorting-comparison-function
            def cmp2key(mycmp):
                """Converts a cmp= function into a key= function
                We need to keep cmp functions for backward compatibility"""
                class K:
                    def __init__(self, obj, *args):
                        self.obj = obj

                    def __cmp__(self, other):
                        return mycmp(self.obj.getvisiblename(),
                                     other.obj.getvisiblename())

                return K

            retval.sort(key=cmp2key(self.foldersort))

        self.folders = retval
        return self.folders
Example #8
0
    def getfolders(self):
        if self.folders != None:
            return self.folders
        retval = []
        imapobj = self.imapserver.acquireconnection()
        # check whether to list all folders, or subscribed only
        listfunction = imapobj.list
        if self.getconfboolean('subscribedonly', False):
            listfunction = imapobj.lsub
        try:
            listresult = listfunction(directory = self.imapserver.reference)[1]
        finally:
            self.imapserver.releaseconnection(imapobj)
        for string in listresult:
            if string == None or \
                   (isinstance(string, basestring) and string == ''):
                # Bug in imaplib: empty strings in results from
                # literals. TODO: still relevant?
                continue
            flags, delim, name = imaputil.imapsplit(string)
            flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
            if '\\noselect' in flaglist:
                continue
            foldername = imaputil.dequote(name)
            retval.append(self.getfoldertype()(self.imapserver, foldername,
                                               self))
        # Add all folderincludes
        if len(self.folderincludes):
            imapobj = self.imapserver.acquireconnection()
            try:
                for foldername in self.folderincludes:
                    try:
                        imapobj.select(foldername, readonly = True)
                    except OfflineImapError as e:
                        # couldn't select this folderinclude, so ignore folder.
                        if e.severity > OfflineImapError.ERROR.FOLDER:
                            raise
                        self.ui.error(e, exc_info()[2],
                                      'Invalid folderinclude:')
                        continue
                    retval.append(self.getfoldertype()(self.imapserver,
                                                       foldername,
                                                       self))
            finally:
                self.imapserver.releaseconnection(imapobj)

        if self.foldersort is None:
            # default sorting by case insensitive transposed name
            retval.sort(key=lambda x: str.lower(x.getvisiblename()))
        else:
            # do foldersort in a python3-compatible way
            # http://bytes.com/topic/python/answers/844614-python-3-sorting-comparison-function
            def cmp2key(mycmp):
                """Converts a cmp= function into a key= function
                We need to keep cmp functions for backward compatibility"""
                class K:
                    def __init__(self, obj, *args):
                        self.obj = obj
                    def __cmp__(self, other):
                        return mycmp(self.obj.getvisiblename(), other.obj.getvisiblename())
                return K
            retval.sort(key=cmp2key(self.foldersort))

        self.folders = retval
        return self.folders
Example #9
0
    def getfolders(self):
        """Return a list of instances of OfflineIMAP representative folder."""

        if self.folders is not None:
            return self.folders
        retval = []
        imapobj = self.imapserver.acquireconnection()
        # check whether to list all folders, or subscribed only
        listfunction = imapobj.list
        if self.getconfboolean('subscribedonly', False):
            listfunction = imapobj.lsub

        try:
            result, listresult = \
                listfunction(directory=self.imapserver.reference, pattern='"*"')
            if result != 'OK':
                raise OfflineImapError("Could not list the folders for"
                                       " repository %s. Server responded: %s" %
                                       (self.name, str(listresult)),
                                       OfflineImapError.ERROR.FOLDER)
        finally:
            self.imapserver.releaseconnection(imapobj)

        for fldr in listresult:
            if fldr is None or (isinstance(fldr, str) and fldr == ''):
                # Bug in imaplib: empty strings in results from
                # literals. TODO: still relevant?
                continue
            try:
                flags, delim, name = imaputil.imapsplit(fldr)
            except ValueError:
                self.ui.error(
                    "could not correctly parse server response; got: %s" % fldr)
                raise
            flaglist = [x.lower() for x in imaputil.flagsplit(flags)]
            if '\\noselect' in flaglist:
                continue
            retval.append(self.getfoldertype()(self.imapserver, name,
                                               self))
        # Add all folderincludes
        if len(self.folderincludes):
            imapobj = self.imapserver.acquireconnection()
            try:
                for foldername in self.folderincludes:
                    try:
                        imapobj.select(imaputil.utf8_IMAP(foldername),
                                       readonly=True)
                    except OfflineImapError as exc:
                        # couldn't select this folderinclude, so ignore folder.
                        if exc.severity > OfflineImapError.ERROR.FOLDER:
                            raise
                        self.ui.error(exc, exc_info()[2],
                                      'Invalid folderinclude:')
                        continue
                    retval.append(self.getfoldertype()(
                        self.imapserver, foldername, self, decode=False))
            finally:
                self.imapserver.releaseconnection(imapobj)

        if self.foldersort is None:
            # default sorting by case insensitive transposed name
            retval.sort(key=lambda x: str.lower(x.getvisiblename()))
        else:
            # do foldersort in a python3-compatible way
            # http://bytes.com/topic/python/answers/ \
            # 844614-python-3-sorting-comparison-function
            def cmp2key(mycmp):
                """Converts a cmp= function into a key= function
                We need to keep cmp functions for backward compatibility"""

                class K:
                    """
                    Class to compare getvisiblename() between two objects.
                    """
                    def __init__(self, obj, *args):
                        self.obj = obj

                    def __cmp__(self, other):
                        return mycmp(self.obj.getvisiblename(),
                                     other.obj.getvisiblename())

                    def __lt__(self, other):
                        return self.__cmp__(other) < 0

                    def __le__(self, other):
                        return self.__cmp__(other) <= 0

                    def __gt__(self, other):
                        return self.__cmp__(other) > 0

                    def __ge__(self, other):
                        return self.__cmp__(other) >= 0

                    def __eq__(self, other):
                        return self.__cmp__(other) == 0

                    def __ne__(self, other):
                        return self.__cmp__(other) != 0

                return K

            retval.sort(key=cmp2key(self.foldersort))

        self.folders = retval
        return self.folders