Import contacts script

remotes/origin/1203
Nazar Kotjuk 10 years ago
parent b8ff4735c2
commit 1daa320e2a
  1. BIN
      emencia/django/newsletter/management/commands/bad_emails.xlsx
  2. 77
      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)
Loading…
Cancel
Save