def test_content_property(self): test_data = 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' img, is_created = Image.get_or_create_smart(test_data) saved = Image.objects.first() url = test_data self.assertEqual(img.content, url) self.assertEqual(saved, img) self.assertEqual(saved.content, img.content) img2 = Image() img2.content = 'http://static.naver.net/www/mobile/edit/2016/0407/mobile_17004159045.png' img2.save() img2.summarize() self.assertNotEqual(img2, img) img3 = Image() img3.content = 'http://static.naver.net/www/mobile/edit/2016/0407/mobile_17004159045.png' img3.save() img3.summarize() self.assertEqual(img3, img2) rf4 = RawFile() rf4.file = self.uploadFile('test.jpg') rf4.save() img4, is_created = Image.get_or_create_smart(rf4.url) self.assertNotEqual(img4.content, rf4.url) self.assertEqual(img4.url_for_access, rf4.url) self.assertEqual(img4.url_for_access.endswith(img4.content), True)
def test_dhash(self): rf = RawFile() rf.file = self.uploadFile('test.jpg') rf.save() rf2 = RawFile() rf2.file = self.uploadFile('test_480.jpg') rf2.save() img, is_created = Image.get_or_create_smart(rf.url) img2, is_created = Image.get_or_create_smart(rf2.url) self.assertNotEqual(img.dhash, None) self.assertNotEqual(img2.dhash, None) self.assertEqual(img.dhash, img2.dhash)
def paste(request, uplace_id): vd = vd_login_for_browser(request) uplace = UserPlace.objects.get(vd_id__in=vd.realOwner_vd_ids, id=uplace_id) if request.method == 'POST': pb = PostBase() pb.uuid = uplace.uuid if 'note' in request.POST and request.POST['note']: note, is_created = PlaceNote.get_or_create_smart( request.POST['note']) pb.notes.append(note) if request.FILES: for file in request.FILES.itervalues(): rf = RawFile.objects.create(vd=vd, file=file) rf.start() img, is_created = Image.get_or_create_smart(rf.url) pb.images.append(img) if 'lp' in request.POST and request.POST['lp']: lp, is_created = LegacyPlace.get_or_create_smart( request.POST['lp']) pb.lps.append(lp) pb_MAMMA = pb.pb_MAMMA if pb_MAMMA: place, is_created = Place.get_or_create_smart(pb_MAMMA, vd) uplace.placed(place) if pb.ujson: pp = PostPiece.create_smart(uplace, pb) if uplace.is_empty: uplace.is_empty = False uplace.save() uplace._clearCache() return render(request, 'ui/paste.html', context=dict(uplace=uplace))
def create(self, request, *args, **kwargs): if 'content' not in request.data or not request.data['content']: return Response(status=status.HTTP_400_BAD_REQUEST) img, is_created = Image.get_or_create_smart(request.data['content']) dirty = False if 'lon' in request.data and request.data[ 'lon'] and 'lat' in request.data and request.data['lat']: lon = float(request.data['lon']) lat = float(request.data['lat']) point = GEOSGeometry('POINT(%f %f)' % (lon, lat), srid=4326) img.lonLat = point dirty = True if 'local_datetime' in request.data and request.data['local_datetime']: dt = datetime.strptime(request.data['local_datetime'], '%Y:%m:%d %H:%M:%S') # TODO : VD.timezone 을 참조하여 변환 d = Delorean(dt, timezone='Asia/Seoul') img.timestamp = int(round(d.epoch * 1000)) dirty = True if dirty: img.save() serializer = self.get_serializer(img) return Response(serializer.data, status=status.HTTP_201_CREATED)
def test_json(self): test_data = 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' img, is_created = Image.get_or_create_smart(test_data) img.summarize() self.assertIn('uuid', img.json) self.assertIn('content', img.json) self.assertNotIn('note', img.json) self.assertNotIn('timestamp', img.json) self.assertIn('summary', img.json) img.timestamp = get_timestamp() inote = ImageNote(content='img note') inote.save() img.note = inote self.assertIn('uuid', img.json) self.assertIn('content', img.json) self.assertIn('note', img.json) #self.assertIn('timestamp', img.json) self.assertIn('summary', img.json) self.assertIn('uuid', img.json['note']) self.assertIn('content', img.json['note']) self.assertNotIn('timestamp', img.json['note']) inote.timestamp = get_timestamp() self.assertIn('uuid', img.json['note']) self.assertIn('content', img.json['note']) self.assertIn('timestamp', img.json['note']) saved = Image.get_from_json(img.json) self.assertEqual(saved, img) self.assertEqual(saved.note, img.note)
def test_image_cache(self): self.assertEqual(RawFile.objects.count(), 0) self.assertEqual(Image.objects.count(), 0) rf = RawFile() rf.file = self.uploadFile('test.JPEG') self.assertEqual(rf.ext, 'jpg') rf.save() self.assertEqual(rf.ext, 'jpg') self.assertEqual(RawFile.objects.count(), 1) self.assertEqual(Image.objects.count(), 0) img, is_created = Image.get_or_create_smart(rf.url) self.assertValidLocalFile(img.path_accessed) self.assertValidInternetUrl(img.url_accessed) f = Path(img.path_accessed) self.assertEqual(f.is_symlink(), True) self.assertEqual(Image.objects.count(), 1) img.save() self.assertEqual(Image.objects.count(), 1) self.assertValidInternetUrl(img.url_accessed) self.assertValidInternetUrl(img.url_summarized) self.assertEqual(img, Image.objects.first()) self.assertEqual(rf.img, img) self.assertEqual(img.rf, rf) img = Image.objects.first() rf = RawFile.objects.first() self.assertEqual(rf.img, img) self.assertEqual(img.rf, rf)
def test_transpose(self): rf = RawFile() rf.file = self.uploadFile('test_transpose.jpg') rf.save() img, is_created = Image.get_or_create_smart(rf.url) timestamp = img.timestamp lonLat = img.lonLat self.assertNotEqual(lonLat, None) self.assertNotEqual(timestamp, None)
def test_task(self): _rf = RawFile() _rf.file = self.uploadFile('no_exif_test.jpg') _rf.save() img, is_created = Image.get_or_create_smart(_rf.url) self.assertEqual(Image.objects.count(), 1) saved = Image.objects.first() img.task() self.assertEqual(img.similar, None) saved.task() self.assertEqual(saved.phash, img.phash) self.assertEqual(saved.dhash, img.dhash) self.assertEqual(saved.similar, img.similar) _rf2 = RawFile() _rf2.file = self.uploadFile('test.jpg') _rf2.save() img2, is_created = Image.get_or_create_smart(_rf2.url) img2.task() self.assertEqual(img.similar, None) self.assertEqual(img2.similar, None) _rf3 = RawFile() _rf3.file = self.uploadFile('test_480.jpg') _rf3.save() img3, is_created = Image.get_or_create_smart(_rf3.url) img3.lonLat = None img3.timestamp = None #img3.save() self.assertEqual(img3.lonLat, None) self.assertEqual(img3.timestamp, None) img3.task() self.assertEqual(img.similar, None) self.assertEqual(img2.similar, None) self.assertEqual(img3.similar, img2) self.assertEqual(img2.similars.count(), 1) self.assertEqual(img2.similars.first(), img3) self.assertEqual(img3.lonLat, img2.lonLat) self.assertEqual(img3.timestamp, img2.timestamp)
def test_img_task(self): test_data = 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' img, is_created = Image.get_or_create_smart(test_data) img = Image.objects.get(id=img.id) self.assertEqual(img.dhash, 11973959L) self.assertEqual(img.phash, UUID('0017c0a8-a6ed-a0c5-1230-8ef6eb5176fe')) self.assertNotEqual(img.azure, None) if not DISABLE_NO_FREE_API: self.assertEqual(img.azure.is_success_analyze, True) self.assertEqual(len(img.ctags.tags), 8)
def test_exif_timestamp(self): exif = exif_lib.get_exif_data(PIL_Image.open('image/samples/gps_test.jpg')) timestamp = exif_lib.get_timestamp(exif) self.assertEqual(timestamp, 1459149534000) rf = RawFile() rf.file = self.uploadFile('gps_test.jpg') rf.save() img, is_created = Image.get_or_create_smart(rf.url) saved = Image.objects.first() self.assertEqual(img.timestamp, timestamp) self.assertEqual(saved.timestamp, timestamp)
def test_exif_gps(self): exif = exif_lib.get_exif_data(PIL_Image.open('image/samples/gps_test.jpg')) lonLat = exif_lib.get_lon_lat(exif) point = GEOSGeometry('POINT(%f %f)' % lonLat, srid=4326) self.assertEqual(point.x, 127.103744) # lon(경도) self.assertEqual(point.y, 37.399731) # lat(위도) rf = RawFile() rf.file = self.uploadFile('gps_test.jpg') rf.save() img, is_created = Image.get_or_create_smart(rf.url) saved = Image.objects.first() self.assertEqual(img.lonLat, point) self.assertEqual(saved.lonLat, point)
def test_analyze(self): if DISABLE_NO_FREE_API: return img_url = 'http://pds.joins.com/news/component/starnews/201607/14/2016071408355459431_1.jpg' img, is_created = Image.get_or_create_smart(img_url) azure, is_created = AzurePrediction.objects.get_or_create(img=img) r = azure.predict() #print(r) self.assertNotEqual(r, None) self.assertEqual(img.azure, azure) self.assertEqual(azure.is_success_analyze, True) self.assertNotEqual(azure.result_analyze, None) imgTags = ImageTags.objects.first() #imgTags.dump() self.assertEqual(imgTags.img, img) self.assertEqual(img.ctags, imgTags) self.assertNotEqual(imgTags, None) self.assertNotEqual(imgTags.tags, None) self.assertEqual(len(imgTags.tags), 11)
def setUp(self): super(PostPieceTest, self).setUp() self.place = Place() self.place.save() self.uplace = UserPlace() self.uplace.save() self.vd = VD() self.vd.save() self.image, is_created = Image.get_or_create_smart( 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' ) self.url, is_created = Url.get_or_create_smart('http://www.naver.com/') self.lp, is_created = LegacyPlace.get_or_create_smart( '4ccffc63f6378cfaace1b1d6.4square') self.addr, is_created = Address.get_or_create_smart( '경기도 하남시 풍산로 270, 206동 402호 (선동, 미사강변도시2단지)') self.phone, is_created = PhoneNumber.get_or_create_smart( '010-5597-9245')
def test_no_exif(self): exif = exif_lib.get_exif_data(PIL_Image.open('image/samples/no_exif_test.jpg')) lonLat = exif_lib.get_lon_lat(exif) timestamp = exif_lib.get_timestamp(exif) self.assertIsNone(lonLat[0]) self.assertIsNone(lonLat[1]) self.assertIsNone(timestamp) rf = RawFile() rf.file = self.uploadFile('no_exif_test.jpg') rf.save() img, is_created = Image.get_or_create_smart(rf.url) saved = Image.objects.first() self.assertEqual(img.lonLat, None) self.assertEqual(img.timestamp, None) self.assertEqual(saved, img) self.assertEqual(saved.lonLat, None) self.assertEqual(saved.timestamp, None)
def test_post(self): place = Place() place.save() vd1 = VD() vd1.save() uplace1 = UserPlace(vd=vd1, place=place) uplace1.save() point1 = GEOSGeometry('POINT(127 37)', srid=4326) name1, is_created = PlaceName.get_or_create_smart('능라') addr1, is_created = Address.get_or_create_smart( '경기도 성남시 분당구 운중동 883-3') note11, is_created = PlaceNote.get_or_create_smart('분당 냉면 최고') note12, is_created = PlaceNote.get_or_create_smart('만두도 괜찮음') imgNote1, is_created = ImageNote.get_or_create_smart('냉면 사진') img1_content = 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' img1, is_created = Image.get_or_create_smart(img1_content) phone1, is_created = PhoneNumber.get_or_create_smart('010-5686-1613') vd2 = VD() vd2.save() uplace2 = UserPlace(vd=vd2, place=place) uplace2.save() point2 = GEOSGeometry('POINT(127.1037430 37.3997320)', srid=4326) name2, is_created = PlaceName.get_or_create_smart('능라도') addr2, is_created = Address.get_or_create_smart( '경기도 성남시 분당구 산운로32번길 12') note21, is_created = PlaceNote.get_or_create_smart('여기 가게 바로 옆으로 이전') note22, is_created = PlaceNote.get_or_create_smart('평양냉면 맛집') img21_content = 'http://blogpfthumb.phinf.naver.net/20100110_16/mardukas_1263055491560_VI01Ic_JPG/DSCN1968.JPG' img22_content = 'http://mblogthumb3.phinf.naver.net/20160807_298/mardukas_14705287064440EYVC_JPEG/DSC03530.JPG?type=w800' img21, is_created = Image.get_or_create_smart(img21_content) img22, is_created = Image.get_or_create_smart(img22_content) imgNote2, is_created = ImageNote.get_or_create_smart('만두 사진') url2, is_created = Url.get_or_create_smart('http://www.naver.com/') lp, is_created = LegacyPlace.get_or_create_smart( '4ccffc63f6378cfaace1b1d6.4square') phone2, is_created = PhoneNumber.get_or_create_smart('010-5597-9245') json_userPost = ''' { "lonLat": {"lon": %f, "lat": %f}, "name": {"uuid": "%s", "content": "%s"}, "addr2": {"uuid": "%s", "content": "%s"}, "notes": [{"uuid": "%s", "content": "%s"}, {"uuid": "%s", "content": "%s"}], "images": [{"uuid": "%s", "content": "%s", "note": {"uuid": "%s", "content": "%s"}}], "urls": [], "lps": [], "phone": {"uuid": "%s", "content": "%s"} } ''' % ( point1.x, point1.y, name1.uuid, name1.content, addr1.uuid, addr1.content, note12.uuid, note12.content, note11.uuid, note11.content, img1.uuid, img1.content, imgNote1.uuid, imgNote1.content, phone1.uuid, phone1.content, ) json_placePost = ''' { "lonLat": {"lon": %f, "lat": %f}, "name": {"uuid": "%s", "content": "%s"}, "addr1": {"uuid": "%s", "content": "%s"}, "addr2": {"uuid": "%s", "content": "%s"}, "notes": [ {"uuid": "%s", "content": "%s"}, {"uuid": "%s", "content": "%s"}, {"uuid": "%s", "content": "%s"}, {"uuid": "%s", "content": "%s"} ], "images": [ {"uuid": "%s", "content": "%s", "note": null}, {"uuid": "%s", "content": "%s", "note": {"uuid": "%s", "content": "%s"}}, {"uuid": "%s", "content": "%s", "note": {"uuid": "%s", "content": "%s"}} ], "urls": [{"uuid": "%s", "content": "%s"}], "lps": [{"uuid": "%s", "content": "%s"}], "phone": {"uuid": "%s", "content": "%s"} } ''' % ( point2.x, point2.y, name2.uuid, name2.content, addr2.uuid, addr2.content, addr1.uuid, addr1.content, note22.uuid, note22.content, note21.uuid, note21.content, note12.uuid, note12.content, note11.uuid, note11.content, img22.uuid, img22.content, img21.uuid, img21.content, imgNote2.uuid, imgNote2.content, img1.uuid, img1.content, imgNote1.uuid, imgNote1.content, url2.uuid, url2.content, lp.uuid, lp.content, phone2.uuid, phone2.content, ) pb1 = PostBase(json_userPost) pb2 = PostBase(json_placePost) self.assertEqual(PostPiece.objects.count(), 0) pp1 = PostPiece.create_smart(uplace1, pb1) self.assertEqual(PostPiece.objects.count(), 1) pp2 = PostPiece.create_smart(uplace2, pb2) pp3 = PostPiece.create_smart_4place(place, vd1, pb2, by_MAMMA=True) self.assertEqual(PostPiece.objects.count(), 3) want_userPost = json_loads(json_userPost) want_placePost = json_loads(json_placePost) self.assertNotIn('timestamp', uplace1.userPost.json['lonLat']) self.assertNotIn('timestamp', uplace1.userPost.json['name']) self.assertIn('timestamp', uplace1.userPost.json['notes'][0]) self.assertNotIn('timestamp', uplace1.userPost.json['images'][0]) self.assertIn('timestamp', uplace1.userPost.json['images'][0]['note']) self.assertNotIn('timestamp', uplace2.userPost.json['urls'][0]) self.assertNotIn('timestamp', uplace2.userPost.json['lps'][0]) timestamp = uplace1.userPost.json['notes'][0]['timestamp'] self.assertAlmostEqual(get_timestamp(), timestamp, delta=1000) self.assertIn('summary', uplace1.userPost.json['images'][0]) self.assertIn('phone', uplace1.userPost.json) self.assertNotEqual(uplace1.userPost.json['images'][0]['content'], None) self.assertIsSubsetOf(want_userPost, uplace1.userPost) self.assertIsNotSubsetOf(uplace1.userPost, want_userPost) self.assertIsSubsetOf(want_placePost, uplace1.place.placePost) self.assertIsNotSubsetOf(uplace1.place.placePost, want_placePost) uplace1._clearCache() p1 = uplace1.place.placePost uplace2._clearCache() p2 = uplace2.place.placePost place._clearCache() p3 = place.placePost self.assertDictEqual(p1.json, p3.json) self.assertDictEqual(p2.json, p3.json) pb12 = PostBase(json_userPost) pb12.update(pb1) self.assertNotEqual(pb12.json, pb1.json) pb12.normalize() self.assertEqual(pb12.json, pb1.json) pb13 = PostBase(json_userPost) pb13.update(pb1) pb13.update(pb1, add=False) pb_null = PostBase() self.assertEqual(pb13.json, pb_null.json) totalPost = place._totalPost self.assertIsSubsetOf(uplace1.place.placePost, totalPost) #self.assertIsSubsetOf(uplace1.userPost, totalPost) # Note 에서 timestamp 를 제거해야... #self.assertIsSubsetOf(uplace2.userPost, totalPost) # 상동 #self.assertIsNotSubsetOf(totalPost, uplace1.place.placePost) # userPost 를 하나 더 생성해야... # child/parent test uplace3 = UserPlace.objects.create(parent=uplace1) self.assertEqual(uplace3.parent, uplace1) self.assertNotEqual(uplace3.userPost, uplace1.userPost) self.printJson(uplace3.userPost.json) self.printJson(uplace1.userPost.json) self.assertEqual(uplace3.userPost.json, uplace1.userPost.json) uplace1._clearCache() uplace3._clearCache() pb3 = PostBase('{"notes": [{"content": "child"}]}') pp3 = PostPiece.create_smart(uplace3, pb3) self.assertNotEqual(uplace3.userPost, uplace1.userPost) self.assertNotEqual(uplace3.userPost.json, uplace1.userPost.json) place4 = Place.objects.create() uplace4 = UserPlace.objects.create(parent=uplace1, vd=vd1, place=place4) self.assertEqual(uplace4.parent, uplace1) self.assertNotEqual(uplace4.userPost, uplace1.userPost) self.assertEqual(uplace4.userPost.json, uplace1.userPost.json) uplace1._clearCache() uplace4._clearCache() pb3 = PostBase('{"notes": [{"content": "child"}]}') pp3 = PostPiece.create_smart(uplace4, pb3) self.assertNotEqual(uplace4.userPost, uplace1.userPost) self.assertNotEqual(uplace4.userPost.json, uplace1.userPost.json)
def test_summarize_methods_2(self): test_data = 'http://bookmarkimgs.naver.com/img/naver_profile.png' img, is_created = Image.get_or_create_smart(test_data) img.summarize() self.assertValidLocalFile(img.path_summarized) self.assertValidInternetUrl(img.url_summarized)
def test_summarize_methods(self): test_data = 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' img, is_created = Image.get_or_create_smart(test_data) img.summarize() self.assertValidLocalFile(img.path_summarized) self.assertValidInternetUrl(img.url_summarized)
def test_access_methods2(self): test_data = 'http://phopl.com/media/rfs/2016/07/15/00000155ED9687CD0000000000D4F4A6.rf_image.jpg' img, is_created = Image.get_or_create_smart(test_data) img.access() self.assertValidLocalFile(img.path_accessed) self.assertValidInternetUrl(img.url_accessed)
def test_string_representation(self): test_data = 'http://blogthumb2.naver.net/20160302_285/mardukas_1456922688406bYGAH_JPEG/DSC07301.jpg' img, is_created = Image.get_or_create_smart(test_data) self.assertEqual(unicode(img), img.content) self.assertEqual(img.uuid, '%s.img' % b16encode(img.id.bytes))