Example #1
0
def cat_curator_load_album(request):
    form = CatTaggerAlbumSelectionForm(request.POST)
    if form.is_valid():
        serializer = CatCuratorAlbumSelectionAlbumSerializer(form.cleaned_data['album'])
        return HttpResponse(JSONRenderer().render(serializer.data), content_type='application/json')
    
    return HttpResponse('No album ID', status=500)
Example #2
0
def cat_tagger(request):
    # Ensure user has profile
    user = request.get_user()
    user_can_curate = user.groups.filter(name='sift_curators').exists()
    state = {}
    album_selection_form = CatTaggerAlbumSelectionForm(request.GET)
    title = _('Tag historic photos')
    fb_share_photos = None
    if album_selection_form.is_valid():
        state['albumId'] = album_selection_form.cleaned_data['album'].pk
        state['albumName'] = album_selection_form.cleaned_data['album'].title
        title = state['albumName'] + ' - ' + _('Tag historic photos')
        fb_share_photos = _get_fb_share_photos(album_selection_form.cleaned_data['album'].photos.order_by('?')[:5])
    request.get_user()
    all_tags = CatTag.objects.filter(active=True).exclude(name='urban_or_rural')
    state['allTags'] = { x.name: {'leftIcon': icon_map[x.name.split('_')[0]], 'rightIcon': icon_map[x.name.split('_')[-1]]} for x in all_tags }
    albums = CatAlbum.objects.all()
    return render_to_response('cat_tagger.html', RequestContext(request, {
        'title': title,
        'is_tag': True,
        'albums': albums,
        'fb_share_photos': fb_share_photos,
        'state_json': dumps(state),
        'user_can_curate': user_can_curate
    }))
Example #3
0
def cat_curator_upload_handler(request):
    profile = request.get_user().catprofile

    curator_album_select_form = CatTaggerAlbumSelectionForm(request.POST)
    curator_album_create_form = CatCuratorAlbumAddForm(request.POST)

    selection_json = request.POST.get('selection') or None
    selection = None
    if selection_json is not None:
        # Query again to block p**n
        parsed_selection = loads(selection_json)
        ids = [k for k, v in parsed_selection.iteritems()]
        response = _curator_get_records_by_ids(ids)
        parsed_response = loads(response.text)['result']
        parsed_kv = {}
        for each in parsed_response:
            parsed_kv[each['id']] = each
        for k, v in parsed_selection.iteritems():
            for sk, sv in parsed_kv[k].iteritems():
                parsed_selection[k][sk] = sv
        selection = parsed_selection

    ret = {
        'photos': {}
    }

    if selection and len(selection) > 0 and profile is not None \
            and (curator_album_select_form.is_valid() or curator_album_create_form.is_valid()):
        if curator_album_select_form.is_valid():
            album = curator_album_select_form.cleaned_data['album']
        else:
            album = CatAlbum(
                title=curator_album_create_form.cleaned_data['title'],
                subtitle=curator_album_create_form.cleaned_data['subtitle'],
            )
            album.save()
        ret['album_id'] = album.id
        for k, v in selection.iteritems():
            upload_form = CatCuratorPhotoUploadForm(v)
            if upload_form.is_valid():
                if upload_form.cleaned_data['institution']:
                    upload_form.cleaned_data['institution'] = upload_form.cleaned_data['institution'].split(',')[0]
                    source = Source.objects.filter(description=upload_form.cleaned_data['institution']).first()
                    if not source:
                        source = Source(
                            name=upload_form.cleaned_data['institution'],
                            description=upload_form.cleaned_data['institution']
                        )
                        source.save()
                else:
                    source = Source.objects.get(name='AJP')
                if upload_form.cleaned_data['id'] and upload_form.cleaned_data['id'] != '':
                    incoming_muis_id = upload_form.cleaned_data['id']
                    if '_' in incoming_muis_id:
                        muis_id = incoming_muis_id.split('_')[0]
                        muis_media_id = incoming_muis_id.split('_')[1]
                    else:
                        muis_id = incoming_muis_id
                        muis_media_id = None
                    if muis_media_id:
                        existing_photo = CatPhoto.objects.filter(source=source, muis_id=muis_id,
                                                                 muis_media_id=muis_media_id).first()
                    else:
                        existing_photo = CatPhoto.objects.filter(source=source, muis_id=muis_id).first()
                    if not existing_photo:
                        new_photo = None
                        try:
                            new_photo = CatPhoto(
                                title=upload_form.cleaned_data['title'].rstrip().encode('utf-8'),
                                author=upload_form.cleaned_data['creators'].encode('utf-8'),
                                source=source,
                                source_key=upload_form.cleaned_data['identifyingNumber'],
                                source_url=upload_form.cleaned_data['urlToRecord'],
                                muis_id=upload_form.cleaned_data['id'].split('_')[0],
                                muis_media_id=upload_form.cleaned_data['id'].split('_')[1] if len(upload_form.cleaned_data['id'].split('_')) > 1 else None,
                                flip=upload_form.cleaned_data['flip'],
                                invert=upload_form.cleaned_data['invert'],
                                stereo=upload_form.cleaned_data['stereo'],
                                rotated=upload_form.cleaned_data['rotated']
                            )
                            new_photo.save()
                            opener = urllib2.build_opener()
                            opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36')]
                            img_response = opener.open(upload_form.cleaned_data['imageUrl'])
                            new_photo.image.save('cat-muis.jpg', ContentFile(img_response.read()))
                            photo_path = MEDIA_ROOT + '/' + str(new_photo.image)
                            if new_photo.invert:
                                img = Image.open(photo_path)
                                inverted_grayscale_image = ImageOps.invert(img).convert('L')
                                inverted_grayscale_image.save(photo_path)
                            if new_photo.rotated > 0:
                                img = Image.open(photo_path)
                                rot = img.rotate(new_photo.rotated, expand=1)
                                rot.save(photo_path)
                                new_photo.width = rot.size[0]
                                new_photo.height = rot.size[1]
                                new_photo.save()
                            if new_photo.flip:
                                img = Image.open(photo_path)
                                flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
                                flipped.save(photo_path)
                            ret['photos'][k] = {}
                            ret['photos'][k]['message'] = _('OK')
                            new_photo.save()
                            if album:
                                album.photos.add(new_photo)
                            ret['photos'][k]['success'] = True
                        except:
                            if new_photo:
                                new_photo.image.delete()
                                new_photo.delete()
                            ret['photos'][k] = {}
                            ret['photos'][k]['error'] = _('Error uploading file')
                    else:
                        if album:
                            album.photos.add(existing_photo)
                        ret['photos'][k] = {}
                        ret['photos'][k]['success'] = True
                        ret['photos'][k]['message'] = _('Photo already exists in Sift')
        if album:
            album.save()
    else:
        if not selection or len(selection) == 0:
            error = _('Please add photos to your album')
        else:
            error = _('Not enough data submitted')
        ret = {
            'error': error
        }

    return HttpResponse(dumps(ret), content_type='application/json')