Changeset View
Changeset View
Standalone View
Standalone View
pykolab/cli/cmd_sync_mailhost_attrs.py
Show First 20 Lines • Show All 89 Lines • ▼ Show 20 Lines | def execute(*args, **kw): | ||||
if len(imap_domains_not_domains) > 0: | if len(imap_domains_not_domains) > 0: | ||||
for domain in imap_domains_not_domains: | for domain in imap_domains_not_domains: | ||||
folders = [] | folders = [] | ||||
folders.extend(imap.lm('shared/%%@%s' % (domain))) | folders.extend(imap.lm('shared/%%@%s' % (domain))) | ||||
folders.extend(imap.lm('user/%%@%s' % (domain))) | folders.extend(imap.lm('user/%%@%s' % (domain))) | ||||
for folder in folders: | for folder in folders: | ||||
r_folder = folder | |||||
if not folder.startswith('shared/'): | |||||
r_folder = '/'.join(folder.split('/')[1:]) | |||||
if conf.delete: | if conf.delete: | ||||
if conf.dry_run: | if conf.dry_run: | ||||
if not folder.split('/')[0] == 'shared': | if not folder.startswith('shared/'): | ||||
log.warning(_("No recipients for '%s' (would have deleted the mailbox if not for --dry-run)!") % ('/'.join(folder.split('/')[1:]))) | log.warning(_("No recipients for '%s' (would have deleted the mailbox if not for --dry-run)!") % (r_folder)) | ||||
else: | else: | ||||
continue | continue | ||||
else: | else: | ||||
if not '/'.join(folder.split('/')[0]) == 'shared': | if not folder.startswith('shared/'): | ||||
log.info(_("Deleting mailbox '%s' because it has no recipients") % (folder)) | log.info(_("Deleting mailbox '%s' because it has no recipients") % (folder)) | ||||
try: | try: | ||||
imap.dm(folder) | imap.dm(folder) | ||||
except Exception, errmsg: | except Exception, errmsg: | ||||
log.error(_("An error occurred removing mailbox %r: %r") % (folder, errmsg)) | log.error(_("An error occurred removing mailbox %r: %r") % (folder, errmsg)) | ||||
else: | else: | ||||
log.info(_("Not automatically deleting shared folder '%s'") % (folder)) | log.info(_("Not automatically deleting shared folder '%s'") % (folder)) | ||||
else: | else: | ||||
log.warning(_("No recipients for '%s' (use --delete to delete)!") % ('/'.join(folder.split('/')[1:]))) | log.warning(_("No recipients for '%s' (use --delete to delete)!") % (r_folder)) | ||||
for primary in list(set(domains.values())): | for primary in list(set(domains.values())): | ||||
secondaries = [x for x in domains.keys() if domains[x] == primary] | secondaries = [x for x in domains.keys() if domains[x] == primary] | ||||
folders = [] | folders = [] | ||||
folders.extend(imap.lm('shared/%%@%s' % (primary))) | folders.extend(imap.lm('shared/%%@%s' % (primary))) | ||||
folders.extend(imap.lm('user/%%@%s' % (primary))) | folders.extend(imap.lm('user/%%@%s' % (primary))) | ||||
for secondary in secondaries: | for secondary in secondaries: | ||||
folders.extend(imap.lm('shared/%%@%s' % (secondary))) | folders.extend(imap.lm('shared/%%@%s' % (secondary))) | ||||
folders.extend(imap.lm('user/%%@%s' % (secondary))) | folders.extend(imap.lm('user/%%@%s' % (secondary))) | ||||
auth = Auth(domain=primary) | auth = Auth(domain=primary) | ||||
auth.connect() | auth.connect() | ||||
for folder in folders: | for folder in folders: | ||||
server = imap.user_mailbox_server(folder) | server = imap.user_mailbox_server(folder) | ||||
recipient = auth.find_recipient('/'.join(folder.split('/')[1:])) | r_folder = folder | ||||
if folder.startswith('shared/'): | |||||
recipient = auth.find_folder_resource(folder) | |||||
else: | |||||
r_folder = '/'.join(folder.split('/')[1:]) | |||||
recipient = auth.find_recipient(r_folder) | |||||
if (isinstance(recipient, list)): | if (isinstance(recipient, list)): | ||||
if len(recipient) > 1: | if len(recipient) > 1: | ||||
log.warning(_("Multiple recipients for '%s'!") % ('/'.join(folder.split('/')[1:]))) | log.warning(_("Multiple recipients for '%s'!") % (r_folder)) | ||||
continue | continue | ||||
elif len(recipient) == 0: | elif len(recipient) == 0: | ||||
if conf.delete: | if conf.delete: | ||||
if conf.dry_run: | if conf.dry_run: | ||||
if not folder.split('/')[0] == 'shared': | if not folder.startswith('shared/'): | ||||
log.warning(_("No recipients for '%s' (would have deleted the mailbox if not for --dry-run)!") % ('/'.join(folder.split('/')[1:]))) | log.warning(_("No recipients for '%s' (would have deleted the mailbox if not for --dry-run)!") % (r_folder)) | ||||
else: | else: | ||||
continue | continue | ||||
else: | else: | ||||
if not '/'.join(folder.split('/')[0]) == 'shared': | if not folder.startswith('shared/'): | ||||
log.info(_("Deleting mailbox '%s' because it has no recipients") % (folder)) | log.info(_("Deleting mailbox '%s' because it has no recipients") % (folder)) | ||||
try: | try: | ||||
imap.dm(folder) | imap.dm(folder) | ||||
except Exception, errmsg: | except Exception, errmsg: | ||||
log.error(_("An error occurred removing mailbox %r: %r") % (folder, errmsg)) | log.error(_("An error occurred removing mailbox %r: %r") % (folder, errmsg)) | ||||
else: | else: | ||||
log.info(_("Not automatically deleting shared folder '%s'") % (folder)) | log.info(_("Not automatically deleting shared folder '%s'") % (folder)) | ||||
else: | else: | ||||
log.warning(_("No recipients for '%s' (use --delete to delete)!") % ('/'.join(folder.split('/')[1:]))) | log.warning(_("No recipients for '%s' (use --delete to delete)!") % (r_folder)) | ||||
continue | continue | ||||
else: | else: | ||||
mailhost = auth.get_entry_attribute(primary, recipient, 'mailhost') | mailhost = auth.get_entry_attribute(primary, recipient, 'mailhost') | ||||
if not server == mailhost: | if not server == mailhost: | ||||
if conf.dry_run: | if conf.dry_run: | ||||
print folder, server, mailhost | print folder, server, mailhost | ||||
else: | else: | ||||
auth.set_entry_attribute(primary, recipient, 'mailhost', server) | auth.set_entry_attribute(primary, recipient, 'mailhost', server) | ||||
folders = [] | folders = [] | ||||
folders.extend(imap.lm("shared/%%")) | folders.extend(imap.lm("shared/%%")) | ||||
folders.extend(imap.lm("user/%%")) | folders.extend(imap.lm("user/%%")) | ||||
auth = Auth() | auth = Auth() | ||||
auth.connect() | auth.connect() | ||||
for folder in folders: | for folder in folders: | ||||
server = imap.user_mailbox_server(folder) | server = imap.user_mailbox_server(folder) | ||||
if folder.startswith('shared/'): | |||||
recipient = auth.find_folder_resource(folder) | |||||
else: | |||||
recipient = auth.find_recipient('/'.join(folder.split('/')[1:])) | recipient = auth.find_recipient('/'.join(folder.split('/')[1:])) | ||||
print folder, server, recipient | print folder, server, recipient |