mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-21 07:04:02 +00:00
Merge pull request #1143 from zas/fix_missing_clear_existing_tags
Cleanup missing clear existing tags setting fix
This commit is contained in:
@@ -33,6 +33,7 @@ from picard.script import (
|
||||
ScriptError,
|
||||
ScriptParser,
|
||||
)
|
||||
from picard.util.settingsoverride import SettingsOverride
|
||||
|
||||
from picard.ui.options import (
|
||||
OptionsCheckError,
|
||||
@@ -138,16 +139,15 @@ class RenamingOptionsPage(OptionsPage):
|
||||
self.update_examples()
|
||||
|
||||
def _example_to_filename(self, file):
|
||||
settings = {
|
||||
'windows_compatibility': self.ui.windows_compatibility.isChecked(),
|
||||
settings = SettingsOverride(config.setting, {
|
||||
'ascii_filenames': self.ui.ascii_filenames.isChecked(),
|
||||
'rename_files': self.ui.rename_files.isChecked(),
|
||||
'move_files': self.ui.move_files.isChecked(),
|
||||
'use_va_format': False, # TODO remove
|
||||
'file_naming_format': self.ui.file_naming_format.toPlainText(),
|
||||
'move_files': self.ui.move_files.isChecked(),
|
||||
'move_files_to': os.path.normpath(self.ui.move_files_to.text()),
|
||||
'clear_existing_tags': config.setting['clear_existing_tags'],
|
||||
}
|
||||
'rename_files': self.ui.rename_files.isChecked(),
|
||||
'windows_compatibility': self.ui.windows_compatibility.isChecked(),
|
||||
})
|
||||
|
||||
try:
|
||||
if config.setting["enable_tagger_scripts"]:
|
||||
for s_pos, s_name, s_enabled, s_text in config.setting["list_of_scripts"]:
|
||||
|
||||
63
picard/util/settingsoverride.py
Normal file
63
picard/util/settingsoverride.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Picard, the next-generation MusicBrainz tagger
|
||||
# Copyright (C) 2019 Laurent Monin
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from collections.abc import MutableMapping
|
||||
|
||||
|
||||
class SettingsOverride(MutableMapping):
|
||||
""" This class can be used to override config temporarly
|
||||
Basically it returns config[key] if key isn't found in internal dict
|
||||
|
||||
Typical usage:
|
||||
|
||||
settings = SettingsOverride(config.setting)
|
||||
settings["option"] = "value"
|
||||
"""
|
||||
|
||||
def __init__(self, orig_settings, *args, **kwargs):
|
||||
self.orig_settings = orig_settings
|
||||
self._dict = dict()
|
||||
for k, v in dict(*args, **kwargs).items():
|
||||
self[k] = v
|
||||
|
||||
def __getitem__(self, key):
|
||||
try:
|
||||
return self._dict[key]
|
||||
except KeyError:
|
||||
return self.orig_settings[key]
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
self._dict[key] = value
|
||||
|
||||
def __delitem__(self, key):
|
||||
try:
|
||||
del self._dict[key]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def __len__(self):
|
||||
return len(self._dict)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._dict)
|
||||
|
||||
def __repr__(self):
|
||||
d = self.orig_settings.copy()
|
||||
d.update(self._dict)
|
||||
return repr(d)
|
||||
51
test/test_settingsoverride.py
Normal file
51
test/test_settingsoverride.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from test.picardtestcase import PicardTestCase
|
||||
|
||||
from picard import config
|
||||
from picard.util.settingsoverride import SettingsOverride
|
||||
|
||||
|
||||
class SettingsOverrideTest(PicardTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.config = {'key1': 'origval1', 'key2': 'origval2'}
|
||||
config.setting = self.config.copy()
|
||||
self.new_settings = {'key1': 'newval2'}
|
||||
|
||||
def test_read_orig_settings(self):
|
||||
override = SettingsOverride(config.setting, self.new_settings)
|
||||
self.assertEqual(override['key1'], 'newval2')
|
||||
self.assertEqual(override['key2'], 'origval2')
|
||||
with self.assertRaises(KeyError):
|
||||
x = override['key3']
|
||||
|
||||
def test_read_orig_settings_kw(self):
|
||||
override = SettingsOverride(config.setting, key1='newval2')
|
||||
self.assertEqual(override['key1'], 'newval2')
|
||||
self.assertEqual(override['key2'], 'origval2')
|
||||
|
||||
def test_write_orig_settings(self):
|
||||
override = SettingsOverride(config.setting, self.new_settings)
|
||||
override['key1'] = 'newval3'
|
||||
self.assertEqual(override['key1'], 'newval3')
|
||||
self.assertEqual(config.setting['key1'], 'origval1')
|
||||
|
||||
override['key2'] = 'newval4'
|
||||
self.assertEqual(override['key2'], 'newval4')
|
||||
self.assertEqual(config.setting['key2'], 'origval2')
|
||||
|
||||
override['key3'] = 'newval5'
|
||||
self.assertEqual(override['key3'], 'newval5')
|
||||
with self.assertRaises(KeyError):
|
||||
x = config.setting['key3']
|
||||
|
||||
def test_del_orig_settings(self):
|
||||
override = SettingsOverride(config.setting, self.new_settings)
|
||||
|
||||
override['key1'] = 'newval3'
|
||||
self.assertEqual(override['key1'], 'newval3')
|
||||
del override['key1']
|
||||
self.assertEqual(override['key1'], 'origval1')
|
||||
|
||||
self.assertEqual(override['key2'], 'origval2')
|
||||
del override['key2']
|
||||
self.assertEqual(override['key2'], 'origval2')
|
||||
Reference in New Issue
Block a user