From 7d633d97c2cd2e83563ace6c5250499bd6b0cdde Mon Sep 17 00:00:00 2001 From: Brett Williams Date: Sat, 3 Aug 2024 20:00:36 -0500 Subject: [PATCH] Fix getting path to After Effects --- src/engines/aerender/aerender_engine.py | 22 +++++++++++++++++++--- src/engines/core/base_engine.py | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/engines/aerender/aerender_engine.py b/src/engines/aerender/aerender_engine.py index 7e55664..64eb8de 100644 --- a/src/engines/aerender/aerender_engine.py +++ b/src/engines/aerender/aerender_engine.py @@ -1,4 +1,10 @@ -from src.engines.core.base_engine import BaseRenderEngine +import glob +import logging +import subprocess + +from src.engines.core.base_engine import BaseRenderEngine, SUBPROCESS_TIMEOUT + +logger = logging.getLogger() class AERender(BaseRenderEngine): @@ -10,12 +16,22 @@ class AERender(BaseRenderEngine): try: render_path = self.renderer_path() if render_path: - ver_out = subprocess.check_output([render_path, '-version'], timeout=SUBPROCESS_TIMEOUT) - version = ver_out.decode('utf-8').split(" ")[-1].strip() + ver_out = subprocess.run([render_path, '-version'], capture_output=True, text=True) + version = ver_out.stdout.split(" ")[-1].strip() except Exception as e: logger.error(f'Failed to get {self.name()} version: {e}') return version + @classmethod + def default_renderer_path(cls): + paths = glob.glob('/Applications/*After Effects*/aerender') + if len(paths) > 1: + logger.warning('Multiple After Effects installations detected') + elif not paths: + logger.error('After Effects installation not found') + else: + return paths[0] + @classmethod def get_output_formats(cls): # todo: create implementation diff --git a/src/engines/core/base_engine.py b/src/engines/core/base_engine.py index 469e87f..26371e2 100644 --- a/src/engines/core/base_engine.py +++ b/src/engines/core/base_engine.py @@ -14,7 +14,7 @@ class BaseRenderEngine(object): def __init__(self, custom_path=None): self.custom_renderer_path = custom_path if not self.renderer_path() or not os.path.exists(self.renderer_path()): - raise FileNotFoundError(f"Cannot find path to renderer for {self.name()} instance") + raise FileNotFoundError(f"Cannot find path ({self.renderer_path()}) for renderer '{self.name()}'") if not os.access(self.renderer_path(), os.X_OK): logger.warning(f"Path is not executable. Setting permissions to 755 for {self.renderer_path()}")