From 95e940b9f27ffd5cc767dc136709228480b27872 Mon Sep 17 00:00:00 2001
From: Peter Kessen
Date: Sat, 20 Feb 2016 11:16:55 +0100
Subject: [PATCH] Removed unicode_literals from module util
---
beets/util/__init__.py | 29 +++++++-------
beets/util/artresizer.py | 9 ++---
beets/util/bluelet.py | 7 ++--
beets/util/confit.py | 77 +++++++++++++++++++-------------------
beets/util/enumeration.py | 3 +-
beets/util/functemplate.py | 7 ++--
beets/util/pipeline.py | 23 ++++++------
7 files changed, 74 insertions(+), 81 deletions(-)
diff --git a/beets/util/__init__.py b/beets/util/__init__.py
index 0da68efc7..2a078380c 100644
--- a/beets/util/__init__.py
+++ b/beets/util/__init__.py
@@ -15,8 +15,7 @@
"""Miscellaneous utility functions."""
-from __future__ import (division, absolute_import, print_function,
- unicode_literals)
+from __future__ import (division, absolute_import, print_function)
import os
import sys
import re
@@ -57,10 +56,10 @@ class HumanReadableException(Exception):
def _gerund(self):
"""Generate a (likely) gerund form of the English verb.
"""
- if ' ' in self.verb:
+ if u' ' in self.verb:
return self.verb
- gerund = self.verb[:-1] if self.verb.endswith('e') else self.verb
- gerund += 'ing'
+ gerund = self.verb[:-1] if self.verb.endswith(u'e') else self.verb
+ gerund += u'ing'
return gerund
def _reasonstr(self):
@@ -415,7 +414,7 @@ def copy(path, dest, replace=False):
path = syspath(path)
dest = syspath(dest)
if not replace and os.path.exists(dest):
- raise FilesystemError('file exists', 'copy', (path, dest))
+ raise FilesystemError(u'file exists', 'copy', (path, dest))
try:
shutil.copyfile(path, dest)
except (OSError, IOError) as exc:
@@ -436,7 +435,7 @@ def move(path, dest, replace=False):
path = syspath(path)
dest = syspath(dest)
if os.path.exists(dest) and not replace:
- raise FilesystemError('file exists', 'rename', (path, dest),
+ raise FilesystemError(u'file exists', 'rename', (path, dest),
traceback.format_exc())
# First, try renaming the file.
@@ -462,13 +461,13 @@ def link(path, dest, replace=False):
path = syspath(path)
dest = syspath(dest)
if os.path.exists(dest) and not replace:
- raise FilesystemError('file exists', 'rename', (path, dest),
+ raise FilesystemError(u'file exists', 'rename', (path, dest),
traceback.format_exc())
try:
os.symlink(path, dest)
except OSError:
- raise FilesystemError('Operating system does not support symbolic '
- 'links.', 'link', (path, dest),
+ raise FilesystemError(u'Operating system does not support symbolic '
+ u'links.', 'link', (path, dest),
traceback.format_exc())
@@ -619,7 +618,7 @@ def legalize_path(path, replacements, length, extension, fragment):
def str2bool(value):
"""Returns a boolean reflecting a human-entered string."""
- return value.lower() in ('yes', '1', 'true', 't', 'y')
+ return value.lower() in (u'yes', u'1', u'true', u't', u'y')
def as_string(value):
@@ -643,7 +642,7 @@ def plurality(objs):
"""
c = Counter(objs)
if not c:
- raise ValueError('sequence must be non-empty')
+ raise ValueError(u'sequence must be non-empty')
return c.most_common(1)[0]
@@ -766,7 +765,7 @@ def shlex_split(s):
return [c.decode('utf8') for c in shlex.split(bs)]
else:
- raise TypeError('shlex_split called with non-string')
+ raise TypeError(u'shlex_split called with non-string')
def interactive_open(targets, command):
@@ -854,8 +853,8 @@ def raw_seconds_short(string):
Raises ValueError if the conversion cannot take place due to `string` not
being in the right format.
"""
- match = re.match('^(\d+):([0-5]\d)$', string)
+ match = re.match(r'^(\d+):([0-5]\d)$', string)
if not match:
- raise ValueError('String not in M:SS format')
+ raise ValueError(u'String not in M:SS format')
minutes, seconds = map(int, match.groups())
return float(minutes * 60 + seconds)
diff --git a/beets/util/artresizer.py b/beets/util/artresizer.py
index 1b6a5903e..0fd4253d7 100644
--- a/beets/util/artresizer.py
+++ b/beets/util/artresizer.py
@@ -16,8 +16,7 @@
"""Abstraction layer to resize images using PIL, ImageMagick, or a
public resizing proxy if neither is available.
"""
-from __future__ import (division, absolute_import, print_function,
- unicode_literals)
+from __future__ import (division, absolute_import, print_function)
import urllib
import subprocess
@@ -125,10 +124,10 @@ def im_getsize(path_in):
try:
out = util.command_output(cmd)
except subprocess.CalledProcessError as exc:
- log.warn('ImageMagick size query failed')
+ log.warn(u'ImageMagick size query failed')
log.debug(
- '`convert` exited with (status {}) when '
- 'getting size with command {}:\n{}',
+ u'`convert` exited with (status {}) when '
+ u'getting size with command {}:\n{}',
exc.returncode, cmd, exc.output.strip()
)
return
diff --git a/beets/util/bluelet.py b/beets/util/bluelet.py
index e736bab27..96ae6f686 100644
--- a/beets/util/bluelet.py
+++ b/beets/util/bluelet.py
@@ -7,8 +7,7 @@ asyncore.
Bluelet: easy concurrency without all the messy parallelism.
"""
-from __future__ import (division, absolute_import, print_function,
- unicode_literals)
+from __future__ import (division, absolute_import, print_function)
import socket
import select
@@ -555,7 +554,7 @@ def spawn(coro):
and child coroutines run concurrently.
"""
if not isinstance(coro, types.GeneratorType):
- raise ValueError('%s is not a coroutine' % coro)
+ raise ValueError(u'%s is not a coroutine' % coro)
return SpawnEvent(coro)
@@ -565,7 +564,7 @@ def call(coro):
returns a value using end(), then this event returns that value.
"""
if not isinstance(coro, types.GeneratorType):
- raise ValueError('%s is not a coroutine' % coro)
+ raise ValueError(u'%s is not a coroutine' % coro)
return DelegationEvent(coro)
diff --git a/beets/util/confit.py b/beets/util/confit.py
index 29b906cb6..e017c7d54 100644
--- a/beets/util/confit.py
+++ b/beets/util/confit.py
@@ -15,8 +15,7 @@
"""Worry-free YAML configuration files.
"""
-from __future__ import (unicode_literals, absolute_import, print_function,
- division)
+from __future__ import (absolute_import, print_function, division)
import platform
import os
@@ -101,17 +100,17 @@ class ConfigReadError(ConfigError):
self.filename = filename
self.reason = reason
- message = 'file {0} could not be read'.format(filename)
+ message = u'file {0} could not be read'.format(filename)
if isinstance(reason, yaml.scanner.ScannerError) and \
reason.problem == YAML_TAB_PROBLEM:
# Special-case error message for tab indentation in YAML markup.
- message += ': found tab character at line {0}, column {1}'.format(
+ message += u': found tab character at line {0}, column {1}'.format(
reason.problem_mark.line + 1,
reason.problem_mark.column + 1,
)
elif reason:
# Generic error message uses exception's message.
- message += ': {0}'.format(reason)
+ message += u': {0}'.format(reason)
super(ConfigReadError, self).__init__(message)
@@ -125,7 +124,7 @@ class ConfigSource(dict):
def __init__(self, value, filename=None, default=False):
super(ConfigSource, self).__init__(value)
if filename is not None and not isinstance(filename, BASESTRING):
- raise TypeError('filename must be a string or None')
+ raise TypeError(u'filename must be a string or None')
self.filename = filename
self.default = default
@@ -147,7 +146,7 @@ class ConfigSource(dict):
elif isinstance(value, dict):
return ConfigSource(value)
else:
- raise TypeError('source value must be a dict')
+ raise TypeError(u'source value must be a dict')
class ConfigView(object):
@@ -182,7 +181,7 @@ class ConfigView(object):
try:
return iter_first(pairs)
except ValueError:
- raise NotFoundError("{0} not found".format(self.name))
+ raise NotFoundError(u"{0} not found".format(self.name))
def exists(self):
"""Determine whether the view has a setting in any source.
@@ -213,7 +212,7 @@ class ConfigView(object):
raise NotImplementedError
def __repr__(self):
- return '<{}: {}>'.format(self.__class__.__name__, self.name)
+ return u'<{}: {}>'.format(self.__class__.__name__, self.name)
def __iter__(self):
"""Iterate over the keys of a dictionary view or the *subviews*
@@ -230,7 +229,7 @@ class ConfigView(object):
collection = self.get()
if not isinstance(collection, (list, tuple)):
raise ConfigTypeError(
- '{0} must be a dictionary or a list, not {1}'.format(
+ u'{0} must be a dictionary or a list, not {1}'.format(
self.name, type(collection).__name__
)
)
@@ -308,7 +307,7 @@ class ConfigView(object):
cur_keys = dic.keys()
except AttributeError:
raise ConfigTypeError(
- '{0} must be a dict, not {1}'.format(
+ u'{0} must be a dict, not {1}'.format(
self.name, type(dic).__name__
)
)
@@ -349,7 +348,7 @@ class ConfigView(object):
it = iter(collection)
except TypeError:
raise ConfigTypeError(
- '{0} must be an iterable, not {1}'.format(
+ u'{0} must be an iterable, not {1}'.format(
self.name, type(collection).__name__
)
)
@@ -489,7 +488,7 @@ class Subview(ConfigView):
if not isinstance(self.key, int):
self.name += '.'
if isinstance(self.key, int):
- self.name += '#{0}'.format(self.key)
+ self.name += u'#{0}'.format(self.key)
elif isinstance(self.key, BASESTRING):
if isinstance(self.key, bytes):
self.name += self.key.decode('utf8')
@@ -511,7 +510,7 @@ class Subview(ConfigView):
except TypeError:
# Not subscriptable.
raise ConfigTypeError(
- "{0} must be a collection, not {1}".format(
+ u"{0} must be a collection, not {1}".format(
self.parent.name, type(collection).__name__
)
)
@@ -621,7 +620,7 @@ class Loader(yaml.SafeLoader):
else:
raise yaml.constructor.ConstructorError(
None, None,
- 'expected a mapping node, but found %s' % node.id,
+ u'expected a mapping node, but found %s' % node.id,
node.start_mark
)
@@ -632,7 +631,7 @@ class Loader(yaml.SafeLoader):
hash(key)
except TypeError as exc:
raise yaml.constructor.ConstructorError(
- 'while constructing a mapping',
+ u'while constructing a mapping',
node.start_mark, 'found unacceptable key (%s)' % exc,
key_node.start_mark
)
@@ -710,9 +709,9 @@ class Dumper(yaml.SafeDumper):
"""Represent bool as 'yes' or 'no' instead of 'true' or 'false'.
"""
if data:
- value = 'yes'
+ value = u'yes'
else:
- value = 'no'
+ value = u'no'
return self.represent_scalar('tag:yaml.org,2002:bool', value)
def represent_none(self, data):
@@ -837,7 +836,7 @@ class Configuration(RootView):
appdir = os.environ[self._env_var]
appdir = os.path.abspath(os.path.expanduser(appdir))
if os.path.isfile(appdir):
- raise ConfigError('{0} must be a directory'.format(
+ raise ConfigError(u'{0} must be a directory'.format(
self._env_var
))
@@ -990,7 +989,7 @@ class Template(object):
return self.convert(value, view)
elif self.default is REQUIRED:
# Missing required value. This is an error.
- raise NotFoundError("{0} not found".format(view.name))
+ raise NotFoundError(u"{0} not found".format(view.name))
else:
# Missing value, but not required.
return self.default
@@ -1015,11 +1014,11 @@ class Template(object):
"""
exc_class = ConfigTypeError if type_error else ConfigValueError
raise exc_class(
- '{0}: {1}'.format(view.name, message)
+ u'{0}: {1}'.format(view.name, message)
)
def __repr__(self):
- return '{0}({1})'.format(
+ return u'{0}({1})'.format(
type(self).__name__,
'' if self.default is REQUIRED else repr(self.default),
)
@@ -1036,7 +1035,7 @@ class Integer(Template):
elif isinstance(value, float):
return int(value)
else:
- self.fail('must be a number', view, True)
+ self.fail(u'must be a number', view, True)
class Number(Template):
@@ -1049,7 +1048,7 @@ class Number(Template):
return value
else:
self.fail(
- 'must be numeric, not {0}'.format(type(value).__name__),
+ u'must be numeric, not {0}'.format(type(value).__name__),
view,
True
)
@@ -1111,12 +1110,12 @@ class String(Template):
if isinstance(value, BASESTRING):
if self.pattern and not self.regex.match(value):
self.fail(
- "must match the pattern {0}".format(self.pattern),
+ u"must match the pattern {0}".format(self.pattern),
view
)
return value
else:
- self.fail('must be a string', view, True)
+ self.fail(u'must be a string', view, True)
class Choice(Template):
@@ -1137,7 +1136,7 @@ class Choice(Template):
"""
if value not in self.choices:
self.fail(
- 'must be one of {0}, not {1}'.format(
+ u'must be one of {0}, not {1}'.format(
repr(list(self.choices)), repr(value)
),
view
@@ -1206,7 +1205,7 @@ class OneOf(Template):
raise ConfigTemplateError(exc)
self.fail(
- 'must be one of {0}, not {1}'.format(
+ u'must be one of {0}, not {1}'.format(
repr(self.allowed), repr(value)
),
view
@@ -1242,7 +1241,7 @@ class StrSeq(Template):
try:
value = list(value)
except TypeError:
- self.fail('must be a whitespace-separated string or a list',
+ self.fail(u'must be a whitespace-separated string or a list',
view, True)
def convert(x):
@@ -1251,7 +1250,7 @@ class StrSeq(Template):
elif isinstance(x, bytes):
return x.decode('utf8', 'ignore')
else:
- self.fail('must be a list of strings', view, True)
+ self.fail(u'must be a list of strings', view, True)
return list(map(convert, value))
@@ -1301,19 +1300,19 @@ class Filename(Template):
if not isinstance(template, (collections.Mapping, MappingTemplate)):
# disallow config.get(Filename(relative_to='foo'))
raise ConfigTemplateError(
- 'relative_to may only be used when getting multiple values.'
+ u'relative_to may only be used when getting multiple values.'
)
elif self.relative_to == view.key:
raise ConfigTemplateError(
- '{0} is relative to itself'.format(view.name)
+ u'{0} is relative to itself'.format(view.name)
)
elif self.relative_to not in view.parent.keys():
# self.relative_to is not in the config
self.fail(
(
- 'needs sibling value "{0}" to expand relative path'
+ u'needs sibling value "{0}" to expand relative path'
).format(self.relative_to),
view
)
@@ -1335,12 +1334,12 @@ class Filename(Template):
if next_relative in template.subtemplates:
# we encountered this config key previously
raise ConfigTemplateError((
- '{0} and {1} are recursively relative'
+ u'{0} and {1} are recursively relative'
).format(view.name, self.relative_to))
else:
raise ConfigTemplateError((
- 'missing template for {0}, needed to expand {1}\'s' +
- 'relative path'
+ u'missing template for {0}, needed to expand {1}\'s' +
+ u'relative path'
).format(self.relative_to, view.name))
next_template.subtemplates[next_relative] = rel_to_template
@@ -1352,7 +1351,7 @@ class Filename(Template):
path, source = view.first()
if not isinstance(path, BASESTRING):
self.fail(
- 'must be a filename, not {0}'.format(type(path).__name__),
+ u'must be a filename, not {0}'.format(type(path).__name__),
view,
True
)
@@ -1390,7 +1389,7 @@ class TypeTemplate(Template):
def convert(self, value, view):
if not isinstance(value, self.typ):
self.fail(
- 'must be a {0}, not {1}'.format(
+ u'must be a {0}, not {1}'.format(
self.typ.__name__,
type(value).__name__,
),
@@ -1444,4 +1443,4 @@ def as_template(value):
elif isinstance(value, type):
return TypeTemplate(value)
else:
- raise ValueError('cannot convert to template: {0!r}'.format(value))
+ raise ValueError(u'cannot convert to template: {0!r}'.format(value))
diff --git a/beets/util/enumeration.py b/beets/util/enumeration.py
index 9dddf7f64..eb202b6d4 100644
--- a/beets/util/enumeration.py
+++ b/beets/util/enumeration.py
@@ -13,8 +13,7 @@
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
-from __future__ import (division, absolute_import, print_function,
- unicode_literals)
+from __future__ import (division, absolute_import, print_function)
from enum import Enum
diff --git a/beets/util/functemplate.py b/beets/util/functemplate.py
index 68cb4cd76..303338b4c 100644
--- a/beets/util/functemplate.py
+++ b/beets/util/functemplate.py
@@ -27,8 +27,7 @@ This is sort of like a tiny, horrible degeneration of a real templating
engine like Jinja2 or Mustache.
"""
-from __future__ import (division, absolute_import, print_function,
- unicode_literals)
+from __future__ import (division, absolute_import, print_function)
import re
import ast
@@ -79,7 +78,7 @@ def ex_literal(val):
return ast.Name(bytes(val), ast.Load())
elif isinstance(val, basestring):
return ast.Str(val)
- raise TypeError('no literal for {0}'.format(type(val)))
+ raise TypeError(u'no literal for {0}'.format(type(val)))
def ex_varassign(name, expr):
@@ -571,4 +570,4 @@ if __name__ == b'__main__':
'from __main__ import _tmpl, _vars, _funcs',
number=10000)
print(comp_time)
- print('Speedup:', interp_time / comp_time)
+ print(u'Speedup:', interp_time / comp_time)
diff --git a/beets/util/pipeline.py b/beets/util/pipeline.py
index deb431fa1..666909af2 100644
--- a/beets/util/pipeline.py
+++ b/beets/util/pipeline.py
@@ -32,8 +32,7 @@ To do so, pass an iterable of coroutines to the Pipeline constructor
in place of any single coroutine.
"""
-from __future__ import (division, absolute_import, print_function,
- unicode_literals)
+from __future__ import (division, absolute_import, print_function)
import Queue
from threading import Thread, Lock
@@ -362,7 +361,7 @@ class Pipeline(object):
be at least two stages.
"""
if len(stages) < 2:
- raise ValueError('pipeline must have at least two stages')
+ raise ValueError(u'pipeline must have at least two stages')
self.stages = []
for stage in stages:
if isinstance(stage, (list, tuple)):
@@ -467,14 +466,14 @@ if __name__ == b'__main__':
# in parallel.
def produce():
for i in range(5):
- print('generating %i' % i)
+ print(u'generating %i' % i)
time.sleep(1)
yield i
def work():
num = yield
while True:
- print('processing %i' % num)
+ print(u'processing %i' % num)
time.sleep(2)
num = yield num * 2
@@ -482,7 +481,7 @@ if __name__ == b'__main__':
while True:
num = yield
time.sleep(1)
- print('received %i' % num)
+ print(u'received %i' % num)
ts_start = time.time()
Pipeline([produce(), work(), consume()]).run_sequential()
@@ -491,22 +490,22 @@ if __name__ == b'__main__':
ts_par = time.time()
Pipeline([produce(), (work(), work()), consume()]).run_parallel()
ts_end = time.time()
- print('Sequential time:', ts_seq - ts_start)
- print('Parallel time:', ts_par - ts_seq)
- print('Multiply-parallel time:', ts_end - ts_par)
+ print(u'Sequential time:', ts_seq - ts_start)
+ print(u'Parallel time:', ts_par - ts_seq)
+ print(u'Multiply-parallel time:', ts_end - ts_par)
print()
# Test a pipeline that raises an exception.
def exc_produce():
for i in range(10):
- print('generating %i' % i)
+ print(u'generating %i' % i)
time.sleep(1)
yield i
def exc_work():
num = yield
while True:
- print('processing %i' % num)
+ print(u'processing %i' % num)
time.sleep(3)
if num == 3:
raise Exception()
@@ -515,6 +514,6 @@ if __name__ == b'__main__':
def exc_consume():
while True:
num = yield
- print('received %i' % num)
+ print(u'received %i' % num)
Pipeline([exc_produce(), exc_work(), exc_consume()]).run_parallel(1)