summaryrefslogtreecommitdiff
path: root/MAT
diff options
context:
space:
mode:
Diffstat (limited to 'MAT')
-rw-r--r--MAT/archive.py11
-rw-r--r--MAT/audio.py74
-rw-r--r--MAT/misc.py4
-rw-r--r--MAT/mutagenpowered.py35
-rw-r--r--MAT/parser.py2
-rw-r--r--MAT/strippers.py3
6 files changed, 61 insertions, 68 deletions
diff --git a/MAT/archive.py b/MAT/archive.py
index d3e6861..61c85a5 100644
--- a/MAT/archive.py
+++ b/MAT/archive.py
@@ -48,16 +48,15 @@ class ZipStripper(GenericArchiveStripper):
48 Check if a ZipInfo object is clean of metadatas added 48 Check if a ZipInfo object is clean of metadatas added
49 by zip itself, independently of the corresponding file metadatas 49 by zip itself, independently of the corresponding file metadatas
50 ''' 50 '''
51 if fileinfo.comment != '': 51 if fileinfo.comment:
52 return False 52 return False
53 elif fileinfo.date_time != 0: 53 elif fileinfo.date_time:
54 return False 54 return False
55 elif fileinfo.create_system != 0: 55 elif fileinfo.create_system:
56 return False 56 return False
57 elif fileinfo.create_version != 0: 57 elif fileinfo.create_version:
58 return False 58 return False
59 else: 59 return True
60 return True
61 60
62 def is_clean(self): 61 def is_clean(self):
63 ''' 62 '''
diff --git a/MAT/audio.py b/MAT/audio.py
index ed849ee..4df33dd 100644
--- a/MAT/audio.py
+++ b/MAT/audio.py
@@ -1,15 +1,15 @@
1''' 1'''
2 Care about audio fileformat 2 Care about audio fileformat
3''' 3'''
4
4try: 5try:
5 from mutagen.flac import FLAC 6 from mutagen.flac import FLAC
6 from mutagen.oggvorbis import OggVorbis 7 from mutagen.oggvorbis import OggVorbis
7except ImportError: 8except ImportError:
8 pass 9 pass
9 10
10
11import parser 11import parser
12import shutil 12import mutagenpowered
13 13
14 14
15class MpegAudioStripper(parser.GenericParser): 15class MpegAudioStripper(parser.GenericParser):
@@ -17,84 +17,44 @@ class MpegAudioStripper(parser.GenericParser):
17 Represent mpeg audio file (mp3, ...) 17 Represent mpeg audio file (mp3, ...)
18 ''' 18 '''
19 def _should_remove(self, field): 19 def _should_remove(self, field):
20 if field.name in ("id3v1", "id3v2"): 20 return field.name in ("id3v1", "id3v2")
21 return True
22 else:
23 return False
24 21
25 22
26class OggStripper(parser.GenericParser): 23class OggStripper(mutagenpowered.MutagenStripper):
27 ''' 24 '''
28 Represent an ogg vorbis file 25 Represent an ogg vorbis file
29 ''' 26 '''
30 def remove_all(self): 27 def _create_mfile(self):
31 if self.backup is True: 28 self.mfile = OggVorbis(self.filename)
32 shutil.copy2(self.filename, self.output)
33 self.filename = self.output
34
35 mfile = OggVorbis(self.filename)
36 mfile.delete()
37 mfile.save()
38 return True
39
40 def is_clean(self):
41 '''
42 Check if the "metadata" block is present in the file
43 '''
44 mfile = OggVorbis(self.filename)
45 if mfile.tags == []:
46 return True
47 else:
48 return False
49
50 def get_meta(self):
51 '''
52 Return the content of the metadata block if present
53 '''
54 metadata = {}
55 mfile = OggVorbis(self.filename)
56 for key, value in mfile.tags:
57 metadata[key] = value
58 return metadata
59 29
60 30
61class FlacStripper(parser.GenericParser): 31class FlacStripper(mutagenpowered.MutagenStripper):
62 ''' 32 '''
63 Represent a Flac audio file 33 Represent a Flac audio file
64 ''' 34 '''
35 def _create_mfile(self):
36 self.mfile = FLAC(self.filename)
37
65 def remove_all(self): 38 def remove_all(self):
66 ''' 39 '''
67 Remove the "metadata" block from the file 40 Remove the "metadata" block from the file
68 ''' 41 '''
69 if self.backup is True: 42 super(FlacStripper, self).remove_all()
70 shutil.copy2(self.filename, self.output) 43 self.mfile.clear_pictures()
71 self.filename = self.output 44 self.mfile.save()
72
73 mfile = FLAC(self.filename)
74 mfile.delete()
75 mfile.clear_pictures()
76 mfile.save()
77 return True 45 return True
78 46
79 def is_clean(self): 47 def is_clean(self):
80 ''' 48 '''
81 Check if the "metadata" block is present in the file 49 Check if the "metadata" block is present in the file
82 ''' 50 '''
83 mfile = FLAC(self.filename) 51 return super(FlacStripper, self).is_clean() and not self.mfile.pictures
84 if mfile.tags is None and mfile.pictures == []:
85 return True
86 else:
87 return False
88 52
89 def get_meta(self): 53 def get_meta(self):
90 ''' 54 '''
91 Return the content of the metadata block if present 55 Return the content of the metadata block if present
92 ''' 56 '''
93 metadata = {} 57 metadata = super(FlacStripper, self).get_meta()
94 mfile = FLAC(self.filename) 58 if self.mfile.pictures:
95 if mfile.tags is not None: 59 metadata['picture:'] = 'yes'
96 if mfile.pictures != []:
97 metadata['picture :'] = 'yes'
98 for key, value in mfile.tags:
99 metadata[key] = value
100 return metadata 60 return metadata
diff --git a/MAT/misc.py b/MAT/misc.py
index 28ee892..582f34e 100644
--- a/MAT/misc.py
+++ b/MAT/misc.py
@@ -24,7 +24,7 @@ class TorrentStripper(parser.GenericParser):
24 decoded = bencode.bdecode(f.read()) 24 decoded = bencode.bdecode(f.read())
25 for key in self.fields: 25 for key in self.fields:
26 try: 26 try:
27 if decoded[key] != '': 27 if decoded[key]:
28 return False 28 return False
29 except KeyError: 29 except KeyError:
30 pass 30 pass
@@ -39,7 +39,7 @@ class TorrentStripper(parser.GenericParser):
39 decoded = bencode.bdecode(f.read()) 39 decoded = bencode.bdecode(f.read())
40 for key in self.fields: 40 for key in self.fields:
41 try: 41 try:
42 if decoded[key] != '': 42 if decoded[key]:
43 metadata[key] = decoded[key] 43 metadata[key] = decoded[key]
44 except KeyError: 44 except KeyError:
45 pass 45 pass
diff --git a/MAT/mutagenpowered.py b/MAT/mutagenpowered.py
new file mode 100644
index 0000000..d44bbdb
--- /dev/null
+++ b/MAT/mutagenpowered.py
@@ -0,0 +1,35 @@
1import parser
2import shutil
3
4
5class MutagenStripper(parser.GenericParser):
6 def __init__(self, filename, parser, mime, backup, **kwargs):
7 super(MutagenStripper, self).__init__(filename, parser, mime, backup, **kwargs)
8 self._create_mfile()
9
10 def _create_mfile(self):
11 raise NotImplemented
12
13 def is_clean(self):
14 return not self.mfile.tags
15
16 def remove_all(self):
17 if self.backup:
18 shutil.copy2(self.filename, self.output)
19 self.mfile.filename = self.output
20 else:
21 self.mfile.filename = self.filename
22
23 self.mfile.delete()
24 self.mfile.save()
25 return True
26
27 def get_meta(self):
28 '''
29 Return the content of the metadata block is present
30 '''
31 metadata = {}
32 if self.mfile.tags:
33 for key, value in self.mfile.tags:
34 metadata[key] = value
35 return metadata
diff --git a/MAT/parser.py b/MAT/parser.py
index e5acbf8..d6b7faf 100644
--- a/MAT/parser.py
+++ b/MAT/parser.py
@@ -101,7 +101,7 @@ class GenericParser(object):
101 ''' 101 '''
102 for field in fieldset: 102 for field in fieldset:
103 remove = self._should_remove(field) 103 remove = self._should_remove(field)
104 if remove is True: 104 if remove:
105 try: 105 try:
106 metadata[field.name] = field.value 106 metadata[field.name] = field.value
107 except: 107 except:
diff --git a/MAT/strippers.py b/MAT/strippers.py
index ad79d54..d274e7e 100644
--- a/MAT/strippers.py
+++ b/MAT/strippers.py
@@ -61,8 +61,7 @@ try:
61 import exiftool 61 import exiftool
62 STRIPPERS['image/jpeg'] = exiftool.JpegStripper 62 STRIPPERS['image/jpeg'] = exiftool.JpegStripper
63 STRIPPERS['image/png'] = exiftool.PngStripper 63 STRIPPERS['image/png'] = exiftool.PngStripper
64except OSError: # if exiftool is not installed, use hachoir 64except OSError: # if exiftool is not installed, use hachoir instead
65 print('Unable to find exiftool: limited images support') 65 print('Unable to find exiftool: limited images support')
66 STRIPPERS['image/jpeg'] = images.JpegStripper 66 STRIPPERS['image/jpeg'] = images.JpegStripper
67 STRIPPERS['image/png'] = images.PngStripper 67 STRIPPERS['image/png'] = images.PngStripper
68