Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
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))
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
    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')
Beispiel #14
0
    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)
Beispiel #15
0
    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)
Beispiel #16
0
 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)
Beispiel #17
0
 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)
Beispiel #18
0
 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)
Beispiel #19
0
 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))