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 _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
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))