From 8817972b36145f5531f25bb1da40b9cd064ecbc4 Mon Sep 17 00:00:00 2001 From: CounterPillow Date: Tue, 6 May 2014 20:10:42 +0200 Subject: [PATCH] Move the check for program availability into class We also actually execute it now. Go us! --- overviewer_core/optimizeimages.py | 23 ++++++++++++----------- overviewer_core/settingsValidators.py | 5 ++++- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/overviewer_core/optimizeimages.py b/overviewer_core/optimizeimages.py index f31b6a1..c877e75 100644 --- a/overviewer_core/optimizeimages.py +++ b/overviewer_core/optimizeimages.py @@ -16,6 +16,7 @@ import os import subprocess import shlex +import logging class Optimizer: binaryname = "" @@ -29,6 +30,17 @@ class Optimizer: def fire_and_forget(self, args): subprocess.Popen(args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0] + def check_availability(self): + path = os.environ.get("PATH").split(os.pathsep) + + def exists_in_path(prog): + result = filter(lambda x: os.path.exists(os.path.join(x, prog)), path) + return len(result) != 0 + + if (not exists_in_path(self.binaryname)) and (not exists_in_path(self.binaryname + ".exe")): + raise Exception("Optimization program '%s' was not found!" % self.binaryname) + + class NonAtomicOptimizer(Optimizer): def cleanup(self, img): os.rename(img + ".tmp", img) @@ -91,17 +103,6 @@ class optipng(Optimizer, PNGOptimizer): Optimizer.fire_and_forget(self, [self.binaryname, "-o" + str(self.olevel), "-quiet", img]) -def check_programs(optimizers): - path = os.environ.get("PATH").split(os.pathsep) - - def exists_in_path(prog): - result = filter(lambda x: os.path.exists(os.path.join(x, prog)), path) - return len(result) != 0 - - for opt in optimizers: - if (not exists_in_path(opt.binaryname)) and (not exists_in_path(opt.binaryname + ".exe")): - raise Exception("Optimization program '%s' was not found!" % opt.binaryname) - def optimize_image(imgpath, imgformat, optimizers): for opt in optimizers: if imgformat == 'png': diff --git a/overviewer_core/settingsValidators.py b/overviewer_core/settingsValidators.py index 6b53bee..e61a1ab 100644 --- a/overviewer_core/settingsValidators.py +++ b/overviewer_core/settingsValidators.py @@ -7,6 +7,7 @@ import rendermodes import util from optimizeimages import Optimizer from world import UPPER_LEFT, UPPER_RIGHT, LOWER_LEFT, LOWER_RIGHT +import logging class ValidationException(Exception): pass @@ -159,7 +160,6 @@ def validateBGColor(color): def validateOptImg(optimizers): if isinstance(optimizers, (int, long)): from optimizeimages import pngcrush - import logging logging.warning("You're using a deprecated definition of optimizeimg. We'll do what you say for now, but please fix this as soon as possible.") optimizers = [pngcrush()] if not isinstance(optimizers, list): @@ -167,6 +167,9 @@ def validateOptImg(optimizers): for opt in optimizers: if not isinstance(opt, Optimizer): raise ValidationException("Invalid Optimizer!") + + opt.check_availability() + return optimizers def validateTexturePath(path):