From 1670cb456578694feba6a987f6fa1c0880a42309 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Fri, 11 Apr 2014 16:05:08 +0200 Subject: [PATCH] Flake8 fixes --- beets/autotag/__init__.py | 16 ++++++++++------ beets/dbcore/db.py | 16 +--------------- beets/plugins.py | 17 +++++++++++++++++ beets/ui/migrate.py | 25 +++++++++++++++++++------ setup.cfg | 2 +- test/test_zero.py | 1 - 6 files changed, 48 insertions(+), 29 deletions(-) diff --git a/beets/autotag/__init__.py b/beets/autotag/__init__.py index 3477f2128..90a597b28 100644 --- a/beets/autotag/__init__.py +++ b/beets/autotag/__init__.py @@ -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 diff --git a/beets/dbcore/db.py b/beets/dbcore/db.py index a5f29e0ed..3901107f3 100644 --- a/beets/dbcore/db.py +++ b/beets/dbcore/db.py @@ -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): diff --git a/beets/plugins.py b/beets/plugins.py index 4b4a0d090..3dca22a97 100755 --- a/beets/plugins.py +++ b/beets/plugins.py @@ -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 diff --git a/beets/ui/migrate.py b/beets/ui/migrate.py index 784d7c827..3d7fafe0e 100644 --- a/beets/ui/migrate.py +++ b/beets/ui/migrate.py @@ -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. diff --git a/setup.cfg b/setup.cfg index c504eb55f..8590e5fb0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -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 diff --git a/test/test_zero.py b/test/test_zero.py index 11d89c3f6..0976a3d59 100644 --- a/test/test_zero.py +++ b/test/test_zero.py @@ -1,6 +1,5 @@ """Tests for the 'zero' plugin""" -import _common from _common import unittest from helper import TestHelper