summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.py13
-rw-r--r--src/parser_factory.py11
-rw-r--r--src/parsers/abstract.py5
-rw-r--r--src/parsers/png.py18
4 files changed, 35 insertions, 12 deletions
diff --git a/main.py b/main.py
index 4b965b4..11c2d56 100644
--- a/main.py
+++ b/main.py
@@ -2,7 +2,6 @@ import sys
2from shutil import copyfile 2from shutil import copyfile
3import argparse 3import argparse
4 4
5from src.parsers import pdf
6from src import parser_factory 5from src import parser_factory
7 6
8 7
@@ -20,7 +19,7 @@ def create_arg_parser():
20 return parser 19 return parser
21 20
22def show_meta(file_name:str): 21def show_meta(file_name:str):
23 p = parser_factory(file_name) 22 p = parser_factory.get_parser(file_name)
24 for k,v in p.get_meta().items(): 23 for k,v in p.get_meta().items():
25 print("%s: %s" % (k, v)) 24 print("%s: %s" % (k, v))
26 25
@@ -32,14 +31,10 @@ def main():
32 for f in args.files: 31 for f in args.files:
33 show_meta(f) 32 show_meta(f)
34 return 0 33 return 0
35 elif not args.files:
36 return argparser.show_help()
37 34
38 #p = pdf.PDFParser(sys.argv[1]) 35 for f in args.files:
39 p = parser_factory.get_parser(sys.argv[1]) 36 p = parser_factory.get_parser(sys.argv[1])
40 p.remove_all() 37 p.remove_all()
41 p = pdf.PDFParser('OUT_clean.pdf')
42 print("ok")
43 38
44 39
45if __name__ == '__main__': 40if __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 @@
1import mimetypes 1import mimetypes
2import importlib
3import pkgutil
2 4
3from .parsers import abstract 5from .parsers import abstract
4from .parsers import * 6
7for module_loader, name, ispkg in pkgutil.walk_packages('.src.parsers'):
8 if not name.startswith('src.parsers.'):
9 continue
10 elif name == 'src.parsers.abstract':
11 continue
12 importlib.import_module(name)
5 13
6def get_parser(filename: str): 14def get_parser(filename: str):
7 mtype, _ = mimetypes.guess_type(filename) 15 mtype, _ = mimetypes.guess_type(filename)
8 for c in abstract.AbstractParser.__subclasses__(): 16 for c in abstract.AbstractParser.__subclasses__():
9 if mtype in c.mimetypes: 17 if mtype in c.mimetypes:
10 return c(filename) 18 return c(filename)
19 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 @@
1class AbstractParser(object): 1class AbstractParser(object):
2 meta_list = set()
3 mimetypes = set()
4
2 def __init__(self, filename: str): 5 def __init__(self, filename: str):
3 self.filename = filename 6 self.filename = filename
4 self.output_filename = filename + '.cleaned' 7 self.output_filename = filename + '.cleaned'
5 self.meta_list = set()
6 self.mimetypes = set()
7 8
8 def get_meta(self): 9 def get_meta(self):
9 raise NotImplementedError 10 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 @@
1import subprocess
2import json
3
4import cairo
5
6from . import abstract
7
8class PNGParser(abstract.AbstractParser):
9 mimetypes = {'image/png', }
10 meta_list = set()
11
12 def get_meta(self):
13 out = subprocess.check_output(['exiftool', '-json', self.filename])
14 return json.loads(out)[0]
15
16 def remove_all(self):
17 surface = cairo.ImageSurface.create_from_png(self.filename)
18 surface.write_to_png(self.output_filename)