Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _common_set_up(self, extra=None):
config.setting = settings.copy()
if extra is not None:
config.setting.update(extra)
def test_clear_existing_tags_on(self):
config.setting['clear_existing_tags'] = True
existing_metadata = Metadata({'artist': 'The Artist'})
save_metadata(self.filename, existing_metadata)
new_metadata = Metadata({'title': 'The Title'})
loaded_metadata = save_and_load_metadata(self.filename, new_metadata)
self.assertNotIn('artist', loaded_metadata)
self.assertEqual(new_metadata['title'], loaded_metadata['title'])
def _get_tag_name(self, name):
if name == '~rating':
if config.setting['rating_user_email']:
return 'rating:%s' % config.setting['rating_user_email']
else:
return 'rating'
elif name.startswith("~"):
return None
elif name.startswith('lyrics:'):
return 'lyrics'
elif name.startswith('performer:') or name.startswith('comment:'):
return name.split(':', 1)[0]
elif name == 'musicip_fingerprint':
return 'fingerprint'
elif name == 'totaltracks':
return 'tracktotal'
elif name == 'totaldiscs':
return 'disctotal'
elif name in self.__rtranslate:
def _translate_artist_node(node):
transl, translsort = None, None
if config.setting['translate_artist_names']:
locale = config.setting["artist_locale"]
lang = locale.split("_")[0]
if "alias_list" in node.children:
result = (-1, (None, None))
for alias in node.alias_list[0].alias:
if alias.attribs.get("primary") != "primary":
continue
if "locale" not in alias.attribs:
continue
parts = []
if alias.locale == locale:
score = 0.8
elif alias.locale == lang:
score = 0.6
elif alias.locale.split("_")[0] == lang:
score = 0.4
def analyze(self, file, next_func):
fpcalc_next = partial(self._lookup_fingerprint, next_func, file.filename)
if not config.setting["ignore_existing_acoustid_fingerprints"]:
# use cached fingerprint
fingerprints = file.metadata.getall('acoustid_fingerprint')
if fingerprints:
length = int(file.metadata.length / 1000)
fpcalc_next(result=('fingerprint', fingerprints[0], length))
return
# calculate the fingerprint
task = (file, fpcalc_next)
self._queue.append(task)
if self._running < self._max_processes:
self._run_next_task()
def restore_header_state(self):
if self.ui.release_list:
header = self.ui.release_list.header()
state = config.persist[self.dialog_header_state]
if state:
header.restoreState(state)
log.debug("restore_state: %s" % self.dialog_header_state)
self.show_file_browser_action = QtWidgets.QAction(_("File &Browser"), self)
self.show_file_browser_action.setCheckable(True)
if config.persist["view_file_browser"]:
self.show_file_browser_action.setChecked(True)
self.show_file_browser_action.setShortcut(QtGui.QKeySequence(_("Ctrl+B")))
self.show_file_browser_action.triggered.connect(self.show_file_browser)
self.show_cover_art_action = QtWidgets.QAction(_("&Cover Art"), self)
self.show_cover_art_action.setCheckable(True)
if config.persist["view_cover_art"]:
self.show_cover_art_action.setChecked(True)
self.show_cover_art_action.triggered.connect(self.show_cover_art)
self.show_toolbar_action = QtWidgets.QAction(_("&Actions"), self)
self.show_toolbar_action.setCheckable(True)
if config.persist["view_toolbar"]:
self.show_toolbar_action.setChecked(True)
self.show_toolbar_action.triggered.connect(self.show_toolbar)
self.search_action = QtWidgets.QAction(icontheme.lookup('system-search'), _("Search"), self)
self.search_action.setEnabled(False)
self.search_action.triggered.connect(self.search)
self.cd_lookup_action = QtWidgets.QAction(icontheme.lookup('media-optical'), _("Lookup &CD..."), self)
self.cd_lookup_action.setStatusTip(_("Lookup the details of the CD in your drive"))
# TR: Keyboard shortcut for "Lookup CD"
self.cd_lookup_action.setShortcut(QtGui.QKeySequence(_("Ctrl+K")))
self.cd_lookup_action.triggered.connect(self.tagger.lookup_cd)
self.cd_lookup_menu = QtWidgets.QMenu(_("Lookup &CD..."))
self.cd_lookup_menu.triggered.connect(self.tagger.lookup_cd)
self.cd_lookup_action.setEnabled(False)
from picard.ui.util import enabledSlot
_default_music_dir = QStandardPaths.writableLocation(QStandardPaths.MusicLocation)
class RenamingOptionsPage(OptionsPage):
NAME = "filerenaming"
TITLE = N_("File Naming")
PARENT = None
SORT_ORDER = 40
ACTIVE = True
options = [
config.BoolOption("setting", "windows_compatibility", True),
config.BoolOption("setting", "ascii_filenames", False),
config.BoolOption("setting", "rename_files", False),
config.TextOption(
"setting",
"file_naming_format",
DEFAULT_FILE_NAMING_FORMAT,
),
config.BoolOption("setting", "move_files", False),
config.TextOption("setting", "move_files_to", _default_music_dir),
config.BoolOption("setting", "move_additional_files", False),
config.TextOption("setting", "move_additional_files_pattern", "*.jpg *.png"),
config.BoolOption("setting", "delete_empty_dirs", True),
]
def __init__(self, parent=None):
super().__init__(parent)
self.actions = {}
for level, feat in log.levels_features.items():
act = QtWidgets.QAction(_(feat.name), self, checkable=True)
act.triggered.connect(partial(self.verbosity_changed.emit, level))
self.action_group.addAction(act)
self.addAction(act)
self.actions[level] = act
def set_verbosity(self, level):
self.actions[level].setChecked(True)
class LogView(LogViewCommon):
options = [
config.IntOption("setting", "log_verbosity", log.VERBOSITY_DEFAULT),
]
def __init__(self, parent=None):
super().__init__(log.main_tail, _("Log"), parent=parent)
self.verbosity = log.get_effective_level()
self._setup_formats()
self.hl_text = ''
self.hl = None
self.hbox = QtWidgets.QHBoxLayout()
self.vbox.addLayout(self.hbox)
self.verbosity_menu_button = QtWidgets.QPushButton(_("Verbosity"))
self.hbox.addWidget(self.verbosity_menu_button)
if types_include is None:
types_include = []
if types_exclude is None:
types_exclude = []
dialog = CAATypesSelectorDialog(parent, types_include, types_exclude)
result = dialog.exec_()
return (dialog.get_selected_types_include(), dialog.get_selected_types_exclude(), result == QtWidgets.QDialog.Accepted)
class ProviderOptionsCaa(ProviderOptions):
"""
Options for Cover Art Archive cover art provider
"""
options = [
config.BoolOption("setting", "caa_save_single_front_image", False),
config.BoolOption("setting", "caa_approved_only", False),
config.BoolOption("setting", "caa_image_type_as_filename", False),
config.IntOption("setting", "caa_image_size", _CAA_IMAGE_SIZE_DEFAULT),
config.ListOption("setting", "caa_image_types", _CAA_IMAGE_TYPE_DEFAULT_INCLUDE),
config.BoolOption("setting", "caa_restrict_image_types", True),
config.ListOption("setting", "caa_image_types_to_omit", _CAA_IMAGE_TYPE_DEFAULT_EXCLUDE),
]
_options_ui = Ui_CaaOptions
def __init__(self, parent=None):
super().__init__(parent)
self.ui.restrict_images_types.clicked.connect(self.update_caa_types)
self.ui.select_caa_types.clicked.connect(self.select_caa_types)
def restore_defaults(self):