from datetime import timedelta, datetime import MySQLdb from MySQLdb.cursors import DictCursor from django.core.management.base import NoArgsCommand from django.conf import settings from emencia.django.newsletter.models import Contact, ContactSettings import xlrd from accounts.models import User BAD_EMAILS_PATH = settings.SITE_ROOT + '/emencia/django/newsletter/management/commands/bad_emails.xlsx' def validateEmail( email ): from django.core.validators import validate_email from django.core.exceptions import ValidationError try: validate_email( email ) return True except ValidationError: return False def get_validated_emails(emails): # remove not emails result = [email for email in emails if validateEmail(email)] # bad emails result = [email for email in result if email[:5] != 'info@'] result = [email for email in result if email[:6] != 'admin@'] result = [email for email in result if email[:6] != 'sales@'] result = [email for email in result if email[:5] != 'sale@'] # bad from file f = open(BAD_EMAILS_PATH) book = xlrd.open_workbook(file_contents=f.read()) sheet = book.sheet_by_index(0) bad_emails = [sheet.row_values(row_number)[0] for row_number in range(sheet.nrows)] result = list(set(result) - set(bad_emails)) return result def handle_email(email, cursor): from theme.models import Theme # get theme ids sql = "select categories_id from cat_to_subsc WHERE email='{0}';" cursor.execute(sql.format(email)) theme_ids = [item['categories_id'] for item in cursor.fetchall() if item.get('categories_id')] # create contact try: user = User.objects.get(username=email) except User.DoesNotExist: user = None contact = Contact.objects.create(email=email, activated=True, user=user) setting = ContactSettings.objects.create(contact=contact) setting.theme = Theme.objects.filter(id__in=theme_ids) print(email) class Command(NoArgsCommand): def handle(self, *args, **options): db = MySQLdb.connect(host="localhost", user="kotzilla", passwd="qazedc", db="old_expomap", charset='utf8', cursorclass=DictCursor) cursor = db.cursor() sql = "select email from cat_to_subsc GROUP BY `email`" cursor.execute(sql) result = cursor.fetchall() # validate emails unique_emails = [item['email'].strip() for item in result] correct_emails = get_validated_emails(unique_emails) # for testing for email in correct_emails: handle_email(email, cursor)