Split add job helper (#45)

* Fix issue with engine not being available to download

* Add version caches to ffmpeg downloader

* Remove some test parameters

* "releases" should be "release" in linux ffmpeg url

* CPU was incorrectly reported as OS

* Fix naming structure for FFMPEG downloads for linux

* More linux ffmpeg work

* Improved error handling

* WIP

* Consolidate platform reporting to not use platform directly

* Fix missing folder name

* Fix project output naming

* Undo config.yaml commit

* Add is_engine_available API call

* Fix issue where subjobs would not find servers
This commit is contained in:
2023-10-25 02:49:07 -05:00
committed by GitHub
parent 03e7b95e1b
commit f01192909d
9 changed files with 130 additions and 76 deletions

View File

@@ -1,13 +1,12 @@
import logging
import os
import platform
import shutil
from src.engines.blender.blender_downloader import BlenderDownloader
from src.engines.blender.blender_engine import Blender
from src.engines.ffmpeg.ffmpeg_downloader import FFMPEGDownloader
from src.engines.ffmpeg.ffmpeg_engine import FFMPEG
from src.utilities.misc_helper import system_safe_path
from src.utilities.misc_helper import system_safe_path, current_system_os, current_system_cpu
logger = logging.getLogger()
@@ -64,8 +63,8 @@ class EngineManager:
for eng in cls.supported_engines():
if eng.default_renderer_path():
results.append({'engine': eng.name(), 'version': eng().version(),
'system_os': cls.system_os(),
'cpu': cls.system_cpu(),
'system_os': current_system_os(),
'cpu': current_system_cpu(),
'path': eng.default_renderer_path(), 'type': 'system'})
return results
@@ -76,8 +75,8 @@ class EngineManager:
@classmethod
def newest_engine_version(cls, engine, system_os=None, cpu=None):
system_os = system_os or cls.system_os()
cpu = cpu or cls.system_cpu()
system_os = system_os or current_system_os()
cpu = cpu or current_system_cpu()
try:
filtered = [x for x in cls.all_engines() if x['engine'] == engine and x['system_os'] == system_os and x['cpu'] == cpu]
@@ -89,21 +88,13 @@ class EngineManager:
@classmethod
def is_version_downloaded(cls, engine, version, system_os=None, cpu=None):
system_os = system_os or cls.system_os()
cpu = cpu or cls.system_cpu()
system_os = system_os or current_system_os()
cpu = cpu or current_system_cpu()
filtered = [x for x in cls.all_engines() if
x['engine'] == engine and x['system_os'] == system_os and x['cpu'] == cpu and x['version'] == version]
return filtered[0] if filtered else False
@staticmethod
def system_os():
return platform.system().lower().replace('darwin', 'macos')
@staticmethod
def system_cpu():
return platform.machine().lower().replace('amd64', 'x64')
@classmethod
def version_is_available_to_download(cls, engine, version, system_os=None, cpu=None):
try:
@@ -158,10 +149,15 @@ class EngineManager:
def update_all_engines(cls):
logger.info(f"Checking for updates for render engines...")
for engine, engine_downloader in cls.downloader_classes.items():
latest_version = engine_downloader.find_most_recent_version().get('version')
if latest_version and not cls.is_version_downloaded(engine, latest_version):
logger.info(f"Downloading newest version of {engine} ({latest_version})")
cls.download_engine(engine, latest_version)
logger.debug(f"Checking for updates to {engine}")
latest_version = engine_downloader.find_most_recent_version()
if latest_version:
logger.debug(f"Latest version of {engine} available: {latest_version.get('version')}")
if not cls.is_version_downloaded(engine, latest_version.get('version')):
logger.info(f"Downloading {engine} ({latest_version['version']})")
cls.download_engine(engine=engine, version=latest_version['version'])
else:
logger.warning(f"Unable to get latest version for {engine}")
if __name__ == '__main__':
@@ -169,3 +165,4 @@ if __name__ == '__main__':
# print(EngineManager.newest_engine_version('blender', 'macos', 'arm64'))
EngineManager.delete_engine_download('blender', '3.2.1', 'macos', 'a')