summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parser_factory.py11
-rw-r--r--src/parsers/abstract.py5
-rw-r--r--src/parsers/png.py18
3 files changed, 31 insertions, 3 deletions
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)