Source code for intranet.apps.dataimport.management.commands.import_photos

#!/usr/bin/env python3

import io
import sys
from pathlib import Path

from PIL import Image

from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand

from intranet.apps.users.models import Photo


[docs]class Command(BaseCommand): help = "Imports photos from yearbook data export"
[docs] def add_arguments(self, parser): parser.add_argument("directory")
[docs] def handle(self, *args, **options): PHOTO_ROOT_DIRECTORY = options["directory"] PHOTO_ROOT_PATH = Path(PHOTO_ROOT_DIRECTORY) sys.stdout.write("Preparing to import photos from directory {}\n".format(PHOTO_ROOT_DIRECTORY)) messages = [] all_photos = list(PHOTO_ROOT_PATH.glob("*.jpg")) for path in all_photos: try: int(path.stem) except ValueError: print("IGNORING {}".format(path.name)) continue user = get_user_model().objects.user_with_student_id(path.stem) if user is None: print("IGNORING {}".format(path.name)) continue grade_number = user.grade.number img = Image.open(path) img_arr = io.BytesIO() img.save(img_arr, format="JPEG") value = img_arr.getvalue() message = "Creating photo for {} grade {}".format(user, grade_number) print(message) messages.append(message) Photo.objects.create(user=user, grade_number=grade_number, _binary=value) with open("photos_created.txt", "w") as f: f.write("\n".join(messages)) sys.stdout.write("Completed photo import.\n")