diff options
| -rw-r--r-- | main.py | 13 | ||||
| -rw-r--r-- | src/parser_factory.py | 11 | ||||
| -rw-r--r-- | src/parsers/abstract.py | 5 | ||||
| -rw-r--r-- | src/parsers/png.py | 18 |
4 files changed, 35 insertions, 12 deletions
| @@ -2,7 +2,6 @@ import sys | |||
| 2 | from shutil import copyfile | 2 | from shutil import copyfile |
| 3 | import argparse | 3 | import argparse |
| 4 | 4 | ||
| 5 | from src.parsers import pdf | ||
| 6 | from src import parser_factory | 5 | from src import parser_factory |
| 7 | 6 | ||
| 8 | 7 | ||
| @@ -20,7 +19,7 @@ def create_arg_parser(): | |||
| 20 | return parser | 19 | return parser |
| 21 | 20 | ||
| 22 | def show_meta(file_name:str): | 21 | def 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 | ||
| 45 | if __name__ == '__main__': | 40 | 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 @@ | |||
| 1 | import mimetypes | 1 | import mimetypes |
| 2 | import importlib | ||
| 3 | import pkgutil | ||
| 2 | 4 | ||
| 3 | from .parsers import abstract | 5 | from .parsers import abstract |
| 4 | from .parsers import * | 6 | |
| 7 | for 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 | ||
| 6 | def get_parser(filename: str): | 14 | def 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 @@ | |||
| 1 | class AbstractParser(object): | 1 | class 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 @@ | |||
| 1 | import subprocess | ||
| 2 | import json | ||
| 3 | |||
| 4 | import cairo | ||
| 5 | |||
| 6 | from . import abstract | ||
| 7 | |||
| 8 | class 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) | ||
