diff --git a/emencia/django/newsletter/management/commands/bad_emails.xlsx b/emencia/django/newsletter/management/commands/bad_emails.xlsx new file mode 100644 index 00000000..8b96ffb8 Binary files /dev/null and b/emencia/django/newsletter/management/commands/bad_emails.xlsx differ diff --git a/emencia/django/newsletter/management/commands/fill_contacts.py b/emencia/django/newsletter/management/commands/fill_contacts.py new file mode 100644 index 00000000..1664c7a4 --- /dev/null +++ b/emencia/django/newsletter/management/commands/fill_contacts.py @@ -0,0 +1,77 @@ +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) +