mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 08:39:17 +01:00
remove old Python: remove util.text_string
This was a helper for situations when Python 2 and 3 APIs returned bytes and unicode, respectively. In these situation, we should nowadays know which of the two we receive, so there's no need to wrap & hide the `bytes.decode()` anymore (when it is still required). Detailed justification: beets/ui/__init__.py: - command line options are always parsed to str beets/ui/commands.py: - confuse's config.dump always returns str - open(...) defaults to text mode, read()ing str beetsplug/keyfinder.py: - ... beetsplug/web/__init__.py: - internally, paths are always bytestrings - additionally, I took the liberty to slighlty re-arrange the code: it makes sense to split off the basename first, since we're only interested in the unicode conversion of that part. test/helper.py: - capture_stdout() gives a StringIO, which yields str test/test_ui.py: - self.io, from _common.TestCase, ultimately contains a _common.DummyOut, which appears to be dealing with str (cf. DummyOut.get)
This commit is contained in:
parent
3510e6311d
commit
d24cf69269
7 changed files with 7 additions and 24 deletions
|
|
@ -790,9 +790,6 @@ def _store_dict(option, opt_str, value, parser):
|
|||
setattr(parser.values, dest, {})
|
||||
option_values = getattr(parser.values, dest)
|
||||
|
||||
# Decode the argument using the platform's argument encoding.
|
||||
value = util.text_string(value, util.arg_encoding())
|
||||
|
||||
try:
|
||||
key, value = value.split('=', 1)
|
||||
if not (key and value):
|
||||
|
|
|
|||
|
|
@ -1778,7 +1778,7 @@ def config_func(lib, opts, args):
|
|||
else:
|
||||
config_out = config.dump(full=opts.defaults, redact=opts.redact)
|
||||
if config_out.strip() != '{}':
|
||||
print_(util.text_string(config_out))
|
||||
print_(config_out)
|
||||
else:
|
||||
print("Empty configuration")
|
||||
|
||||
|
|
@ -1852,7 +1852,7 @@ def completion_script(commands):
|
|||
"""
|
||||
base_script = os.path.join(os.path.dirname(__file__), 'completion_base.sh')
|
||||
with open(base_script) as base_script:
|
||||
yield util.text_string(base_script.read())
|
||||
yield base_script.read()
|
||||
|
||||
options = {}
|
||||
aliases = {}
|
||||
|
|
|
|||
|
|
@ -770,19 +770,6 @@ def as_string(value):
|
|||
return str(value)
|
||||
|
||||
|
||||
def text_string(value, encoding='utf-8'):
|
||||
"""Convert a string, which can either be bytes or unicode, to
|
||||
unicode.
|
||||
|
||||
Text (unicode) is left untouched; bytes are decoded. This is useful
|
||||
to convert from a "native string" (bytes on Python 2, str on Python
|
||||
3) to a consistently unicode value.
|
||||
"""
|
||||
if isinstance(value, bytes):
|
||||
return value.decode(encoding)
|
||||
return value
|
||||
|
||||
|
||||
def plurality(objs):
|
||||
"""Given a sequence of hashble objects, returns the object that
|
||||
is most common in the set and the its number of appearance. The
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ class KeyFinderPlugin(BeetsPlugin):
|
|||
continue
|
||||
|
||||
try:
|
||||
key = util.text_string(key_raw)
|
||||
key = key_raw.decode("utf-8")
|
||||
except UnicodeDecodeError:
|
||||
self._log.error('output is invalid UTF-8')
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -320,9 +320,9 @@ def item_file(item_id):
|
|||
|
||||
try:
|
||||
# Imitate http.server behaviour
|
||||
unicode_base_filename.encode("latin-1", "strict")
|
||||
base_filename.encode("latin-1", "strict")
|
||||
except UnicodeError:
|
||||
safe_filename = unidecode(unicode_base_filename)
|
||||
safe_filename = unidecode(base_filename)
|
||||
else:
|
||||
safe_filename = unicode_base_filename
|
||||
|
||||
|
|
|
|||
|
|
@ -453,7 +453,7 @@ class TestHelper:
|
|||
def run_with_output(self, *args):
|
||||
with capture_stdout() as out:
|
||||
self.run_command(*args)
|
||||
return util.text_string(out.getvalue())
|
||||
return out.getvalue()
|
||||
|
||||
# Safe file operations
|
||||
|
||||
|
|
|
|||
|
|
@ -1163,8 +1163,7 @@ class ShowChangeTest(_common.TestCase):
|
|||
cur_album,
|
||||
autotag.AlbumMatch(album_dist, info, mapping, set(), set()),
|
||||
)
|
||||
# FIXME decoding shouldn't be done here
|
||||
return util.text_string(self.io.getoutput().lower())
|
||||
return self.io.getoutput().lower()
|
||||
|
||||
def test_null_change(self):
|
||||
msg = self._show_change()
|
||||
|
|
|
|||
Loading…
Reference in a new issue