Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def create_test_files():
test_images = [
CoverArtImage(url='file://file1', data=create_fake_png(b'a')),
CoverArtImage(url='file://file2', data=create_fake_png(b'b')),
]
test_files = [
File('test1.flac'),
File('test2.flac'),
File('test2.flac')
]
test_files[0].metadata.images.append(test_images[0])
test_files[1].metadata.images.append(test_images[1])
test_files[2].metadata.images.append(test_images[1])
test_files[0].orig_metadata.images.append(test_images[0])
test_files[1].orig_metadata.images.append(test_images[1])
test_files[2].orig_metadata.images.append(test_images[1])
return (test_images, test_files)
try:
term = spec._encodings[frame.encoding][1]
except AttributeError:
term = spec.encodings[frame.encoding][1]
if data.endswith(term):
data = data[:-len(term)]
return data
id3.MultiSpec._write_orig = id3.MultiSpec.write
id3.MultiSpec.write = patched_MultiSpec_write
id3.TCMP = compatid3_dsf.TCMP
id3.TSO2 = compatid3_dsf.TSO2
class ID3File_DSF(File):
"""Generic ID3-based file."""
_File = None
_IsMP3 = False
__upgrade = {
'XSOP': 'TSOP',
'TXXX:ALBUMARTISTSORT': 'TSO2',
}
__translate = {
'TPE1': 'artist',
'TPE2': 'albumartist',
'TPE3': 'conductor',
'TPE4': 'remixer',
'TCOM': 'composer',
'TCON': 'genre',
def callback(self, objs):
for obj in objs:
if isinstance(obj, Track):
for file_ in obj.linked_files:
self._add_file_to_queue(file_)
elif isinstance(obj, File):
self._add_file_to_queue(obj)
def example_1(self):
file = File("ticket_to_ride.mp3")
file.state = File.NORMAL
file.metadata['album'] = 'Help!'
file.metadata['title'] = 'Ticket to Ride'
file.metadata['artist'] = 'The Beatles'
file.metadata['artistsort'] = 'Beatles, The'
file.metadata['albumartist'] = 'The Beatles'
file.metadata['albumartistsort'] = 'Beatles, The'
file.metadata['tracknumber'] = '7'
file.metadata['totaltracks'] = '14'
file.metadata['discnumber'] = '1'
file.metadata['totaldiscs'] = '1'
file.metadata['date'] = '1965-08-06'
file.metadata['releasetype'] = ['album', 'soundtrack']
file.metadata['~primaryreleasetype'] = ['album']
file.metadata['~secondaryreleasetype'] = ['soundtrack']
file.metadata['releasestatus'] = 'official'
if not (new_values or clear_existing_tags
or name in new_metadata.deleted_tags):
continue
orig_values = self.orig_metadata.getall(name)
if orig_values != new_values:
self.similarity = self.orig_metadata.compare(new_metadata, ignored_tags)
if self.state == File.NORMAL:
self.state = File.CHANGED
break
else:
if (self.metadata.images
and self.orig_metadata.images != self.metadata.images):
self.state = File.CHANGED
else:
self.similarity = 1.0
if self.state == File.CHANGED:
self.state = File.NORMAL
if signal:
log.debug("Updating file %r", self)
self.update_item()
def analyze(self, objs):
"""Analyze the file(s)."""
if not self.use_acoustid:
return
files = self.get_files_from_objects(objs)
for file in files:
file.set_pending()
self._acoustid.analyze(file, partial(file._lookup_finished,
File.LOOKUP_ACOUSTID))
self.update_actions()
metadata = None
orig_metadata = None
obj = None
# Clear any existing status bar messages
self.set_statusbar_message("")
if self.player:
self.player.set_objects(self.selected_objects)
if len(objects) == 1:
obj = list(objects)[0]
if isinstance(obj, File):
metadata = obj.metadata
orig_metadata = obj.orig_metadata
if obj.state == obj.ERROR:
msg = N_("%(filename)s (error: %(error)s)")
mparms = {
'filename': obj.filename,
'error': obj.error
}
else:
msg = N_("%(filename)s")
mparms = {
'filename': obj.filename,
}
self.set_statusbar_message(msg, mparms, echo=None, history=None)
elif isinstance(obj, Track):
metadata = obj.metadata
super().__init__(parent)
self.window = window
self.create_icons()
self.views = [FileTreeView(window, self), AlbumTreeView(window, self)]
self.views[0].itemSelectionChanged.connect(self.update_selection_0)
self.views[1].itemSelectionChanged.connect(self.update_selection_1)
self._selected_view = 0
self._ignore_selection_changes = False
TreeItem.window = window
TreeItem.base_color = self.palette().base().color()
TreeItem.text_color = self.palette().text().color()
TreeItem.text_color_secondary = self.palette() \
.brush(QtGui.QPalette.Disabled, QtGui.QPalette.Text).color()
TrackItem.track_colors = defaultdict(lambda: TreeItem.text_color, {
File.NORMAL: interface_colors.get_qcolor('entity_saved'),
File.CHANGED: TreeItem.text_color,
File.PENDING: interface_colors.get_qcolor('entity_pending'),
File.ERROR: interface_colors.get_qcolor('entity_error'),
})
FileItem.file_colors = defaultdict(lambda: TreeItem.text_color, {
File.NORMAL: TreeItem.text_color,
File.CHANGED: TreeItem.text_color,
File.PENDING: interface_colors.get_qcolor('entity_pending'),
File.ERROR: interface_colors.get_qcolor('entity_error'),
})
def __init__(self, obj, parent=None):
super().__init__(parent)
self.obj = obj
self.images = []
self.existing_images = []
self.ui = Ui_InfoDialog()
self.display_existing_artwork = False
if (isinstance(obj, File)
and isinstance(obj.parent, Track)
or isinstance(obj, Track)
or (isinstance(obj, Album) and obj.get_num_total_files() > 0)):
# Display existing artwork only if selected object is track object
# or linked to a track object or it's an album with files
if (getattr(obj, 'orig_metadata', None) is not None
and obj.orig_metadata.images
and obj.orig_metadata.images != obj.metadata.images):
self.display_existing_artwork = True
self.existing_images = obj.orig_metadata.images
if obj.metadata.images:
self.images = obj.metadata.images
if not self.images and self.existing_images:
self.images = self.existing_images
self.existing_images = []
def __init__(self, row):
File.__init__(self, unicode(row[6], 'utf-8', 'replace'))
self.orig_metadata["title"] = row[0].decode('utf-8', 'replace')
self.orig_metadata["artist"] = row[1].decode('utf-8', 'replace')
self.orig_metadata["date"] = row[2].decode('utf-8', 'replace')
self.orig_metadata["album"] = row[3].decode('utf-8', 'replace')
self.orig_metadata["tracknumber"] = row[4].decode('utf-8', 'replace')
self.orig_metadata["~filename"] = self.base_filename
self.orig_metadata["~#length"] = int(row[5])
self.metadata.copy(self.orig_metadata)