diff options
Diffstat (limited to 'archive_folder.py')
-rwxr-xr-x | archive_folder.py | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/archive_folder.py b/archive_folder.py index 4b86707..3d52918 100755 --- a/archive_folder.py +++ b/archive_folder.py @@ -31,6 +31,7 @@ class MessageError(IOError): Capas = collections.namedtuple('Capas', ['MOVE', 'UIDPLUS']) SEP_RE = re.compile(r'\s+"([/.])"\s+') +FOLDER_RE = re.compile(r'\s+"[/.]"\s+') class Message(object): @@ -231,6 +232,14 @@ class EmailServer(object): dir = Folder(self.box, arch_dir, create=True) # dir.move_messages(msg_ids) + def list_folders(self): + ok, data = self.box.list() + if ok != 'OK': + raise IOError('Cannot list folders!') + + return sorted([FOLDER_RE.split(x.decode())[1] for x in data], + key=str.lower) + def __enter__(self): return self @@ -244,11 +253,12 @@ if __name__ == '__main__': locale.setlocale(locale.LC_ALL, 'en_US') argp = argparse.ArgumentParser() subps = argp.add_subparsers(dest='cmd') - subp_list = subps.add_parser('servers', help='List available servers (by keywords)') + subp_servers = subps.add_parser('servers', help='List available servers (by keywords)') + subp_list = subps.add_parser('list', help='List all folders') subp_arc = subps.add_parser('archive', help='Archive folder[s]') subp_arc.add_argument('-d', type=int, default=14, dest='days', help='How old messages we should keep') - subp_arc.add_argument('-s', '--server', default='localhost', + subp_arc.add_argument('-s', '--server', help='Symbolic name of the server to be used') subp_arc.add_argument('folder', help='Folder which should be archived') subp_arc.add_argument('archive', help='Root folder to store annual archives to') @@ -259,6 +269,10 @@ if __name__ == '__main__': config = EmailServer.get_config() sects = set(config.keys()) - {'DEFAULT', 'general'} print('Available servers:\n%s' % tuple(sects)) + elif args.cmd == 'list': + myStore = EmailServer() + folders = myStore.list_folders() + print('\n'.join(folders)) else: before = date.today() - timedelta(days=args.days) with EmailServer(args.server, args.archive) as myStore: |