Example #1
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)
Example #2
0
    def _make_file_info(target: pathlib.Path,
                        arcname: Optional[str] = None) -> Dict[str, Any]:
        f = {}  # type: Dict[str, Any]
        f['origin'] = str(target)
        if arcname is not None:
            f['filename'] = arcname
        else:
            f['filename'] = str(target)
        if os.name == 'nt':
            fstat = os.stat(str(target), follow_symlinks=False)
            if target.is_symlink():
                f['emptystream'] = False
                f['attributes'] = fstat.st_file_attributes & FILE_ATTRIBUTE_WINDOWS_MASK  # type: ignore  # noqa
            elif target.is_dir():
                f['emptystream'] = True
                f['attributes'] = fstat.st_file_attributes & FILE_ATTRIBUTE_WINDOWS_MASK  # type: ignore  # noqa
            elif target.is_file():
                f['emptystream'] = False
                f['attributes'] = stat.FILE_ATTRIBUTE_ARCHIVE  # type: ignore  # noqa
                f['uncompressed'] = fstat.st_size
        else:
            fstat = target.stat()
            if target.is_symlink():
                f['emptystream'] = False
                f['attributes'] = stat.FILE_ATTRIBUTE_ARCHIVE  # type: ignore  # noqa
                f['attributes'] |= FILE_ATTRIBUTE_UNIX_EXTENSION | (
                    stat.S_IFLNK << 16)
                f['attributes'] |= (stat.S_IMODE(fstat.st_mode) << 16)
            elif target.is_dir():
                f['emptystream'] = True
                f['attributes'] = stat.FILE_ATTRIBUTE_DIRECTORY  # type: ignore  # noqa
                f['attributes'] |= FILE_ATTRIBUTE_UNIX_EXTENSION | (
                    stat.S_IFDIR << 16)
                f['attributes'] |= (stat.S_IMODE(fstat.st_mode) << 16)
            elif target.is_file():
                f['emptystream'] = False
                f['uncompressed'] = fstat.st_size
                f['attributes'] = stat.FILE_ATTRIBUTE_ARCHIVE  # type: ignore  # noqa
                f['attributes'] |= FILE_ATTRIBUTE_UNIX_EXTENSION | (
                    stat.S_IMODE(fstat.st_mode) << 16)

        f['creationtime'] = target.stat().st_ctime
        f['lastwritetime'] = target.stat().st_mtime
        f['lastaccesstime'] = target.stat().st_atime
        return f
Example #3
0
    def test_task(self):
        rf = RawFile()
        rf.file = self.uploadFile('test.png')
        rf.save()
        rf.task()
        rf = RawFile.objects.get(id=rf.id)
        saved = RawFile.objects.first()
        self.assertEqual(rf, saved)

        self.assertNotEqual(rf.mhash, None)
        self.assertEqual(rf.same, None)

        self.assertEqual(saved.mhash, rf.mhash)
        self.assertEqual(saved.same, rf.same)

        rf2 = RawFile()
        rf2.file = self.uploadFile('test.jpg')
        rf2.save()
        rf2.task()
        rf2 = RawFile.objects.get(id=rf2.id)
        self.assertEqual(rf.same, None)
        self.assertEqual(rf2.same, None)

        rf3 = RawFile()
        rf3.file = self.uploadFile('test.png')
        rf3.save()
        rf3_old_file_path = rf3.file.path
        rf3.task()
        rf3 = RawFile.objects.get(id=rf3.id)
        self.assertEqual(rf3.file.path, rf3_old_file_path)
        self.assertEqual(rf.same, None)
        self.assertEqual(rf2.same, None)
        self.assertEqual(rf3.same, rf)
        self.assertEqual(rf.sames.count(), 1)
        self.assertEqual(rf.sames.first(), rf3)

        f = Path(rf.file.path)
        f2 = Path(rf2.file.path)
        f3 = Path(rf3.file.path)
        self.assertEqual(f.is_symlink(), False)
        self.assertEqual(f2.is_symlink(), False)
        self.assertEqual(f3.is_symlink(), True)

        rf.task()
        rf2.task()
        f = Path(rf.file.path)
        f2 = Path(rf2.file.path)
        f3 = Path(rf3.file.path)
        self.assertEqual(f.is_symlink(), False)
        self.assertEqual(f2.is_symlink(), False)
        self.assertEqual(f3.is_symlink(), True)

        rf4 = RawFile()
        rf4.file = self.uploadFile('test_org.jpg')
        rf4.save()
        self.assertEqual(rf4.mhash, None)
        pil4_1 = PIL_Image.open(rf4.file.path)
        self.assertEqual(pil4_1.size, (4160, 2340))
        rf4.task()
        self.assertEqual(rf4.mhash, UUID('f34bb180-a108-e20f-4167-2b734c497f0f'))
        pil4_2 = PIL_Image.open(rf4.file.path)
        self.assertEqual(pil4_2.size, (1280, 720))

        rf4.task()
        self.assertEqual(rf4.mhash, UUID('f34bb180-a108-e20f-4167-2b734c497f0f'))
        pil4_3 = PIL_Image.open(rf4.file.path)
        self.assertEqual(pil4_3.size, (1280, 720))