diff --git a/import_csv.py b/import_csv.py new file mode 100644 index 0000000..3f51d27 --- /dev/null +++ b/import_csv.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Import a CSV - Format as follows: + , + +Example: + myuser@mydomain.tld,myphoto.jpeg + +This will create or update an existing user and assign the image +to the given address. +""" + +import os +from os.path import isfile +import sys +from io import BytesIO +import csv +import django + +os.environ.setdefault( + "DJANGO_SETTINGS_MODULE", "ivatar.settings" +) # pylint: disable=wrong-import-position +django.setup() # pylint: disable=wrong-import-position +from django.contrib.auth.models import User +from PIL import Image +from ivatar.settings import JPEG_QUALITY +from ivatar.ivataraccount.models import ConfirmedEmail +from ivatar.ivataraccount.models import Photo +from ivatar.ivataraccount.models import file_format + +if len(sys.argv) < 2: + print("First argument to '%s' must be the path to the CSV" % sys.argv[0]) + exit(-255) + +if not isfile(sys.argv[1]): + print("First argument to '%s' must be a path to the CSV" % sys.argv[0]) + exit(-255) + +PATH = sys.argv[1] +with open(PATH, newline="") as csvfile: + contactreader = csv.reader(csvfile, delimiter=",") + for row in contactreader: + mailaddr = row[0] + image = row[1] + + if not isfile(image): + print("File '%s' doesn't exist - cannot add" % image) + continue + + print("Adding: %s" % mailaddr) + + (user, created) = User.objects.get_or_create(username=mailaddr) + if not user.confirmedemail_set.count() < 1: + ConfirmedEmail.objects.get_or_create( + email=mailaddr, + user=user, + ) + user.save() + with open(image, "rb") as avatar: + pilobj = Image.open(avatar) + out = BytesIO() + pilobj.save(out, pilobj.format, quality=JPEG_QUALITY) + out.seek(0) + photo = None + if user.photo_set.count() < 1: + photo = Photo() + photo.user = user + else: + photo = user.photo_set.first() + photo.ip_address = "0.0.0.0" + photo.format = file_format(pilobj.format) + photo.data = out.read() + photo.save() + print("xxx: %s" % user.confirmedemail_set.first()) + confirmed_email = user.confirmedemail_set.first() + confirmed_email.photo_id = photo.id + confirmed_email.save()