From d48dfc8e218c3e762a385f14d0c788115c2a72fa Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 20 Mar 2018 01:20:11 +0100 Subject: PNG support and automatic import! --- src/parser_factory.py | 11 ++++++++++- src/parsers/abstract.py | 5 +++-- src/parsers/png.py | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/parsers/png.py (limited to 'src') 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) -- cgit v1.3