From d48dfc8e218c3e762a385f14d0c788115c2a72fa Mon Sep 17 00:00:00 2001
From: jvoisin <julien.voisin@dustri.org>
Date: Tue, 20 Mar 2018 01:20:11 +0100
Subject: [PATCH] PNG support and automatic import!

---
 main.py                 | 15 +++++----------
 src/parser_factory.py   | 11 ++++++++++-
 src/parsers/abstract.py |  5 +++--
 src/parsers/png.py      | 18 ++++++++++++++++++
 4 files changed, 36 insertions(+), 13 deletions(-)
 create mode 100644 src/parsers/png.py

diff --git a/main.py b/main.py
index 4b965b4..11c2d56 100644
--- a/main.py
+++ b/main.py
@@ -2,7 +2,6 @@ import sys
 from shutil import copyfile
 import argparse
 
-from src.parsers import pdf
 from src import parser_factory
 
 
@@ -20,7 +19,7 @@ def create_arg_parser():
     return parser
 
 def show_meta(file_name:str):
-    p = parser_factory(file_name)
+    p = parser_factory.get_parser(file_name)
     for k,v in p.get_meta().items():
         print("%s: %s" % (k, v))
 
@@ -32,14 +31,10 @@ def main():
         for f in args.files:
             show_meta(f)
         return 0
-    elif not args.files:
-        return argparser.show_help()
-
-    #p = pdf.PDFParser(sys.argv[1])
-    p = parser_factory.get_parser(sys.argv[1])
-    p.remove_all()
-    p = pdf.PDFParser('OUT_clean.pdf')
-    print("ok")
+
+    for f in args.files:
+        p = parser_factory.get_parser(sys.argv[1])
+        p.remove_all()
 
 
 if __name__ == '__main__':
diff --git a/src/parser_factory.py b/src/parser_factory.py
index a93595a..f4cf07b 100644
--- a/src/parser_factory.py
+++ b/src/parser_factory.py
@@ -1,10 +1,19 @@
 import mimetypes
+import importlib
+import pkgutil
 
 from .parsers import abstract
-from .parsers import *
+
+for module_loader, name, ispkg in pkgutil.walk_packages('.src.parsers'):
+    if not name.startswith('src.parsers.'):
+        continue
+    elif name == 'src.parsers.abstract':
+        continue
+    importlib.import_module(name)
 
 def get_parser(filename: str):
     mtype, _ = mimetypes.guess_type(filename)
     for c in abstract.AbstractParser.__subclasses__():
         if mtype in c.mimetypes:
             return c(filename)
+    print('Nope')
diff --git a/src/parsers/abstract.py b/src/parsers/abstract.py
index 80bb812..c2d282f 100644
--- a/src/parsers/abstract.py
+++ b/src/parsers/abstract.py
@@ -1,9 +1,10 @@
 class AbstractParser(object):
+    meta_list = set()
+    mimetypes = set()
+
     def __init__(self, filename: str):
         self.filename = filename
         self.output_filename = filename + '.cleaned'
-        self.meta_list = set()
-        self.mimetypes = set()
 
     def get_meta(self):
         raise NotImplementedError
diff --git a/src/parsers/png.py b/src/parsers/png.py
new file mode 100644
index 0000000..3c0a507
--- /dev/null
+++ b/src/parsers/png.py
@@ -0,0 +1,18 @@
+import subprocess
+import json
+
+import cairo
+
+from . import abstract
+
+class PNGParser(abstract.AbstractParser):
+    mimetypes = {'image/png', }
+    meta_list = set()
+
+    def get_meta(self):
+        out = subprocess.check_output(['exiftool', '-json', self.filename])
+        return json.loads(out)[0]
+
+    def remove_all(self):
+        surface = cairo.ImageSurface.create_from_png(self.filename)
+        surface.write_to_png(self.output_filename)
-- 
GitLab