mirror of
https://github.com/beetbox/beets.git
synced 2026-01-30 03:54:21 +01:00
Flake8 fixes
This commit is contained in:
parent
6705c123cf
commit
1670cb4565
6 changed files with 48 additions and 29 deletions
|
|
@ -105,8 +105,9 @@ def albums_in_dir(path):
|
|||
if not subdir_pat:
|
||||
match = marker_pat.match(subdir)
|
||||
if match:
|
||||
subdir_pat = re.compile(r'^%s\d' %
|
||||
re.escape(match.group(1)), re.I)
|
||||
subdir_pat = re.compile(
|
||||
r'^%s\d' % re.escape(match.group(1)), re.I
|
||||
)
|
||||
else:
|
||||
start_collapsing = False
|
||||
break
|
||||
|
|
@ -126,8 +127,9 @@ def albums_in_dir(path):
|
|||
start_collapsing = True
|
||||
# Set the current pattern to match directories with the same
|
||||
# prefix as this one, followed by a digit.
|
||||
collapse_pat = re.compile(r'^%s\d' %
|
||||
re.escape(match.group(1)), re.I)
|
||||
collapse_pat = re.compile(
|
||||
r'^%s\d' % re.escape(match.group(1)), re.I
|
||||
)
|
||||
break
|
||||
|
||||
# If either of the above heuristics indicated that this is the
|
||||
|
|
@ -147,6 +149,7 @@ def albums_in_dir(path):
|
|||
if collapse_paths and collapse_items:
|
||||
yield collapse_paths, collapse_items
|
||||
|
||||
|
||||
def apply_item_metadata(item, track_info):
|
||||
"""Set an item's metadata from its matched TrackInfo object.
|
||||
"""
|
||||
|
|
@ -160,6 +163,7 @@ def apply_item_metadata(item, track_info):
|
|||
# At the moment, the other metadata is left intact (including album
|
||||
# and track number). Perhaps these should be emptied?
|
||||
|
||||
|
||||
def apply_metadata(album_info, mapping):
|
||||
"""Set the items' metadata to match an AlbumInfo object using a
|
||||
mapping from Items to TrackInfo objects.
|
||||
|
|
@ -175,8 +179,8 @@ def apply_metadata(album_info, mapping):
|
|||
|
||||
# Artist sort and credit names.
|
||||
item.artist_sort = track_info.artist_sort or album_info.artist_sort
|
||||
item.artist_credit = track_info.artist_credit or \
|
||||
album_info.artist_credit
|
||||
item.artist_credit = (track_info.artist_credit or
|
||||
album_info.artist_credit)
|
||||
item.albumartist_sort = album_info.artist_sort
|
||||
item.albumartist_credit = album_info.artist_credit
|
||||
|
||||
|
|
|
|||
|
|
@ -26,10 +26,8 @@ from beets.util.functemplate import Template
|
|||
from .query import MatchQuery
|
||||
|
||||
|
||||
|
||||
# Abstract base for model classes.
|
||||
|
||||
|
||||
class Model(object):
|
||||
"""An abstract object representing an object in the database. Model
|
||||
objects act like dictionaries (i.e., the allow subscript access like
|
||||
|
|
@ -94,7 +92,6 @@ class Model(object):
|
|||
# As above: we could consider caching this result.
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
# Basic operation.
|
||||
|
||||
def __init__(self, db=None, **values):
|
||||
|
|
@ -132,7 +129,6 @@ class Model(object):
|
|||
if need_id and not self.id:
|
||||
raise ValueError('{0} has no id'.format(type(self).__name__))
|
||||
|
||||
|
||||
# Essential field accessors.
|
||||
|
||||
def __getitem__(self, key):
|
||||
|
|
@ -190,7 +186,6 @@ class Model(object):
|
|||
else:
|
||||
return base_keys
|
||||
|
||||
|
||||
# Act like a dictionary.
|
||||
|
||||
def update(self, values):
|
||||
|
|
@ -226,7 +221,6 @@ class Model(object):
|
|||
"""
|
||||
return iter(self.keys())
|
||||
|
||||
|
||||
# Convenient attribute access.
|
||||
|
||||
def __getattr__(self, key):
|
||||
|
|
@ -250,7 +244,6 @@ class Model(object):
|
|||
else:
|
||||
del self[key]
|
||||
|
||||
|
||||
# Database interaction (CRUD methods).
|
||||
|
||||
def store(self):
|
||||
|
|
@ -351,7 +344,6 @@ class Model(object):
|
|||
self._dirty.add(key)
|
||||
self.store()
|
||||
|
||||
|
||||
# Formatting and templating.
|
||||
|
||||
@classmethod
|
||||
|
|
@ -364,7 +356,7 @@ class Model(object):
|
|||
# Formatting must result in a string. To deal with
|
||||
# Python2isms, implicitly convert ASCII strings.
|
||||
assert isinstance(value, basestring), \
|
||||
u'field formatter must produce strings'
|
||||
u'field formatter must produce strings'
|
||||
if isinstance(value, bytes):
|
||||
value = value.decode('utf8', 'ignore')
|
||||
|
||||
|
|
@ -421,7 +413,6 @@ class Model(object):
|
|||
template = Template(template)
|
||||
return template.substitute(mapping, funcs)
|
||||
|
||||
|
||||
# Parsing.
|
||||
|
||||
@classmethod
|
||||
|
|
@ -439,10 +430,8 @@ class Model(object):
|
|||
return string
|
||||
|
||||
|
||||
|
||||
# Database controller and supporting interfaces.
|
||||
|
||||
|
||||
class Results(object):
|
||||
"""An item query result set. Iterating over the collection lazily
|
||||
constructs LibModel objects that reflect database rows.
|
||||
|
|
@ -611,7 +600,6 @@ class Database(object):
|
|||
self._make_table(model_cls._table, model_cls._fields)
|
||||
self._make_attribute_table(model_cls._flex_table)
|
||||
|
||||
|
||||
# Primitive access control: connections and transactions.
|
||||
|
||||
def _connection(self):
|
||||
|
|
@ -651,7 +639,6 @@ class Database(object):
|
|||
"""
|
||||
return Transaction(self)
|
||||
|
||||
|
||||
# Schema setup and migration.
|
||||
|
||||
def _make_table(self, table, fields):
|
||||
|
|
@ -705,7 +692,6 @@ class Database(object):
|
|||
ON {0} (entity_id);
|
||||
""".format(flex_table))
|
||||
|
||||
|
||||
# Querying.
|
||||
|
||||
def _fetch(self, model_cls, query, order_by=None):
|
||||
|
|
|
|||
|
|
@ -176,7 +176,10 @@ class BeetsPlugin(object):
|
|||
return func
|
||||
return helper
|
||||
|
||||
|
||||
_classes = set()
|
||||
|
||||
|
||||
def load_plugins(names=()):
|
||||
"""Imports the modules for a sequence of plugin names. Each name
|
||||
must be the name of a Python module under the "beetsplug" namespace
|
||||
|
|
@ -204,7 +207,10 @@ def load_plugins(names=()):
|
|||
log.warn('** error loading plugin %s' % name)
|
||||
log.warn(traceback.format_exc())
|
||||
|
||||
|
||||
_instances = {}
|
||||
|
||||
|
||||
def find_plugins():
|
||||
"""Returns a list of BeetsPlugin subclass instances from all
|
||||
currently loaded beets plugins. Loads the default plugin set
|
||||
|
|
@ -230,6 +236,7 @@ def commands():
|
|||
out += plugin.commands()
|
||||
return out
|
||||
|
||||
|
||||
def queries():
|
||||
"""Returns a dict mapping prefix strings to Query subclasses all loaded
|
||||
plugins.
|
||||
|
|
@ -239,6 +246,7 @@ def queries():
|
|||
out.update(plugin.queries())
|
||||
return out
|
||||
|
||||
|
||||
def track_distance(item, info):
|
||||
"""Gets the track distance calculated by all loaded plugins.
|
||||
Returns a Distance object.
|
||||
|
|
@ -249,6 +257,7 @@ def track_distance(item, info):
|
|||
dist.update(plugin.track_distance(item, info))
|
||||
return dist
|
||||
|
||||
|
||||
def album_distance(items, album_info, mapping):
|
||||
"""Returns the album distance calculated by plugins."""
|
||||
from beets.autotag.hooks import Distance
|
||||
|
|
@ -257,6 +266,7 @@ def album_distance(items, album_info, mapping):
|
|||
dist.update(plugin.album_distance(items, album_info, mapping))
|
||||
return dist
|
||||
|
||||
|
||||
def candidates(items, artist, album, va_likely):
|
||||
"""Gets MusicBrainz candidates for an album from each plugin.
|
||||
"""
|
||||
|
|
@ -265,6 +275,7 @@ def candidates(items, artist, album, va_likely):
|
|||
out.extend(plugin.candidates(items, artist, album, va_likely))
|
||||
return out
|
||||
|
||||
|
||||
def item_candidates(item, artist, title):
|
||||
"""Gets MusicBrainz candidates for an item from the plugins.
|
||||
"""
|
||||
|
|
@ -273,6 +284,7 @@ def item_candidates(item, artist, title):
|
|||
out.extend(plugin.item_candidates(item, artist, title))
|
||||
return out
|
||||
|
||||
|
||||
def album_for_id(album_id):
|
||||
"""Get AlbumInfo objects for a given ID string.
|
||||
"""
|
||||
|
|
@ -283,6 +295,7 @@ def album_for_id(album_id):
|
|||
out.append(res)
|
||||
return out
|
||||
|
||||
|
||||
def track_for_id(track_id):
|
||||
"""Get TrackInfo objects for a given ID string.
|
||||
"""
|
||||
|
|
@ -293,6 +306,7 @@ def track_for_id(track_id):
|
|||
out.append(res)
|
||||
return out
|
||||
|
||||
|
||||
def template_funcs():
|
||||
"""Get all the template functions declared by plugins as a
|
||||
dictionary.
|
||||
|
|
@ -303,6 +317,7 @@ def template_funcs():
|
|||
funcs.update(plugin.template_funcs)
|
||||
return funcs
|
||||
|
||||
|
||||
def import_stages():
|
||||
"""Get a list of import stage functions defined by plugins."""
|
||||
stages = []
|
||||
|
|
@ -324,6 +339,7 @@ def item_field_getters():
|
|||
funcs.update(plugin.template_fields)
|
||||
return funcs
|
||||
|
||||
|
||||
def album_field_getters():
|
||||
"""As above, for album fields.
|
||||
"""
|
||||
|
|
@ -347,6 +363,7 @@ def event_handlers():
|
|||
all_handlers[event] += handlers
|
||||
return all_handlers
|
||||
|
||||
|
||||
def send(event, **arguments):
|
||||
"""Sends an event to all assigned event listeners. Event is the
|
||||
name of the event to send, all other named arguments go to the
|
||||
|
|
|
|||
|
|
@ -57,11 +57,13 @@ YAML_COMMENT = '# Automatically migrated from legacy .beetsconfig.\n\n'
|
|||
|
||||
log = logging.getLogger('beets')
|
||||
|
||||
|
||||
# An itertools recipe.
|
||||
def grouper(n, iterable):
|
||||
args = [iter(iterable)] * n
|
||||
return itertools.izip_longest(*args)
|
||||
|
||||
|
||||
def _displace(fn):
|
||||
"""Move a file aside using a timestamp suffix so a new file can be
|
||||
put in its place.
|
||||
|
|
@ -72,6 +74,7 @@ def _displace(fn):
|
|||
True
|
||||
)
|
||||
|
||||
|
||||
def default_paths():
|
||||
"""Produces the appropriate default config and library database
|
||||
paths for the current system. On Unix, this is always in ~. On
|
||||
|
|
@ -96,6 +99,7 @@ def default_paths():
|
|||
|
||||
return config, libpath
|
||||
|
||||
|
||||
def get_config():
|
||||
"""Using the same logic as beets 1.0, locate and read the
|
||||
.beetsconfig file. Return a ConfigParser instance or None if no
|
||||
|
|
@ -115,6 +119,7 @@ def get_config():
|
|||
else:
|
||||
return None, configpath
|
||||
|
||||
|
||||
def flatten_config(config):
|
||||
"""Given a ConfigParser, flatten the values into a dict-of-dicts
|
||||
representation where each section gets its own dictionary of values.
|
||||
|
|
@ -126,6 +131,7 @@ def flatten_config(config):
|
|||
sec_dict[option] = config.get(section, option, True)
|
||||
return out
|
||||
|
||||
|
||||
def transform_value(value):
|
||||
"""Given a string read as the value of a config option, return a
|
||||
massaged version of that value (possibly with a different type).
|
||||
|
|
@ -147,9 +153,10 @@ def transform_value(value):
|
|||
return float(value)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
return value
|
||||
|
||||
|
||||
def transform_data(data):
|
||||
"""Given a dict-of-dicts representation of legacy config data, tweak
|
||||
the data into a new form. This new form is suitable for dumping as
|
||||
|
|
@ -209,11 +216,12 @@ def transform_data(data):
|
|||
if section == 'importfeeds':
|
||||
if key.startswith(IMPORTFEEDS_PREFIX):
|
||||
key = key[len(IMPORTFEEDS_PREFIX):]
|
||||
|
||||
|
||||
sec_out[key] = transform_value(value)
|
||||
|
||||
return out
|
||||
|
||||
|
||||
class Dumper(yaml.SafeDumper):
|
||||
"""A PyYAML Dumper that represents OrderedDicts as ordinary mappings
|
||||
(in order, of course).
|
||||
|
|
@ -230,10 +238,10 @@ class Dumper(yaml.SafeDumper):
|
|||
for item_key, item_value in mapping:
|
||||
node_key = self.represent_data(item_key)
|
||||
node_value = self.represent_data(item_value)
|
||||
if not (isinstance(node_key, yaml.ScalarNode) and \
|
||||
if not (isinstance(node_key, yaml.ScalarNode) and
|
||||
not node_key.style):
|
||||
best_style = False
|
||||
if not (isinstance(node_value, yaml.ScalarNode) and \
|
||||
if not (isinstance(node_value, yaml.ScalarNode) and
|
||||
not node_value.style):
|
||||
best_style = False
|
||||
value.append((node_key, node_value))
|
||||
|
|
@ -245,6 +253,7 @@ class Dumper(yaml.SafeDumper):
|
|||
return node
|
||||
Dumper.add_representer(confit.OrderedDict, Dumper.represent_dict)
|
||||
|
||||
|
||||
def migrate_config(replace=False):
|
||||
"""Migrate a legacy beetsconfig file to a new-style config.yaml file
|
||||
in an appropriate place. If `replace` is enabled, then any existing
|
||||
|
|
@ -257,7 +266,7 @@ def migrate_config(replace=False):
|
|||
if not config:
|
||||
log.debug(u'no config file found at {0}'.format(
|
||||
util.displayable_path(configpath)
|
||||
))
|
||||
))
|
||||
return
|
||||
|
||||
# Get the new configuration file path and possibly move it out of
|
||||
|
|
@ -302,6 +311,7 @@ def migrate_config(replace=False):
|
|||
f.write(yaml_out)
|
||||
return destfn
|
||||
|
||||
|
||||
def migrate_db(replace=False):
|
||||
"""Copy the beets library database file to the new location (e.g.,
|
||||
from ~/.beetsmusic.blb to ~/.config/beets/library.db).
|
||||
|
|
@ -313,7 +323,7 @@ def migrate_db(replace=False):
|
|||
# Old DB does not exist or we're configured to point to the same
|
||||
# database. Do nothing.
|
||||
return
|
||||
|
||||
|
||||
if os.path.exists(destfn):
|
||||
if replace:
|
||||
log.debug(u'moving old database aside: {0}'.format(
|
||||
|
|
@ -329,6 +339,7 @@ def migrate_db(replace=False):
|
|||
util.copy(srcfn, destfn)
|
||||
return destfn
|
||||
|
||||
|
||||
def migrate_state(replace=False):
|
||||
"""Copy the beets runtime state file from the old path (i.e.,
|
||||
~/.beetsstate) to the new path (i.e., ~/.config/beets/state.pickle).
|
||||
|
|
@ -379,6 +390,8 @@ def automigrate():
|
|||
# CLI command for explicit migration.
|
||||
|
||||
migrate_cmd = ui.Subcommand('migrate', help='convert legacy config')
|
||||
|
||||
|
||||
def migrate_func(lib, opts, args):
|
||||
"""Explicit command for migrating files. Existing files in each
|
||||
destination are moved aside.
|
||||
|
|
|
|||
|
|
@ -9,4 +9,4 @@ ignore=F401,E241
|
|||
|
||||
# List of files that have not been cleand up yet. We will try to reduce
|
||||
# this with each commit
|
||||
exclude=test/*,beetsplug/*,beets/autotag/hooks.py,beets/autotag/__init__.py,beets/autotag/match.py,beets/autotag/mb.py,beets/dbcore/db.py,beets/importer.py,beets/library.py,beets/plugins.py,beets/ui/commands.py,beets/ui/migrate.py,beets/util/functemplate.py
|
||||
exclude=test/*,beetsplug/*,beets/autotag/hooks.py,beets/autotag/match.py,beets/autotag/mb.py,beets/importer.py,beets/library.py,beets/ui/commands.py,beets/util/functemplate.py
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
"""Tests for the 'zero' plugin"""
|
||||
|
||||
import _common
|
||||
from _common import unittest
|
||||
from helper import TestHelper
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue