Import old photos and link to members
This commit is contained in:
@@ -21,6 +21,9 @@ class Member(models.Model):
|
||||
monthly_fees = models.IntegerField(default=55, blank=True, null=True)
|
||||
emergency_contact_name = models.CharField(max_length=64, blank=True)
|
||||
emergency_contact_phone = models.CharField(max_length=32, blank=True)
|
||||
photo_large = models.CharField(max_length=64, blank=True, null=True)
|
||||
photo_medium = models.CharField(max_length=64, blank=True, null=True)
|
||||
photo_small = models.CharField(max_length=64, blank=True, null=True)
|
||||
|
||||
class Transaction(models.Model):
|
||||
user = models.ForeignKey(User, related_name='transactions', blank=True, null=True, on_delete=models.SET_NULL)
|
||||
|
@@ -2,11 +2,46 @@ from django.contrib.auth.models import User, Group
|
||||
from rest_framework import serializers
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from rest_auth.registration.serializers import RegisterSerializer
|
||||
from uuid import uuid4
|
||||
from PIL import Image
|
||||
|
||||
from . import models, old_models
|
||||
|
||||
#custom_error = lambda x: ValidationError(dict(non_field_errors=x))
|
||||
|
||||
STATIC_FOLDER = 'data/static/'
|
||||
LARGE_SIZE = 1080
|
||||
MEDIUM_SIZE = 150
|
||||
SMALL_SIZE = 80
|
||||
|
||||
def process_image(upload):
|
||||
try:
|
||||
pic = Image.open(upload)
|
||||
except OSError:
|
||||
raise serializers.ValidationError('Invalid image file.')
|
||||
|
||||
if pic.format == 'PNG':
|
||||
ext = '.png'
|
||||
elif pic.format == 'JPEG':
|
||||
ext = '.jpg'
|
||||
else:
|
||||
raise serializers.ValidationError('Image must be a jpg or png.')
|
||||
|
||||
large = str(uuid4()) + ext
|
||||
pic.thumbnail([LARGE_SIZE, LARGE_SIZE], Image.ANTIALIAS)
|
||||
pic.save(STATIC_FOLDER + large)
|
||||
|
||||
medium = str(uuid4()) + ext
|
||||
pic.thumbnail([MEDIUM_SIZE, MEDIUM_SIZE], Image.ANTIALIAS)
|
||||
pic.save(STATIC_FOLDER + medium)
|
||||
|
||||
small = str(uuid4()) + ext
|
||||
pic.thumbnail([SMALL_SIZE, SMALL_SIZE], Image.ANTIALIAS)
|
||||
pic.save(STATIC_FOLDER + small)
|
||||
|
||||
return small, medium, large
|
||||
|
||||
|
||||
class UserTrainingSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Training
|
||||
@@ -29,7 +64,7 @@ class OtherMemberSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = models.Member
|
||||
fields = ['q', 'seq', 'preferred_name', 'last_name', 'status', 'current_start_date']
|
||||
fields = ['q', 'seq', 'preferred_name', 'last_name', 'status', 'current_start_date', 'photo_small']
|
||||
|
||||
# member viewing himself
|
||||
class MemberSerializer(serializers.ModelSerializer):
|
||||
|
@@ -16,9 +16,6 @@ class AllowMetadata(permissions.BasePermission):
|
||||
|
||||
search_strings = {}
|
||||
def gen_search_strings():
|
||||
import time
|
||||
start = time.time()
|
||||
|
||||
for m in models.Member.objects.all():
|
||||
string = '{} {}'.format(
|
||||
m.preferred_name,
|
||||
@@ -26,9 +23,6 @@ def gen_search_strings():
|
||||
).lower()
|
||||
search_strings[string] = m.id
|
||||
|
||||
print('Generated search strings in {} s'.format(time.time() - start))
|
||||
gen_search_strings()
|
||||
|
||||
class SearchViewSet(viewsets.ViewSet):
|
||||
permission_classes = [AllowMetadata | permissions.IsAuthenticated]
|
||||
serializer_class = serializers.OtherMemberSerializer
|
||||
@@ -60,6 +54,7 @@ class SearchViewSet(viewsets.ViewSet):
|
||||
|
||||
queryset = result_objects
|
||||
else:
|
||||
gen_search_strings()
|
||||
queryset = queryset.order_by('-vetted_date')[:NUM_SEARCH_RESULTS]
|
||||
|
||||
return queryset
|
||||
@@ -93,13 +88,6 @@ class MemberViewSet(viewsets.ModelViewSet):
|
||||
else:
|
||||
return serializers.MemberSerializer
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
gen_search_strings()
|
||||
return super().update(request, *args, **kwargs)
|
||||
def partial_update(self, request, *args, **kwargs):
|
||||
gen_search_strings()
|
||||
return super().partial_update(request, *args, **kwargs)
|
||||
|
||||
|
||||
class CourseViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = [AllowMetadata | permissions.IsAuthenticated]
|
||||
|
@@ -3,6 +3,7 @@ os.environ['DJANGO_SETTINGS_MODULE'] = 'apiserver.settings'
|
||||
django.setup()
|
||||
|
||||
from apiserver.api import models, old_models
|
||||
from apiserver.api.serializers import process_image
|
||||
|
||||
MEMBER_FIELDS = [
|
||||
'id',
|
||||
@@ -67,6 +68,10 @@ TRAINING_FIELDS = [
|
||||
'paid_date',
|
||||
]
|
||||
|
||||
photo_folders = os.listdir('old_photos')
|
||||
print('Found {} member photo folders'.format(len(photo_folders)))
|
||||
|
||||
|
||||
print('Deleting all members...')
|
||||
models.Member.objects.all().delete()
|
||||
print('Importing old members...')
|
||||
@@ -78,7 +83,14 @@ for o in old:
|
||||
for f in MEMBER_FIELDS:
|
||||
new[f] = o.__dict__.get(f, None)
|
||||
|
||||
models.Member.objects.create(**new)
|
||||
small, medium, large = None, None, None
|
||||
if str(o.id) in photo_folders:
|
||||
folder = 'old_photos/' + str(o.id)
|
||||
if 'photo.jpg' in os.listdir(folder):
|
||||
small, medium, large = process_image(folder + '/photo.jpg')
|
||||
print('Found a photo')
|
||||
|
||||
models.Member.objects.create(photo_small=small, photo_medium=medium, photo_large=large, **new)
|
||||
print('Imported member #{} - {} {}'.format(
|
||||
o.id, o.first_name, o.last_name
|
||||
))
|
||||
|
Reference in New Issue
Block a user