beets
beets copied to clipboard
Fix `_legalize_path` types
Description
Part 2 of the work fixing types in beets.util.__init__
#5215.
Mypy was not happy here because _legalize_stage
function implementation concatenates path
and extension
parameters, implying that their types need to match.
You can see that initially path
parameter was defined as a str
while extension
was bytes
.
In reality, depending on the fragment
parameter value, extension
was sometimes provided as a str
and sometimes as bytes
. The same parameter decided whether path
gets converted into bytes
within _legalize_stage
implementation. No surprise that mypy was confused here.
_legalize_stage
is only used within Item.destination
method implementation which is where fragment
is defined. I determined that the fragment
parameter controls the form of the output path:
-
fragment=False
returned absolute path as bytes (default) -
fragment=True
returned path relative to the library directory as str.
Given the above, the change
-
Renames
fragment
parameter torelative_to_libdir
for clarity -
Makes
Item.destination
to return the same type in both cases. I pickedbytes
since that's the type that majority of the code using this method expects.I converted the output path to
str
for the code that has been expecting a string there. -
Decouples
_legalize_stage
and_legalize_path
implementations from therelative_to_libdir
. The logic now usesstr
type only.