mirror of
https://github.com/beetbox/beets.git
synced 2026-01-03 14:32:55 +01:00
Refactor to eliminate use of global variable
`get_im_version` now returns an additional bool `isLegacy`, which indicates whether the the `magick` binary is accessible. It is stored in `self.im_legacy` on initialization of an `ArtResizer` object, and can be accessed via `ArtResizer.shared.im_legacy`
This commit is contained in:
parent
1a6e0a7a29
commit
666790bd83
1 changed files with 14 additions and 11 deletions
|
|
@ -94,7 +94,7 @@ def im_resize(maxwidth, path_in, path_out=None):
|
|||
# with regards to the height.
|
||||
try:
|
||||
cmds = (['magick'], ['convert'])
|
||||
cmd = cmds[0] if not im_legacy else cmds[1]
|
||||
cmd = cmds[0] if not ArtResizer.shared.im_legacy else cmds[1]
|
||||
args = [util.syspath(path_in, prefix=False),
|
||||
'-resize', '{0}x>'.format(maxwidth),
|
||||
util.syspath(path_out, prefix=False)]
|
||||
|
|
@ -125,7 +125,7 @@ def pil_getsize(path_in):
|
|||
|
||||
def im_getsize(path_in):
|
||||
cmds = (['magick', 'identify'], ['identify'])
|
||||
cmd = cmds[0] if not im_legacy else cmds[1]
|
||||
cmd = cmds[0] if not ArtResizer.shared.im_legacy else cmds[1]
|
||||
args = ['-format', '%w %h', util.syspath(path_in, prefix=False)]
|
||||
|
||||
try:
|
||||
|
|
@ -178,6 +178,9 @@ class ArtResizer(six.with_metaclass(Shareable, object)):
|
|||
log.debug(u"artresizer: method is {0}", self.method)
|
||||
self.can_compare = self._can_compare()
|
||||
|
||||
if self.method[0] == IMAGEMAGICK:
|
||||
self.im_legacy = self.method[2]
|
||||
|
||||
def resize(self, maxwidth, path_in, path_out=None):
|
||||
"""Manipulate an image file according to the method, returning a
|
||||
new path. For PIL or IMAGEMAGIC methods, resizes the image to a
|
||||
|
|
@ -224,9 +227,9 @@ class ArtResizer(six.with_metaclass(Shareable, object)):
|
|||
@staticmethod
|
||||
def _check_method():
|
||||
"""Return a tuple indicating an available method and its version."""
|
||||
version = get_im_version()
|
||||
version, isLegacy = get_im_version()
|
||||
if version:
|
||||
return IMAGEMAGICK, version
|
||||
return IMAGEMAGICK, version, isLegacy
|
||||
|
||||
version = get_pil_version()
|
||||
if version:
|
||||
|
|
@ -235,13 +238,13 @@ class ArtResizer(six.with_metaclass(Shareable, object)):
|
|||
return WEBPROXY, (0)
|
||||
|
||||
|
||||
im_legacy = None
|
||||
|
||||
|
||||
def get_im_version():
|
||||
"""Return Image Magick version or None if it is unavailable
|
||||
Try invoking ImageMagick's "magick". If "magick" is unavailable,
|
||||
as with older versions, fall back to "convert"
|
||||
|
||||
Our iterator `isLegacy` will be non-zero when the first command
|
||||
fails, and will be returned in a tuple along with the version
|
||||
"""
|
||||
cmds = ('magick', 'convert')
|
||||
for isLegacy, cmd in enumerate(cmds):
|
||||
|
|
@ -253,11 +256,11 @@ def get_im_version():
|
|||
pattern = br".+ (\d+)\.(\d+)\.(\d+).*"
|
||||
match = re.search(pattern, out)
|
||||
if match:
|
||||
global im_legacy
|
||||
im_legacy = bool(isLegacy)
|
||||
return (int(match.group(1)),
|
||||
return ((int(match.group(1)),
|
||||
int(match.group(2)),
|
||||
int(match.group(3)))
|
||||
int(match.group(3))),
|
||||
bool(isLegacy)
|
||||
)
|
||||
|
||||
except (subprocess.CalledProcessError, OSError) as exc:
|
||||
log.debug(u'ImageMagick version check failed: {}', exc)
|
||||
|
|
|
|||
Loading…
Reference in a new issue