mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #2054 from pypeclub/PYPE-1316_Validation-on-OpenPype-start
General: Startup validations
This commit is contained in:
commit
d0a283227b
2 changed files with 80 additions and 34 deletions
|
|
@ -1,34 +0,0 @@
|
|||
import pyblish.api
|
||||
import os
|
||||
import subprocess
|
||||
import openpype.lib
|
||||
try:
|
||||
import os.errno as errno
|
||||
except ImportError:
|
||||
import errno
|
||||
|
||||
|
||||
class ValidateFFmpegInstalled(pyblish.api.ContextPlugin):
|
||||
"""Validate availability of ffmpeg tool in PATH"""
|
||||
|
||||
order = pyblish.api.ValidatorOrder
|
||||
label = 'Validate ffmpeg installation'
|
||||
optional = True
|
||||
|
||||
def is_tool(self, name):
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
subprocess.Popen(
|
||||
[name], stdout=devnull, stderr=devnull
|
||||
).communicate()
|
||||
except OSError as e:
|
||||
if e.errno == errno.ENOENT:
|
||||
return False
|
||||
return True
|
||||
|
||||
def process(self, context):
|
||||
ffmpeg_path = openpype.lib.get_ffmpeg_tool_path("ffmpeg")
|
||||
self.log.info("ffmpeg path: `{}`".format(ffmpeg_path))
|
||||
if self.is_tool("{}".format(ffmpeg_path)) is False:
|
||||
self.log.error("ffmpeg not found in PATH")
|
||||
raise RuntimeError('ffmpeg not installed.')
|
||||
80
start.py
80
start.py
|
|
@ -96,6 +96,7 @@ Attributes:
|
|||
import os
|
||||
import re
|
||||
import sys
|
||||
import platform
|
||||
import traceback
|
||||
import subprocess
|
||||
import site
|
||||
|
|
@ -339,6 +340,80 @@ def set_modules_environments():
|
|||
os.environ.update(env)
|
||||
|
||||
|
||||
def is_tool(name):
|
||||
try:
|
||||
import os.errno as errno
|
||||
except ImportError:
|
||||
import errno
|
||||
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
subprocess.Popen(
|
||||
[name], stdout=devnull, stderr=devnull
|
||||
).communicate()
|
||||
except OSError as exc:
|
||||
if exc.errno == errno.ENOENT:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def _startup_validations():
|
||||
"""Validations before OpenPype starts."""
|
||||
try:
|
||||
_validate_thirdparty_binaries()
|
||||
except Exception as exc:
|
||||
if os.environ.get("OPENPYPE_HEADLESS_MODE"):
|
||||
raise
|
||||
|
||||
import tkinter
|
||||
from tkinter.messagebox import showerror
|
||||
|
||||
root = tkinter.Tk()
|
||||
root.attributes("-alpha", 0.0)
|
||||
root.wm_state("iconic")
|
||||
if platform.system().lower() != "windows":
|
||||
root.withdraw()
|
||||
|
||||
showerror(
|
||||
"Startup validations didn't pass",
|
||||
str(exc)
|
||||
)
|
||||
root.withdraw()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def _validate_thirdparty_binaries():
|
||||
"""Check existence of thirdpart executables."""
|
||||
low_platform = platform.system().lower()
|
||||
binary_vendors_dir = os.path.join(
|
||||
os.environ["OPENPYPE_ROOT"],
|
||||
"vendor",
|
||||
"bin"
|
||||
)
|
||||
|
||||
error_msg = (
|
||||
"Missing binary dependency {}. Please fetch thirdparty dependencies."
|
||||
)
|
||||
# Validate existence of FFmpeg
|
||||
ffmpeg_dir = os.path.join(binary_vendors_dir, "ffmpeg", low_platform)
|
||||
if low_platform == "windows":
|
||||
ffmpeg_dir = os.path.join(ffmpeg_dir, "bin")
|
||||
ffmpeg_executable = os.path.join(ffmpeg_dir, "ffmpeg")
|
||||
if not is_tool(ffmpeg_executable):
|
||||
raise RuntimeError(error_msg.format("FFmpeg"))
|
||||
|
||||
# Validate existence of OpenImageIO (not on MacOs)
|
||||
if low_platform != "darwin":
|
||||
oiio_tool_path = os.path.join(
|
||||
binary_vendors_dir,
|
||||
"oiio",
|
||||
low_platform,
|
||||
"oiiotool"
|
||||
)
|
||||
if not is_tool(oiio_tool_path):
|
||||
raise RuntimeError(error_msg.format("OpenImageIO"))
|
||||
|
||||
|
||||
def _process_arguments() -> tuple:
|
||||
"""Process command line arguments.
|
||||
|
||||
|
|
@ -767,6 +842,11 @@ def boot():
|
|||
# ------------------------------------------------------------------------
|
||||
os.environ["OPENPYPE_ROOT"] = OPENPYPE_ROOT
|
||||
|
||||
# ------------------------------------------------------------------------
|
||||
# Do necessary startup validations
|
||||
# ------------------------------------------------------------------------
|
||||
_startup_validations()
|
||||
|
||||
# ------------------------------------------------------------------------
|
||||
# Play animation
|
||||
# ------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue