ImageHash: gain a name property
authorHelmut Grohne <helmut@subdivi.de>
Wed, 29 Dec 2021 14:24:34 +0000 (15:24 +0100)
committerHelmut Grohne <helmut@subdivi.de>
Wed, 29 Dec 2021 14:24:34 +0000 (15:24 +0100)
Instead of retroactively attaching a name to an ImageHash, autogenerate
it via a property. Doing so also simplifies static type checking.

dedup/image.py
importpkg.py

index 2e64e6b..91321f4 100644 (file)
@@ -69,9 +69,14 @@ class ImageHash:
             self.content.seek(pos)
         return "%s%8.8x%8.8x" % (hashobj.hexdigest(), width, height)
 
+    @property
+    def name(self):
+        return self.name_prefix + self.hashobj.name
+
 
 class PNGHash(ImageHash):
     """A hash on the contents of a PNG image."""
+    name_prefix = "png_"
 
     def detect(self):
         if self.content.tell() < 33: # header + IHDR
@@ -86,6 +91,7 @@ class PNGHash(ImageHash):
 
 class GIFHash(ImageHash):
     """A hash on the contents of the first frame of a GIF image."""
+    name_prefix = "gif_"
 
     def detect(self):
         if self.content.tell() < 10: # magic + logical dimension
index 4693401..6988c1d 100755 (executable)
@@ -31,16 +31,10 @@ def gziphash():
     return HashBlacklistContent(hashobj, boring_content)
 
 def pnghash():
-    hashobj = PNGHash(hashlib.sha512())
-    hashobj = SuppressingHash(hashobj, (ValueError,))
-    hashobj.name = "png_sha512"
-    return hashobj
+    return SuppressingHash(PNGHash(hashlib.sha512()), (ValueError,))
 
 def gifhash():
-    hashobj = GIFHash(hashlib.sha512())
-    hashobj = SuppressingHash(hashobj, (ValueError,))
-    hashobj.name = "gif_sha512"
-    return hashobj
+    return SuppressingHash(GIFHash(hashlib.sha512()), (ValueError,))
 
 class ProcessingFinished(Exception):
     pass