diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/abstract.py | 1 | ||||
| -rw-r--r-- | src/audio.py | 4 | ||||
| -rw-r--r-- | src/harmless.py | 1 | ||||
| -rw-r--r-- | src/images.py | 2 | ||||
| -rw-r--r-- | src/office.py | 2 | ||||
| -rw-r--r-- | src/parser_factory.py | 2 |
6 files changed, 12 insertions, 0 deletions
diff --git a/src/abstract.py b/src/abstract.py index 4626789..04c1535 100644 --- a/src/abstract.py +++ b/src/abstract.py | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | import abc | 1 | import abc |
| 2 | 2 | ||
| 3 | |||
| 3 | class AbstractParser(abc.ABC): | 4 | class AbstractParser(abc.ABC): |
| 4 | meta_list = set() | 5 | meta_list = set() |
| 5 | mimetypes = set() | 6 | mimetypes = set() |
diff --git a/src/audio.py b/src/audio.py index a56828f..4a385b2 100644 --- a/src/audio.py +++ b/src/audio.py | |||
| @@ -4,6 +4,7 @@ import mutagen | |||
| 4 | 4 | ||
| 5 | from . import abstract | 5 | from . import abstract |
| 6 | 6 | ||
| 7 | |||
| 7 | class MutagenParser(abstract.AbstractParser): | 8 | class MutagenParser(abstract.AbstractParser): |
| 8 | def get_meta(self): | 9 | def get_meta(self): |
| 9 | f = mutagen.File(self.filename) | 10 | f = mutagen.File(self.filename) |
| @@ -18,6 +19,7 @@ class MutagenParser(abstract.AbstractParser): | |||
| 18 | f.save() | 19 | f.save() |
| 19 | return True | 20 | return True |
| 20 | 21 | ||
| 22 | |||
| 21 | class MP3Parser(MutagenParser): | 23 | class MP3Parser(MutagenParser): |
| 22 | mimetypes = {'audio/mpeg', } | 24 | mimetypes = {'audio/mpeg', } |
| 23 | 25 | ||
| @@ -28,8 +30,10 @@ class MP3Parser(MutagenParser): | |||
| 28 | metadata[key.rstrip(' \t\r\n\0')] = ', '.join(map(str, meta[key].text)) | 30 | metadata[key.rstrip(' \t\r\n\0')] = ', '.join(map(str, meta[key].text)) |
| 29 | return metadata | 31 | return metadata |
| 30 | 32 | ||
| 33 | |||
| 31 | class OGGParser(MutagenParser): | 34 | class OGGParser(MutagenParser): |
| 32 | mimetypes = {'audio/ogg', } | 35 | mimetypes = {'audio/ogg', } |
| 33 | 36 | ||
| 37 | |||
| 34 | class FLACParser(MutagenParser): | 38 | class FLACParser(MutagenParser): |
| 35 | mimetypes = {'audio/flac', } | 39 | mimetypes = {'audio/flac', } |
diff --git a/src/harmless.py b/src/harmless.py index 235dabe..9e7c1b4 100644 --- a/src/harmless.py +++ b/src/harmless.py | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | from . import abstract | 1 | from . import abstract |
| 2 | 2 | ||
| 3 | |||
| 3 | class HarmlessParser(abstract.AbstractParser): | 4 | class HarmlessParser(abstract.AbstractParser): |
| 4 | """ This is the parser for filetypes that do not contain metadata. """ | 5 | """ This is the parser for filetypes that do not contain metadata. """ |
| 5 | mimetypes = {'application/xml', 'text/plain', 'application/rdf+xml'} | 6 | mimetypes = {'application/xml', 'text/plain', 'application/rdf+xml'} |
diff --git a/src/images.py b/src/images.py index afc0658..2c1fd2e 100644 --- a/src/images.py +++ b/src/images.py | |||
| @@ -10,6 +10,7 @@ from gi.repository import GdkPixbuf | |||
| 10 | 10 | ||
| 11 | from . import abstract | 11 | from . import abstract |
| 12 | 12 | ||
| 13 | |||
| 13 | class PNGParser(abstract.AbstractParser): | 14 | class PNGParser(abstract.AbstractParser): |
| 14 | mimetypes = {'image/png', } | 15 | mimetypes = {'image/png', } |
| 15 | meta_whitelist = {'SourceFile', 'ExifToolVersion', 'FileName', | 16 | meta_whitelist = {'SourceFile', 'ExifToolVersion', 'FileName', |
| @@ -31,6 +32,7 @@ class PNGParser(abstract.AbstractParser): | |||
| 31 | surface.write_to_png(self.output_filename) | 32 | surface.write_to_png(self.output_filename) |
| 32 | return True | 33 | return True |
| 33 | 34 | ||
| 35 | |||
| 34 | class GdkPixbufAbstractParser(abstract.AbstractParser): | 36 | class GdkPixbufAbstractParser(abstract.AbstractParser): |
| 35 | """ GdkPixbuf can handle a lot of surfaces, so we're rending images on it, | 37 | """ GdkPixbuf can handle a lot of surfaces, so we're rending images on it, |
| 36 | this has the side-effect of removing metadata completely. | 38 | this has the side-effect of removing metadata completely. |
diff --git a/src/office.py b/src/office.py index 9729e19..11692c3 100644 --- a/src/office.py +++ b/src/office.py | |||
| @@ -7,6 +7,7 @@ import zipfile | |||
| 7 | 7 | ||
| 8 | from . import abstract, parser_factory | 8 | from . import abstract, parser_factory |
| 9 | 9 | ||
| 10 | |||
| 10 | class ArchiveBasedAbstractParser(abstract.AbstractParser): | 11 | class ArchiveBasedAbstractParser(abstract.AbstractParser): |
| 11 | def _clean_zipinfo(self, zipinfo:zipfile.ZipInfo) -> zipfile.ZipInfo: | 12 | def _clean_zipinfo(self, zipinfo:zipfile.ZipInfo) -> zipfile.ZipInfo: |
| 12 | zipinfo.compress_type = zipfile.ZIP_DEFLATED | 13 | zipinfo.compress_type = zipfile.ZIP_DEFLATED |
| @@ -46,6 +47,7 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser): | |||
| 46 | with open(tmp_parser.output_filename, 'rb') as f: | 47 | with open(tmp_parser.output_filename, 'rb') as f: |
| 47 | zout.writestr(clean_zinfo, f.read()) | 48 | zout.writestr(clean_zinfo, f.read()) |
| 48 | 49 | ||
| 50 | |||
| 49 | class MSOfficeParser(ArchiveBasedAbstractParser): | 51 | class MSOfficeParser(ArchiveBasedAbstractParser): |
| 50 | mimetypes = { | 52 | mimetypes = { |
| 51 | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', | 53 | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', |
diff --git a/src/parser_factory.py b/src/parser_factory.py index ecec789..68e9e9c 100644 --- a/src/parser_factory.py +++ b/src/parser_factory.py | |||
| @@ -16,6 +16,7 @@ for module_loader, name, ispkg in pkgutil.walk_packages('.src'): | |||
| 16 | continue | 16 | continue |
| 17 | importlib.import_module(name) | 17 | importlib.import_module(name) |
| 18 | 18 | ||
| 19 | |||
| 19 | def _get_parsers() -> list: | 20 | def _get_parsers() -> list: |
| 20 | """ Get all our parsers!""" | 21 | """ Get all our parsers!""" |
| 21 | def __get_parsers(cls): | 22 | def __get_parsers(cls): |
| @@ -23,6 +24,7 @@ def _get_parsers() -> list: | |||
| 23 | [g for s in cls.__subclasses__() for g in __get_parsers(s)] | 24 | [g for s in cls.__subclasses__() for g in __get_parsers(s)] |
| 24 | return __get_parsers(abstract.AbstractParser) | 25 | return __get_parsers(abstract.AbstractParser) |
| 25 | 26 | ||
| 27 | |||
| 26 | def get_parser(filename: str) -> (T, str): | 28 | def get_parser(filename: str) -> (T, str): |
| 27 | mtype, _ = mimetypes.guess_type(filename) | 29 | mtype, _ = mimetypes.guess_type(filename) |
| 28 | 30 | ||
