Use sets instead of lists in conditionals

This commit is contained in:
Philipp Wolfer
2021-10-31 10:04:07 +01:00
parent 72f7d0ed18
commit cb6973cf44
25 changed files with 50 additions and 51 deletions

View File

@@ -123,7 +123,7 @@ def code_to_language(language_code):
def escape_string(text):
for escape, char in ESCAPE_CHARS.items():
if char in ("'", "`"): # No need to escape quotes other than ""
if char in {"'", "`"}: # No need to escape quotes other than ""
continue
text = text.replace(char, escape)
return text

View File

@@ -233,7 +233,7 @@ class Cluster(FileList):
def column(self, column):
if column == 'title':
return '%s (%d)' % (self.metadata['album'], len(self.files))
elif self.special and (column in ['~length', 'album', 'covercount']):
elif self.special and column in {'~length', 'album', 'covercount'}:
return ''
elif column == '~length':
return format_time(self.metadata.length)

View File

@@ -168,7 +168,7 @@ class APEv2File(File):
if len(disc) > 1:
metadata["totaldiscs"] = disc[1]
value = disc[0]
elif name in ('performer', 'comment'):
elif name in {'performer', 'comment'}:
if value.endswith(')'):
start = value.rfind(' (')
if start > 0:
@@ -213,7 +213,7 @@ class APEv2File(File):
elif name == 'discnumber':
if 'totaldiscs' in metadata:
value = '%s/%s' % (value, metadata['totaldiscs'])
elif name in ('totaltracks', 'totaldiscs'):
elif name in {'totaltracks', 'totaldiscs'}:
continue
# "performer:Piano=Joe Barr" => "Performer=Joe Barr (Piano)"
elif name.startswith('performer:') or name.startswith('comment:'):
@@ -239,7 +239,7 @@ class APEv2File(File):
"""Remove the tags from the file that were deleted in the UI"""
for tag in metadata.deleted_tags:
real_name = self._get_tag_name(tag)
if real_name in ('Lyrics', 'Comment', 'Performer'):
if real_name in {'Lyrics', 'Comment', 'Performer'}:
parts = tag.split(':', 1)
if len(parts) == 2:
tag_type_regex = re.compile(r"\(%s\)$" % re.escape(parts[1]))
@@ -250,7 +250,7 @@ class APEv2File(File):
if re.search(tag_type_regex, item):
existing_tags.remove(item)
tags[real_name] = existing_tags
elif tag in ('totaltracks', 'totaldiscs'):
elif tag in {'totaltracks', 'totaldiscs'}:
tagstr = real_name.lower() + 'number'
if tagstr in metadata:
tags[real_name] = metadata[tagstr]
@@ -265,9 +265,9 @@ class APEv2File(File):
return 'Lyrics'
elif name == 'date':
return 'Year'
elif name in ('tracknumber', 'totaltracks'):
elif name in {'tracknumber', 'totaltracks'}:
return 'Track'
elif name in ('discnumber', 'totaldiscs'):
elif name in {'discnumber', 'totaldiscs'}:
return 'Disc'
elif name.startswith('performer:') or name.startswith('comment:'):
return name.split(':', 1)[0].title()

View File

@@ -310,7 +310,7 @@ class ASFFile(File):
def supports_tag(cls, name):
return (name in cls.__TRANS
or name in cls.__TRANS_CI
or name in ('~rating', 'totaldiscs')
or name in {'~rating', 'totaldiscs'}
or name.startswith('lyrics:'))
def _get_tag_name(self, name):

View File

@@ -259,7 +259,7 @@ class ID3File(File):
frameid = frame.FrameID
if frameid in self.__translate:
name = self.__translate[frameid]
if frameid.startswith('T') or frameid in ["GRP1", "MVNM"]:
if frameid.startswith('T') or frameid in {"GRP1", "MVNM"}:
for text in frame.text:
if text:
metadata.add(name, text)

View File

@@ -216,8 +216,7 @@ class MP4File(File):
log.debug('disk is invalid, ignoring')
elif name == "covr":
for value in values:
if value.imageformat not in (value.FORMAT_JPEG,
value.FORMAT_PNG):
if value.imageformat not in {value.FORMAT_JPEG, value.FORMAT_PNG}:
continue
try:
coverartimage = TagCoverArtImage(
@@ -337,7 +336,7 @@ class MP4File(File):
for tag in metadata.deleted_tags:
real_name = self._get_tag_name(tag)
if real_name and real_name in tags:
if tag not in ("totaltracks", "totaldiscs"):
if tag not in {"totaltracks", "totaldiscs"}:
del tags[real_name]
@classmethod
@@ -364,9 +363,9 @@ class MP4File(File):
return self.__r_freeform_tags_ci[name]
elif name == "musicip_fingerprint":
return "----:com.apple.iTunes:fingerprint"
elif name in ("tracknumber", "totaltracks"):
elif name in {"tracknumber", "totaltracks"}:
return "trkn"
elif name in ("discnumber", "totaldiscs"):
elif name in {"discnumber", "totaldiscs"}:
return "disk"
elif self.supports_tag(name) and name not in self.__other_supported_tags:
name = self.__casemap.get(name, name)

View File

@@ -73,7 +73,7 @@ def update_to_v23(tags):
# leave TSOP, TSOA and TSOT even though they are officially defined
# only in ID3v2.4, because most applications use them also in ID3v2.3
frames = []
for key in ["TSOP", "TSOA", "TSOT", "TSST"]:
for key in {"TSOP", "TSOA", "TSOT", "TSST"}:
frames.extend(tags.getall(key))
ID3.update_to_v23(tags)
for frame in frames:

View File

@@ -323,7 +323,7 @@ class VCommentFile(File):
for tag in metadata.deleted_tags:
real_name = self._get_tag_name(tag)
if is_valid_key(real_name) and real_name in tags:
if real_name in ('performer', 'comment'):
if real_name in {'performer', 'comment'}:
parts = tag.split(':', 1)
if len(parts) == 2:
tag_type_regex = re.compile(r"\(%s\)$" % re.escape(parts[1]))
@@ -335,7 +335,7 @@ class VCommentFile(File):
existing_tags.remove(item)
tags[real_name] = existing_tags
else:
if tag in ('totaldiscs', 'totaltracks') and tag in tags:
if tag in {'totaldiscs', 'totaltracks'} and tag in tags:
# both tag and real_name are to be deleted in this case
del tags[tag]
del tags[real_name]

View File

@@ -155,7 +155,7 @@ def _relations_to_metadata(relations, m):
attribs = []
if 'attributes' in relation:
attribs = [a for a in relation['attributes']]
if reltype in ('vocal', 'instrument', 'performer'):
if reltype in {'vocal', 'instrument', 'performer'}:
if use_instrument_credits:
attr_credits = relation.get('attribute-credits', {})
else:
@@ -424,9 +424,9 @@ def recording_to_metadata(node, m, track=None):
add_genres_from_node(artist, artist_obj)
elif key == 'relations':
_relations_to_metadata(value, m)
elif key in ('genres', 'tags') and track:
elif track and key in {'genres', 'tags'}:
add_genres(value, track)
elif key in ('user-genres', 'user-tags') and track:
elif track and key in {'user-genres', 'user-tags'}:
add_user_genres(value, track)
elif key == 'isrcs':
add_isrcs_to_metadata(value, m)

View File

@@ -214,7 +214,7 @@ class Metadata(MutableMapping):
a = self[name]
b = other[name]
if a and b:
if name in ('tracknumber', 'totaltracks', 'discnumber', 'totaldiscs'):
if name in {'tracknumber', 'totaltracks', 'discnumber', 'totaldiscs'}:
try:
ia = int(a)
ib = int(b)
@@ -568,7 +568,7 @@ class MultiMetadataProxy:
return attribute
def __setattr__(self, name, value):
if name in ('metadata', 'combined_metadata'):
if name in {'metadata', 'combined_metadata'}:
super().__setattr__(name, value)
else:
self.metadata.__setattr__(name, value)

View File

@@ -404,7 +404,7 @@ For example `$unset(performer:*)` would unset all performer tags."""
def func_unset(parser, name):
name = normalize_tagname(name)
# Allow wild-card unset for certain keys
if name in ('performer:*', 'comment:*', 'lyrics:*'):
if name in {'performer:*', 'comment:*', 'lyrics:*'}:
name = name[:-1]
for key in list(parser.context.keys()):
if key.startswith(name):

View File

@@ -92,7 +92,7 @@ class TagGenreFilter:
self.match_regexes = defaultdict(list)
for lineno, line in enumerate(filters.splitlines()):
line = line.strip()
if line and line[0] in ('+', '-'):
if line and line[0] in {'+', '-'}:
_list = line[0]
remain = line[1:].strip()
if not remain:

View File

@@ -114,7 +114,7 @@ class CoverArtThumbnail(ActiveLabel):
if not accepted:
for url in mime_data.urls():
if url.scheme() in ('https', 'http', 'file'):
if url.scheme() in {'https', 'http', 'file'}:
accepted = True
log.debug("Dropped %s url (with %d bytes of data)",
url.toString(), len(dropped_data or ''))
@@ -398,7 +398,7 @@ class CoverArtBox(QtWidgets.QGroupBox):
if fallback_data:
self.load_remote_image(url, fallback_data)
if url.scheme() in ('http', 'https'):
if url.scheme() in {'http', 'https'}:
path = url.path()
if url.hasQuery():
query = QtCore.QUrlQuery(url.query())
@@ -434,7 +434,7 @@ class CoverArtBox(QtWidgets.QGroupBox):
url_query = QtCore.QUrlQuery(url.query())
log.debug('Fetched remote image with MIME-Type %s from %s', mime, url.toString())
# If mime indicates only binary data we can try to guess the real mime type
if (mime in ('application/octet-stream', 'binary/data') or mime.startswith('image/')
if (mime in {'application/octet-stream', 'binary/data'} or mime.startswith('image/')
or imageinfo.supports_mime_type(mime)):
try:
self._try_load_remote_image(url, data)

View File

@@ -57,14 +57,14 @@ class TagEditorDelegate(QtWidgets.QItemDelegate):
if not index.isValid():
return None
tag = self.get_tag_name(index)
if tag.partition(':')[0] in ('comment', 'lyrics'):
if tag.partition(':')[0] in {'comment', 'lyrics'}:
editor = QtWidgets.QPlainTextEdit(parent)
editor.setFrameStyle(editor.style().styleHint(QtWidgets.QStyle.SH_ItemView_DrawDelegateFrame, None, editor))
editor.setMinimumSize(QtCore.QSize(0, 80))
else:
editor = super().createEditor(parent, option, index)
completer = None
if tag in ('date', 'originaldate'):
if tag in {'date', 'originaldate'}:
editor.setPlaceholderText(_('YYYY-MM-DD'))
elif tag == 'originalyear':
editor.setPlaceholderText(_('YYYY'))
@@ -120,7 +120,7 @@ class EditTagDialog(PicardDialog):
self.value_selection_changed()
def keyPressEvent(self, event):
if event.modifiers() == QtCore.Qt.NoModifier and event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
if event.modifiers() == QtCore.Qt.NoModifier and event.key() in {QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return}:
self.add_or_edit_value()
event.accept()
elif event.matches(QtGui.QKeySequence.Delete):

View File

@@ -746,7 +746,7 @@ class BaseTreeView(QtWidgets.QTreeWidget):
files.append(file)
else:
new_paths.append(filename)
elif url.scheme() in ("http", "https"):
elif url.scheme() in {"http", "https"}:
file_lookup = tagger.get_file_lookup()
file_lookup.mbid_lookup(url.path(), browser_fallback=False)
if files:
@@ -809,7 +809,7 @@ class BaseTreeView(QtWidgets.QTreeWidget):
cluster_item.add_files(cluster.files)
def moveCursor(self, action, modifiers):
if action in (QtWidgets.QAbstractItemView.MoveUp, QtWidgets.QAbstractItemView.MoveDown):
if action in {QtWidgets.QAbstractItemView.MoveUp, QtWidgets.QAbstractItemView.MoveDown}:
item = self.currentItem()
if item and not item.isSelected():
self.setCurrentItem(item)

View File

@@ -285,9 +285,9 @@ class MetadataBox(QtWidgets.QTableWidget):
return False
item = self.itemFromIndex(index)
if item.flags() & QtCore.Qt.ItemIsEditable and \
trigger in (QtWidgets.QAbstractItemView.DoubleClicked,
trigger in {QtWidgets.QAbstractItemView.DoubleClicked,
QtWidgets.QAbstractItemView.EditKeyPressed,
QtWidgets.QAbstractItemView.AnyKeyPressed):
QtWidgets.QAbstractItemView.AnyKeyPressed}:
tag = self.tag_diff.tag_names[item.row()]
values = self.tag_diff.new[tag]
if len(values) > 1:

View File

@@ -212,7 +212,7 @@ class EditableListModel(QtCore.QAbstractListModel):
return len(self._items)
def data(self, index, role=QtCore.Qt.DisplayRole):
if not index.isValid() or role not in (QtCore.Qt.DisplayRole, QtCore.Qt.EditRole):
if not index.isValid() or role not in {QtCore.Qt.DisplayRole, QtCore.Qt.EditRole}:
return None
field = 1 if role == QtCore.Qt.DisplayRole else 0
try:
@@ -221,7 +221,7 @@ class EditableListModel(QtCore.QAbstractListModel):
return None
def setData(self, index, value, role=QtCore.Qt.EditRole):
if not index.isValid() or role not in (QtCore.Qt.DisplayRole, QtCore.Qt.EditRole):
if not index.isValid() or role not in {QtCore.Qt.DisplayRole, QtCore.Qt.EditRole}:
return False
i = index.row()
try:

View File

@@ -455,7 +455,7 @@ class ScriptTextEdit(QTextEdit):
tc.select(QTextCursor.WordUnderCursor)
selected_text = tc.selectedText()
# Check for start of function or end of variable
if current_position > 0 and selected_text and selected_text[0] in ('(', '%'):
if current_position > 0 and selected_text and selected_text[0] in {'(', '%'}:
current_position -= 1
tc.setPosition(current_position)
tc.select(QTextCursor.WordUnderCursor)
@@ -484,7 +484,7 @@ class ScriptTextEdit(QTextEdit):
def keyPressEvent(self, event):
if self.completer.popup().isVisible():
if event.key() in (Qt.Key_Tab, Qt.Key_Return, Qt.Key_Enter):
if event.key() in {Qt.Key_Tab, Qt.Key_Return, Qt.Key_Enter}:
self.completer.activated.emit(self.completer.get_selected())
return
@@ -497,14 +497,14 @@ class ScriptTextEdit(QTextEdit):
modifier = QtCore.Qt.MetaModifier if IS_MACOS else QtCore.Qt.ControlModifier
force_completion_popup = event.key() == QtCore.Qt.Key_Space and event.modifiers() & modifier
if not (force_completion_popup
or event.key() in (Qt.Key_Backspace, Qt.Key_Delete)
or event.key() in {Qt.Key_Backspace, Qt.Key_Delete}
or self.autocomplete_trigger_chars.match(event.text())):
self.popup_hide()
return
tc = self.cursor_select_word(full_word=False)
selected_text = tc.selectedText()
if force_completion_popup or (selected_text and selected_text[0] in ('$', '%')):
if force_completion_popup or (selected_text and selected_text[0] in {'$', '%'}):
self.completer.setCompletionPrefix(selected_text)
popup = self.completer.popup()
popup.setCurrentIndex(self.completer.currentIndex())

View File

@@ -839,7 +839,7 @@ def wildcards_to_regex_pattern(pattern):
for c in pattern:
if group is not None:
if escape:
if c in ('\\', '[', ']'):
if c in {'\\', '[', ']'}:
c = '\\' + c
else:
group.append('\\\\')
@@ -855,7 +855,7 @@ def wildcards_to_regex_pattern(pattern):
group.append(c)
continue
elif escape:
if c in ('*', '?', '\\', '[', ']'):
if c in {'*', '?', '\\', '[', ']'}:
part = '\\' + c
else:
part = re.escape('\\' + c)

View File

@@ -42,7 +42,7 @@ else:
_current_theme = None
if 'XDG_CURRENT_DESKTOP' in os.environ:
desktop = os.environ['XDG_CURRENT_DESKTOP'].lower()
if desktop in ('gnome', 'unity'):
if desktop in {'gnome', 'unity'}:
_current_theme = (os.popen('gsettings get org.gnome.desktop.interface icon-theme').read().strip()[1:-1]
or None)
elif os.environ.get('KDE_FULL_SESSION'):

View File

@@ -128,7 +128,7 @@ class IdentifyGIF(IdentifyImageType):
def match(self):
# http://en.wikipedia.org/wiki/Graphics_Interchange_Format
return self.data[:6] in (b'GIF87a', b'GIF89a')
return self.data[:6] in {b'GIF87a', b'GIF89a'}
def _read(self):
self.w, self.h = struct.unpack('<HH', self.data[6:10])

View File

@@ -78,7 +78,7 @@ class Version(namedtuple('VersionBase', 'major minor patch identifier revision')
return set(cls._identifiers.keys())
def to_string(self, short=False):
if short and self.identifier in ('alpha', 'beta'):
if short and self.identifier in {'alpha', 'beta'}:
version = self._replace(identifier=self.identifier[0])
else:
version = self
@@ -87,7 +87,7 @@ class Version(namedtuple('VersionBase', 'major minor patch identifier revision')
version_str = '%d.%d' % version[:2]
else:
version_str = '%d.%d.%d' % version[:3]
elif short and version.identifier in ('a', 'b', 'rc'):
elif short and version.identifier in {'a', 'b', 'rc'}:
version_str = '%d.%d.%d%s%d' % version
else:
version_str = '%d.%d.%d.%s%d' % version

View File

@@ -271,7 +271,7 @@ def main():
for path in paths:
if os.path.isfile(path):
name, ext = os.path.splitext(path)
if args.extension in ('', ext):
if args.extension in {'', ext}:
files.add(path)
else:
if args.recursive:

View File

@@ -292,7 +292,7 @@ class picard_build(build):
'publisher': os.environ.get('PICARD_APPX_PUBLISHER', default_publisher),
'version': '.'.join([str(v) for v in store_version]),
})
elif sys.platform not in ['darwin', 'haiku1', 'win32']:
elif sys.platform not in {'darwin', 'haiku1', 'win32'}:
self.run_command('build_appdata')
build.run(self)
@@ -823,7 +823,7 @@ def find_file_in_path(filename):
return file_path
if sys.platform not in ['darwin', 'haiku1', 'win32']:
if sys.platform not in {'darwin', 'haiku1', 'win32'}:
args['data_files'].append(('share/applications', [PICARD_DESKTOP_NAME]))
args['data_files'].append(('share/icons/hicolor/scalable/apps', ['resources/%s.svg' % PICARD_APP_ID]))
for size in (16, 24, 32, 48, 128, 256):

View File

@@ -402,7 +402,7 @@ class CommonTests:
new_metadata = save_and_load_metadata(self.filename, metadata)
self.assertIn('totaldiscs', original_metadata)
if self.testfile_ext in ('.m4a', '.m4v'):
if self.testfile_ext in {'.m4a', '.m4v'}:
self.assertEqual('0', new_metadata['totaldiscs'])
else:
self.assertNotIn('totaldiscs', new_metadata)