def run(): mc = MailChimp(key) list = settings.MAILCHIMP_LISTID # ---------------------------------------------------------------------- # handle unsubscribes first emails = [] unsub = ListEvent.objects.filter(subscribe=False) for u in unsub: print "unsubscribing", fix_encoding(u.user.visible_name()), u.email emails.append(u.email) u.delete() if len(emails): result = mc.listBatchUnsubscribe(id=list, emails=emails, delete_member=True, send_goodbye=False, send_notify=False) print_result(result) # ---------------------------------------------------------------------- # subscribe new people # (actually, this should never be used... since new subscriptions have # been rolled into ProfileEvents) emails = [] sub = ListEvent.objects.filter(subscribe=True) for s in sub: print "subscribing", fix_encoding( s.user.visible_name()), s.user.email entry = build_profile(s.user) entry['GROUPINGS'] = build_new_groups(s.user) emails.append(entry) s.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails, double_optin=False, update_existing=False) print_result(result) # ---------------------------------------------------------------------- # profile info updates # handle email address changes separately, since we can't batch those profile = ProfileEvent.objects.filter(email__isnull=False) for p in profile: if p.email: print "updating with new email", fix_encoding( p.user.visible_name()), p.email, p.user.email entry = build_profile(p.user) entry['GROUPINGS'] = build_new_groups(p.user) p.delete() result = mc.listSubscribe(id=list, email_address=p.email, merge_vars=entry, double_optin=False, send_welcome=False, update_existing=True, replace_interests=False) print result # and everything else profile = ProfileEvent.objects.all() for p in profile: print "updating", fix_encoding(p.user.visible_name()), p.user.email entry = build_profile(p.user) entry['GROUPINGS'] = build_new_groups(p.user) emails.append(entry) p.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails, double_optin=False, update_existing=True, replace_interests=False) print_result(result) # ---------------------------------------------------------------------- # group joins emails = {} join = GroupEvent.objects.filter(join=True) for j in join: print fix_encoding( j.user.visible_name()), j.user.email, "joining", fix_encoding( j.group.name) # if they're not already on the list, build a profile for them if not emails.has_key(j.user.id): emails[j.user.id] = build_profile(j.user) emails[j.user.id]['GROUPINGS'] = [] # add this group to the user's list of groups emails[j.user.id]['GROUPINGS'] = add_group( j.group, emails[j.user.id]['GROUPINGS']) # ok, done. j.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails.values(), double_optin=False, update_existing=True, replace_interests=False) print_result(result) # ---------------------------------------------------------------------- # group leaves emails = {} leave = GroupEvent.objects.filter(join=False) for l in leave: print fix_encoding( l.user.visible_name()), l.user.email, "leaving", fix_encoding( l.group.name) # if they're not already on the list, build a profile for them try: if l.user.id not in emails: emails[l.user.id] = build_profile(l.user) info = mc.listMemberInfo(id=list, email_address=l.user.email) emails[ l.user.id]['GROUPINGS'] = info['merges']['GROUPINGS'] # remove group from list emails[l.user.id]['GROUPINGS'] = remove_group( l.group, emails[l.user.id]['GROUPINGS']) except: print "--ERROR" # ok, done. l.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails.values(), double_optin=False, update_existing=True, replace_interests=True) print_result(result)
def run(): mc = MailChimp(key) list = settings.MAILCHIMP_LISTID # ---------------------------------------------------------------------- # handle unsubscribes first emails = [] unsub = ListEvent.objects.filter(subscribe=False) for u in unsub: print "unsubscribing", to_ascii(u.user.visible_name()), u.email emails.append(u.email) u.delete() if len(emails): result = mc.listBatchUnsubscribe(id=list, emails=emails, delete_member=True, send_goodbye=False, send_notify=False) print_result(result) # ---------------------------------------------------------------------- # subscribe new people # (actually, this should never be used... since new subscriptions have # been rolled into ProfileEvents) emails = [] sub = ListEvent.objects.filter(subscribe=True) for s in sub: print "subscribing", to_ascii(s.user.visible_name()), s.user.email entry = build_profile(s.user) entry['GROUPINGS'] = build_new_groups(s.user) emails.append(entry) s.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails, double_optin=False, update_existing=False) print_result(result) # ---------------------------------------------------------------------- # profile info updates # handle email address changes separately, since we can't batch those profile = ProfileEvent.objects.filter(email__isnull=False) for p in profile: if p.email: print "updating with new email", to_ascii(p.user.visible_name()), p.email, p.user.email entry = build_profile(p.user) entry['GROUPINGS'] = build_new_groups(p.user) p.delete() result = mc.listSubscribe(id=list, email_address=p.email, merge_vars=entry, double_optin=False, send_welcome=False, update_existing=True, replace_interests=False) print result # and everything else profile = ProfileEvent.objects.all() for p in profile: print "updating", to_ascii(p.user.visible_name()), p.user.email entry = build_profile(p.user) entry['GROUPINGS'] = build_new_groups(p.user) emails.append(entry) p.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails, double_optin=False, update_existing=True, replace_interests=False) print_result(result) # ---------------------------------------------------------------------- # group joins emails = {} join = GroupEvent.objects.filter(join=True) for j in join: print to_ascii(j.user.visible_name()), j.user.email, "joining", fix_encoding(j.group.name) # if they're not already on the list, build a profile for them if not emails.has_key(j.user.id): emails[j.user.id] = build_profile(j.user) emails[j.user.id]['GROUPINGS'] = [] # add this group to the user's list of groups emails[j.user.id]['GROUPINGS'] = add_group(j.group, emails[j.user.id]['GROUPINGS']) # ok, done. j.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails.values(), double_optin=False, update_existing=True, replace_interests=False) print_result(result) # ---------------------------------------------------------------------- # group leaves emails = {} leave = GroupEvent.objects.filter(join=False) for l in leave: print to_ascii(l.user.visible_name()), l.user.email, "leaving", fix_encoding(l.group.name) # if they're not already on the list, build a profile for them try: if l.user.id not in emails: emails[l.user.id] = build_profile(l.user) info = mc.listMemberInfo(id=list, email_address=l.user.email) emails[l.user.id]['GROUPINGS'] = info['merges']['GROUPINGS'] # remove group from list emails[l.user.id]['GROUPINGS'] = remove_group(l.group, emails[l.user.id]['GROUPINGS']) except: print "--ERROR" # ok, done. l.delete() if len(emails): result = mc.listBatchSubscribe(id=list, batch=emails.values(), double_optin=False, update_existing=True, replace_interests=True) print_result(result)