import csv import os import requests from django.utils import timezone from django.db import IntegrityError import dateutil.parser from core.models import Membership, Payment from registration.models import Member def email_generator(): url = 'http://randomword.setgetgo.com/get.php' local = [] for idx in range(2): r = requests.get(url) local.append(r.text) return '{0}.{1}@example.com'.format(*local) def get_payment_type(pt): payment_types = Payment.payment_choices try: return [payment_type for payment_type in payment_types if payment_type[1].lower() == pt.lower()][0] except IndexError: return 'UNKNOWN', 'Unknown' def member_import(): filename = os.path.join(os.getcwd(), '2016 BCBC Membership Agreement (Responses) - Form Responses 1.csv') with open(filename, newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: try: dob = dateutil.parser.parse(row.get('dob', None)) except ValueError: dob = None try: waiver = dateutil.parser.parse(row.get('signed', None)) except ValueError: waiver = None try: renewed_at = dateutil.parser.parse(row.get('timestamp', None)) except ValueError: renewed_at = timezone.now() try: new_member = Member.objects.create( email=row.get('email', None), email_consent=row.get('email_consent', False), first_name=row.get('first_name'), last_name=row.get('last_name'), preferred_name=row.get('handle', None), date_of_birth=dob, guardian_name=row.get('guardian', None), phone=row.get('phone', None), street=row.get('address', None), city=row.get('city', None), province=row.get('province', None), country=row.get('country', None), post_code=row.get('postal', None), waiver=waiver ) payment = Payment.objects.create( type=get_payment_type(row.get('payment'))[0], ) Membership.objects.create( renewed_at=renewed_at, self_identification=row.get('self_identification', None), gender=row.get('gender', None), member=new_member, payment=payment ) except IntegrityError as e: print(e) print(row.get('first_name'), row.get('last_name'), row.get('email'))