def setUp(self): self.Name = Image(Name='yumyum') self.Description = Image(Description='Good food is therapeutic') self.name = Location(name='Kenya').save() self.cat1 = Category(types='food').save() self.new_Image = Image(Name='yumyum', Description='Good food is therapeutic', location=self.name, category=self.cat1)
def test_partial_update(self): shutil.copy2(self.test_image, self.test_image_destination) image = Image(gallery=self.gallery, family=self.family, original_image=''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ])) image.save() image2 = Image(gallery=self.gallery, family=self.family, original_image=''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ])) image2.save() client = APIClient(HTTP_X_REAL_IP='127.0.0.1') client.force_authenticate(user=self.user) url = '/api/gallery/{0}/'.format(self.gallery.id) data = { 'family_id': self.family2.id, # try to switch families 'title': 'new title', 'description': 'new description', 'thumbnail_id': image2.id, } response = client.patch(url, data, format='json') gallery = Gallery.objects.get(id=self.gallery.id) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual('new title', gallery.title) self.assertEqual(self.family.id, gallery.family_id) self.assertTrue(b'new title' in response.content) self.assertTrue(b'new description' in response.content) self.assertTrue( str(image2.thumbnail) in response.content.decode("utf-8")) image.delete_local_image_files() image.delete_remote_image_files() image2.delete_local_image_files() image2.delete_remote_image_files()
def test_partial_update_remove_thumbnail(self): image = Image(gallery=self.gallery, family=self.family, original_image=''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ])) image.save() client = APIClient(HTTP_X_REAL_IP='127.0.0.1') client.force_authenticate(user=self.user) url = '/api/gallery/{0}/'.format(self.gallery.id) data = { 'thumbnail_id': '', } response = client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertTrue('"thumbnail":null' in response.content.decode("utf-8")) json.loads(response.content) image.delete_local_image_files() image.delete_remote_image_files()
def snap(request): if request.POST and request.is_ajax(): image_data = b64decode(request.POST.get("image_data", "")) filename = id_generator() + '.png' fh = open(settings.TMP_ROOT + filename, "wb") fh.write(image_data) fh.close() image = getImage(settings.TMP_ROOT) path = settings.TMP_ROOT + image vClase, vScore = classifyScreenshot(path) db = Image(name=filename, image=path, clase=vClase, score=vScore * 100, retrain=0) db.save() vClasif = classRetrieve() record = {} data = serializers.serialize( "json", Time.objects.filter(name=vClase, date=datetime.date.today())) record = data print(record) return HttpResponse(json.dumps({ 'clase': vClase, 'score': str(round((vScore * 100), 2)), 'classif': vClasif, 'record': record }), content_type="application/json")
def test_get_exif_data(self): ''' Tests we can extract gps data from an image ''' exif_test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/exif_test.jpg') exif_test_image_destination = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/exif_test.jpg' ]) shutil.copy2(exif_test_image, exif_test_image_destination) image = Image(gallery=self.gallery, family=self.family, original_image=exif_test_image_destination) image._populate_exif_data() self.assertEqual( datetime(2014, 3, 30, 13, 18, 6).replace(tzinfo=utc), image.date_taken) self.assertEqual(True, image.latitude != 0) self.assertEqual(True, image.longitude != 0) #Clear up mess afterwards os.remove(exif_test_image_destination)
def create_image(files, user): """Given an uploaded file, a user, and other data, it creates an Image""" up_file = files.values()[0] check_file_size(up_file, settings.IMAGE_MAX_FILESIZE) try: image = Image.objects.filter(creator=user, is_draft=True) # Delete other drafts, if any: image.exclude(pk=image[0].pk).delete() image = image[0] except IndexError: # No drafts, create one image = Image(creator=user, is_draft=True) # Async uploads fallback to these defaults. image.title = get_draft_title(user) image.description = u'Autosaved draft.' image.locale = settings.WIKI_DEFAULT_LANGUAGE up_file = _image_to_png(up_file) # Finally save the image along with uploading the file. image.file.save(os.path.splitext(up_file.name)[0] + '.png', File(up_file), save=True) (width, height) = _scale_dimensions(image.file.width, image.file.height) delete_url = reverse('gallery.delete_media', args=['image', image.id]) return { 'name': up_file.name, 'url': image.get_absolute_url(), 'thumbnail_url': image.thumbnail_url_if_set(), 'width': width, 'height': height, 'delete_url': delete_url }
def setUp(self): ''' Need to create a family and a gallery ''' self.family = Family() self.family.save() self.gallery = Gallery.objects.create(title="test_gallery", family_id=self.family.id) clear_directory(settings.FACE_RECOG_TRAIN_TEST_DIR) self.test_image = os.path.join( settings.BASE_DIR, 'facial_recognition/tests/test_image_woman.jpg') self.test_image_destination = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ]) self.test_image_s3_key = ''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ]) directory = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id) ]) if not os.path.exists(directory): os.makedirs(directory) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) self.image = Image(gallery=self.gallery, family=self.family, original_image=''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ])) self.image.save() self.image.upload_files_to_s3() self.person = Person(name='Wallace', gender='M', email='*****@*****.**', family_id=self.family.id, language='en') self.person.save() self.tag = Tag.objects.create(image_id=self.image.id, x1=0.279, y1=0.188, x2=0.536, y2=0.381, person_id=self.person.id, face_detected=True)
def setUp(self): ''' Creates credientials as all views require login ''' self.family = Family() self.family.save() self.user = User.objects.create_user(email='arif_mardin:@queenonline.com', password='******', name='Arif Mardin:', family_id=self.family.id) self.gallery = Gallery.objects.create(family_id=self.family.id, title="gallery") self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg') self.test_image_destination = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg']) directory = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id)]) if not os.path.exists(directory): os.makedirs(directory) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) self.images = [] for i in range(0,20): self.images.append( Image( gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination ) )
def test_rotate_image(self): ''' Tests that user can rotate image succesffully ''' p = Person.objects.create(name='badger', family_id=self.family.id) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) im = Image( gallery=self.gallery, family=self.family, original_image=self.test_image_key, thumbnail=self.test_image_key, large_thumbnail=self.test_image_key ) im.save() im.upload_files_to_s3() tag = Tag( image_id=im.id, x1=0.5, y1=0.8, x2=0.5, y2=0.5, person_id=p.id) tag.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post('/image={0}/rotate/'.format(im.id), {'anticlockwise_angle': '90'}) self.assertNotEqual(404, response.status_code) tag = Tag.objects.get(id=tag.id) self.assertEqual(0.8, tag.x2)
def test_gallery_with_auto_open_image_loads(self): ''' Tests that the gallery view loads when a photo to open by is specified ''' #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.get('/gallery={0}/image={1}/'.format( self.gallery.id, im.id)) im.delete_image_files() self.assertEqual(200, response.status_code) self.assertTemplateUsed(response, 'gallery/gallery.html')
def image(file_and_save=True, **kwargs): """Return a saved image. Requires a users fixture if no creator is provided. """ u = None if 'creator' not in kwargs: u = get_user() defaults = { 'title': 'Some title', 'description': 'Some description', 'creator': u } defaults.update(kwargs) img = Image(**defaults) if not file_and_save: return img if 'file' not in kwargs: with open('apps/upload/tests/media/test.jpg') as f: up_file = File(f) img.file.save(up_file.name, up_file, save=True) return img
def test_rotate_image_not_allowed_for_user_in_different_family(self): ''' Tests that user can not rotate image for another family ''' p = Person.objects.create(name='badger', family_id=self.family.id) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() tag = Tag(image_id=im.id, x1=0.5, y1=0.8, x2=0.5, y2=0.5, person_id=p.id) tag.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post('/image={0}/rotate/'.format(im.id), {'anticlockwise_angle': '90'}) self.assertEqual(404, response.status_code) tag = Tag.objects.get(id=tag.id) self.assertEqual(0.5, tag.x2)
def test_geocode_image_location_post(self): ''' Test you can geocode image view ''' #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post('/image={0}/address/'.format(im.id), {'address': 'Freddie Mercury Montreux'}) im.delete_image_files() self.assertEqual(200, response.status_code) self.assertEqual(True, b'46.43' in response.content) self.assertEqual(True, b'6.9' in response.content) im = Image.objects.get(id=im.id) self.assertEqual(46.43, round(im.latitude, 2)) self.assertEqual(6.9, round(im.longitude, 1))
def test_person_gallery_with_auto_open_image_does_not_load_for_another_family( self): ''' Tests specified photo does not open if in another family ''' #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) image = Image(gallery=self.gallery, family=self.another_family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) image.save p = Person.objects.create(name='badger', family_id=self.family.id) self.client.login(email='*****@*****.**', password='******') response = self.client.get('/person={0}/photos/image={1}/'.format( p.id, image.id)) self.assertEqual(404, response.status_code) image.delete_image_files()
def test_create_tag(self): ''' Tests create tag api ''' image = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) image.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post( '/image={0}/tags/create/'.format(self.image.id), { 'person': self.person.id, 'x1': 0.314159, 'y1': 0.1, 'x2': 0.6, 'y2': 0.2, }) self.assertEqual(200, response.status_code) tag = Tag.objects.get(x1=0.314159) self.assertEqual(self.person.id, tag.person_id) self.assertEqual(0.2, tag.y2)
def test_save_image(self): im = Image() im.image_name = "home" im.image_url = File(open("/tmp/uplods/home.jpg")) im.save() h_image = im.objects.get(id=1).image_url.path self.failUnless(open(h_image), "file not found")
def create(self, request): ''' Image upload ''' queryset = Gallery.objects.filter(family_id=request.user.family_id) gallery_id, gallery_id_valid = intTryParse( request.data.get("gallery_id")) if not gallery_id_valid: raise ParseError('Invalid gallery_id') # Check gallery is part of family gallery = get_object_or_404(queryset, pk=gallery_id) try: uploaded = request.FILES['picture'] name, ext = os.path.splitext(uploaded.name) if uploaded.size > MAX_FILE_SIZE: raise ParseError('File too big') filename = create_hash(uploaded.name) + '.jpg' image = Image(gallery_id=gallery.id, family_id=gallery.family_id, title=name, uploaded_by=request.user) path = upload_to(image, filename) #Write the file to the destination destination = open(os.path.join(settings.MEDIA_ROOT, path), 'wb+') for chunk in uploaded.chunks(): destination.write(chunk) destination.close() image.original_image = path PIL.Image.open( os.path.join(settings.MEDIA_ROOT, str(image.original_image))).verify() image.save() image.upload_files_to_s3() image.delete_local_image_files() create_message('image_face_detect', image.id) serializer = ImageSerializer(image) return Response(serializer.data) except Exception as e: if image: image.delete_local_image_files() image.delete() raise ParseError(str(e))
def merge_image_with_overlay(image, overlay, user): image = PILImage.open(image).convert('RGBA') overlay = PILImage.open(overlay).convert('RGBA') image.alpha_composite(overlay.resize(image.size)) buffer = BytesIO() image.convert('RGB').save(buffer, format="JPEG") file = ImageFile(buffer) file = Image(image=file, user=user) file.image.save('snapshot.jpg', buffer)
def uploadImage(request): if request.method == 'POST': # images = request.FILES.getlist('images') images = request.FILES.getlist( 'files[]') # ssi-uploader插件返回的数据Key=files[] print(images) for image in images: new_img = Image(img=image) new_img.save() return HttpResponse("1") else: return render(request, 'gallery/upload.html')
def setUp(self): ''' Creates credientials as all views require login ''' self.family = Family() self.family.save() self.user = User.objects.create_user(email='*****@*****.**', password='******', name='gromit', family_id=self.family.id) self.gallery = Gallery.objects.create(family_id=self.family.id, title="gallery") self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg') self.test_image_destination = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ]) directory = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id) ]) if not os.path.exists(directory): os.makedirs(directory) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) self.images = [] for i in range(0, 3): self.images.append( Image(gallery=self.gallery, family=self.family, title="title{0}".format(i), original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination, latitude=i, longitude=i)) self.another_family = Family.objects.create() self.another_user = User.objects.create_user( email='*****@*****.**', password='******', name='shaun', family_id=self.another_family.id)
def setUp(self): ''' Creates credientials as all views require login ''' self.family = Family() self.family.save() self.user = User.objects.create_user( email='*****@*****.**', password='******', name='White Queen', family_id=self.family.id) self.person = Person.objects.create(name='White Queen', family=self.family) self.person2 = Person.objects.create(name='Black Queen', family=self.family) self.gallery = Gallery.objects.create(family_id=self.family.id, title="gallery") self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg') self.test_image_destination = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ]) directory = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id) ]) if not os.path.exists(directory): os.makedirs(directory) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) self.image = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) self.image.save() self.another_family = Family.objects.create() self.another_user = User.objects.create_user( email='*****@*****.**', password='******', name='Queen Of Hearts', family_id=self.another_family.id)
def test_image_detail_view_does_not_load_for_another_family(self): ''' Test that the image detail view loads ''' im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.get('/image={0}/details/'.format(im.id)) self.assertEqual(404, response.status_code)
def test_image_delete_another_family(self): ''' Tests that you can't delete another family's image ''' im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post('/image={0}/delete/'.format(im.id)) self.assertEqual(404, response.status_code)
def test_make_thumbnails_and_delete(self): ''' Tests the make thumbnails routine ''' #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) image = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination) image.make_thumbnails() PIL.Image.open(settings.MEDIA_ROOT + str(image.thumbnail)) PIL.Image.open(settings.MEDIA_ROOT + str(image.large_thumbnail)) PIL.Image.open(settings.MEDIA_ROOT + str(self.gallery.thumbnail)) #Clear up mess afterwards image.delete_local_image_files()
def test_image_delete(self): ''' Tests that you can delete an image through api ''' im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post('/image={0}/delete/'.format(im.id)) self.assertEqual(302, response.status_code) self.assertEqual(0, Image.objects.filter(id=im.id).count())
def process_image(filename, file, gallery): ''' Processes each image file ''' name, ext = os.path.splitext(file.name) filename = create_hash(name) +'.jpg' im = Image(gallery_id=gallery.id, family_id=gallery.family_id, title=name) upload_name = upload_to(im, filename) result = { 'name': basename(name), 'size': file.size, 'url': settings.MEDIA_URL + str(upload_name), 'filename': filename } if file.size > MAX_FILE_SIZE: result['error'] = tran('File is too big') return result #Write the file to the destination destination = open(os.path.join(settings.MEDIA_ROOT, str(upload_name)), 'wb+') for chunk in file.chunks(): destination.write(chunk) destination.close() im.original_image = upload_name #Check this is a valid image try: PIL.Image.open(os.path.join(settings.MEDIA_ROOT, str(im.original_image))).verify() im.save() im.upload_files_to_s3() im.delete_local_image_files() result['image_id'] = im.id except: im.delete_local_image_files() result['error'] = tran('Invalid image!') return result
def test_save_and_rotate_image(self): ''' Tests that we can save an image and rotate it without error ''' #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) image = Image(gallery=self.gallery, family=self.family, original_image=''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ])) image.save() image.rotate(90)
def test_image_detail_view_loads(self): ''' Test that the image detail view loads ''' im = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.get('/image={0}/details/'.format(im.id)) self.assertEqual(200, response.status_code) self.assertTemplateUsed(response, 'gallery/image_tagging.html')
def test_make_image_gallery_thumbnail(self): ''' Tests that you can assign a thumbnail to a gallery ''' im = Image( gallery=self.gallery, family=self.family, original_image=self.test_image_destination, thumbnail=self.test_image_destination, large_thumbnail=self.test_image_destination ) im.save() self.client.login(email='*****@*****.**', password='******') response = self.client.post('/image={0}/make_gallery_thumbnail/'.format(im.id)) self.assertEqual(302, response.status_code) self.assertEqual(im.thumbnail, Gallery.objects.get(id=self.gallery.id).thumbnail)
def setUp(self): ''' Need to create a family and a gallery and image ''' self.family = Family() self.family.save() self.person = Person(name='Wallace', gender='M', email='*****@*****.**', family_id=self.family.id, language='en') self.person.save() self.gallery = Gallery.objects.create(title="test_gallery", family_id=self.family.id) self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg') self.test_image_destination = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ]) directory = ''.join([ settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id) ]) if not os.path.exists(directory): os.makedirs(directory) #Copy test image to media area shutil.copy2(self.test_image, self.test_image_destination) self.image = Image(gallery=self.gallery, family=self.family, original_image=''.join([ 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg' ])) self.image.save()