mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
* OP-5660 - adding menu buttons to Set frame range in AE * OP-5660 - refactored location of scripts set_settings should be in lib as it is used elsewhere, but launch_logic and lib created circular dependency. Moved main to launch logic as it is actually handling launching. * OP-5660 - added set_settings to creator When instance gets created, set frame range and resolution from DB. * OP-5660 - minor fix * OP-5660 - updated extension zip * OP-5660 - updated documentation * OP-5660 - fixed missing exception * OP-5660 - fixed argument * OP-5560 - fix imports * OP-5660 - updated extension * OP-5660 - add js alert message for buttons * OP-5660 - repacked extension Without Anastasyi showed success, but extension wasn't loaded. * OP-5660 - make log message nicer * OP-5660 - added log if workfile not saved * OP-5660 - provide defaults to limit None exception * OP-5660 - updated error message
108 lines
3.3 KiB
Python
108 lines
3.3 KiB
Python
"""Script wraps launch mechanism of non python host implementations.
|
|
|
|
Arguments passed to the script are passed to launch function in host
|
|
implementation. In all cases requires host app executable and may contain
|
|
workfile or others.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
# Get current file to locate start point of sys.argv
|
|
CURRENT_FILE = os.path.abspath(__file__)
|
|
|
|
|
|
def show_error_messagebox(title, message, detail_message=None):
|
|
"""Function will show message and process ends after closing it."""
|
|
from qtpy import QtWidgets, QtCore
|
|
from openpype import style
|
|
|
|
app = QtWidgets.QApplication([])
|
|
app.setStyleSheet(style.load_stylesheet())
|
|
|
|
msgbox = QtWidgets.QMessageBox()
|
|
msgbox.setWindowTitle(title)
|
|
msgbox.setText(message)
|
|
|
|
if detail_message:
|
|
msgbox.setDetailedText(detail_message)
|
|
|
|
msgbox.setWindowModality(QtCore.Qt.ApplicationModal)
|
|
msgbox.show()
|
|
|
|
sys.exit(app.exec_())
|
|
|
|
|
|
def on_invalid_args(script_not_found):
|
|
"""Show to user message box saying that something went wrong.
|
|
|
|
Tell user that arguments to launch implementation are invalid with
|
|
arguments details.
|
|
|
|
Args:
|
|
script_not_found (bool): Use different message based on this value.
|
|
"""
|
|
|
|
title = "Invalid arguments"
|
|
joined_args = ", ".join("\"{}\"".format(arg) for arg in sys.argv)
|
|
if script_not_found:
|
|
submsg = "Where couldn't find script path:\n\"{}\""
|
|
else:
|
|
submsg = "Expected Host executable after script path:\n\"{}\""
|
|
|
|
message = "BUG: Got invalid arguments so can't launch Host application."
|
|
detail_message = "Process was launched with arguments:\n{}\n\n{}".format(
|
|
joined_args,
|
|
submsg.format(CURRENT_FILE)
|
|
)
|
|
|
|
show_error_messagebox(title, message, detail_message)
|
|
|
|
|
|
def main(argv):
|
|
# Modify current file path to find match in sys.argv which may be different
|
|
# on windows (different letter cases and slashes).
|
|
modified_current_file = CURRENT_FILE.replace("\\", "/").lower()
|
|
|
|
# Create a copy of sys argv
|
|
sys_args = list(argv)
|
|
after_script_idx = None
|
|
# Find script path in sys.argv to know index of argv where host
|
|
# executable should be.
|
|
for idx, item in enumerate(sys_args):
|
|
if item.replace("\\", "/").lower() == modified_current_file:
|
|
after_script_idx = idx + 1
|
|
break
|
|
|
|
# Validate that there is at least one argument after script path
|
|
launch_args = None
|
|
if after_script_idx is not None:
|
|
launch_args = sys_args[after_script_idx:]
|
|
|
|
host_name = os.environ["AVALON_APP"].lower()
|
|
if host_name == "photoshop":
|
|
# TODO refactor launch logic according to AE
|
|
from openpype.hosts.photoshop.api.lib import main
|
|
elif host_name == "aftereffects":
|
|
from openpype.hosts.aftereffects.api.launch_logic import main
|
|
elif host_name == "harmony":
|
|
from openpype.hosts.harmony.api.lib import main
|
|
else:
|
|
title = "Unknown host name"
|
|
message = (
|
|
"BUG: Environment variable AVALON_APP contains unknown"
|
|
" host name \"{}\""
|
|
).format(host_name)
|
|
show_error_messagebox(title, message)
|
|
return
|
|
|
|
if launch_args:
|
|
# Launch host implementation
|
|
main(*launch_args)
|
|
else:
|
|
# Show message box
|
|
on_invalid_args(after_script_idx is None)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv)
|