mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Deadline in Pype 3 - Hound & Cleanup
Events and plugins should be in 'vendor' dir only for now
This commit is contained in:
parent
1dcddc9b4e
commit
598266bb6d
4 changed files with 21 additions and 273 deletions
|
|
@ -1,37 +0,0 @@
|
|||
[State]
|
||||
Type=Enum
|
||||
Items=Global Enabled;Opt-In;Disabled
|
||||
Category=Options
|
||||
CategoryOrder=0
|
||||
CategoryIndex=0
|
||||
Label=State
|
||||
Default=Disabled
|
||||
Description=How this event plug-in should respond to events. If Global, all jobs and slaves will trigger the events for this plugin. If Opt-In, jobs and slaves can choose to trigger the events for this plugin. If Disabled, no events are triggered for this plugin.
|
||||
|
||||
[PythonSearchPaths]
|
||||
Type=MultiLineMultiFolder
|
||||
Label=Additional Python Search Paths
|
||||
Category=Options
|
||||
CategoryOrder=0
|
||||
CategoryIndex=1
|
||||
Default=
|
||||
Description=The list of paths to append to the PYTHONPATH environment variable. This allows the Python job to find custom modules in non-standard locations.
|
||||
|
||||
[LoggingLevel]
|
||||
Type=Enum
|
||||
Label=Logging Level
|
||||
Category=Options
|
||||
CategoryOrder=0
|
||||
CategoryIndex=2
|
||||
Items=DEBUG;INFO;WARNING;ERROR
|
||||
Default=DEBUG
|
||||
Description=Logging level where printing will start.
|
||||
|
||||
[Pype Executable]
|
||||
Type=MultiLineMultiFolder
|
||||
Label=Path to Pype executable
|
||||
Category=Job Plugins
|
||||
CategoryOrder=1
|
||||
CategoryIndex=1
|
||||
Default=
|
||||
Description=
|
||||
|
|
@ -1,215 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import logging
|
||||
import json
|
||||
|
||||
import Deadline.Events
|
||||
import Deadline.Scripting
|
||||
|
||||
|
||||
def GetDeadlineEventListener():
|
||||
return PypeEventListener()
|
||||
|
||||
|
||||
def CleanupDeadlineEventListener(eventListener):
|
||||
eventListener.Cleanup()
|
||||
|
||||
|
||||
class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
||||
|
||||
def __init__(self):
|
||||
self.OnJobSubmittedCallback += self.OnJobSubmitted
|
||||
self.OnJobStartedCallback += self.OnJobStarted
|
||||
self.OnJobFinishedCallback += self.OnJobFinished
|
||||
self.OnJobRequeuedCallback += self.OnJobRequeued
|
||||
self.OnJobFailedCallback += self.OnJobFailed
|
||||
self.OnJobSuspendedCallback += self.OnJobSuspended
|
||||
self.OnJobResumedCallback += self.OnJobResumed
|
||||
self.OnJobPendedCallback += self.OnJobPended
|
||||
self.OnJobReleasedCallback += self.OnJobReleased
|
||||
self.OnJobDeletedCallback += self.OnJobDeleted
|
||||
self.OnJobErrorCallback += self.OnJobError
|
||||
self.OnJobPurgedCallback += self.OnJobPurged
|
||||
|
||||
self.OnHouseCleaningCallback += self.OnHouseCleaning
|
||||
self.OnRepositoryRepairCallback += self.OnRepositoryRepair
|
||||
|
||||
self.OnSlaveStartedCallback += self.OnSlaveStarted
|
||||
self.OnSlaveStoppedCallback += self.OnSlaveStopped
|
||||
self.OnSlaveIdleCallback += self.OnSlaveIdle
|
||||
self.OnSlaveRenderingCallback += self.OnSlaveRendering
|
||||
self.OnSlaveStartingJobCallback += self.OnSlaveStartingJob
|
||||
self.OnSlaveStalledCallback += self.OnSlaveStalled
|
||||
|
||||
self.OnIdleShutdownCallback += self.OnIdleShutdown
|
||||
self.OnMachineStartupCallback += self.OnMachineStartup
|
||||
self.OnThermalShutdownCallback += self.OnThermalShutdown
|
||||
self.OnMachineRestartCallback += self.OnMachineRestart
|
||||
|
||||
def Cleanup(self):
|
||||
del self.OnJobSubmittedCallback
|
||||
del self.OnJobStartedCallback
|
||||
del self.OnJobFinishedCallback
|
||||
del self.OnJobRequeuedCallback
|
||||
del self.OnJobFailedCallback
|
||||
del self.OnJobSuspendedCallback
|
||||
del self.OnJobResumedCallback
|
||||
del self.OnJobPendedCallback
|
||||
del self.OnJobReleasedCallback
|
||||
del self.OnJobDeletedCallback
|
||||
del self.OnJobErrorCallback
|
||||
del self.OnJobPurgedCallback
|
||||
|
||||
del self.OnHouseCleaningCallback
|
||||
del self.OnRepositoryRepairCallback
|
||||
|
||||
del self.OnSlaveStartedCallback
|
||||
del self.OnSlaveStoppedCallback
|
||||
del self.OnSlaveIdleCallback
|
||||
del self.OnSlaveRenderingCallback
|
||||
del self.OnSlaveStartingJobCallback
|
||||
del self.OnSlaveStalledCallback
|
||||
|
||||
del self.OnIdleShutdownCallback
|
||||
del self.OnMachineStartupCallback
|
||||
del self.OnThermalShutdownCallback
|
||||
del self.OnMachineRestartCallback
|
||||
|
||||
def inject_pype_environment(self, job, additonalData={}):
|
||||
|
||||
# returning early if no plugins are configured
|
||||
# if not self.GetConfigEntryWithDefault(config_entry, ""):
|
||||
# return
|
||||
|
||||
# adding python search paths
|
||||
paths = self.GetConfigEntryWithDefault("PythonSearchPaths", "").strip()
|
||||
paths = paths.split(";")
|
||||
|
||||
for path in paths:
|
||||
self.LogInfo("Extending sys.path with: " + str(path))
|
||||
sys.path.append(path)
|
||||
|
||||
|
||||
# setup logging
|
||||
level_item = self.GetConfigEntryWithDefault("LoggingLevel", "DEBUG")
|
||||
level = logging.DEBUG
|
||||
|
||||
if level_item == "INFO":
|
||||
level = logging.INFO
|
||||
if level_item == "WARNING":
|
||||
level = logging.WARNING
|
||||
if level_item == "ERROR":
|
||||
level = logging.ERROR
|
||||
|
||||
logging.basicConfig(level=level)
|
||||
logger = logging.getLogger()
|
||||
|
||||
self.LogInfo("TESTING LOGGING")
|
||||
|
||||
# setup username
|
||||
os.environ["LOGNAME"] = job.UserName
|
||||
|
||||
|
||||
def updateFtrackStatus(self, job, statusName, createIfMissing=False):
|
||||
"Updates version status on ftrack"
|
||||
pass
|
||||
|
||||
|
||||
def OnJobSubmitted(self, job):
|
||||
|
||||
self.updateFtrackStatus(job, "Render Queued")
|
||||
|
||||
def OnJobStarted(self, job):
|
||||
|
||||
self.inject_pype_environment(job)
|
||||
self.updateFtrackStatus(job, "Rendering")
|
||||
|
||||
def OnJobFinished(self, job):
|
||||
|
||||
self.updateFtrackStatus(job, "Artist Review")
|
||||
|
||||
def OnJobRequeued(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnJobFailed(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnJobSuspended(self, job):
|
||||
|
||||
self.updateFtrackStatus(job, "Render Queued")
|
||||
|
||||
def OnJobResumed(self, job):
|
||||
|
||||
self.inject_pype_environment(job)
|
||||
self.updateFtrackStatus(job, "Rendering")
|
||||
|
||||
def OnJobPended(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnJobReleased(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnJobDeleted(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnJobError(self, job, task, report):
|
||||
|
||||
data = {"task": task, "report": report}
|
||||
self.inject_pype_environment(job, data)
|
||||
|
||||
def OnJobPurged(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnHouseCleaning(self):
|
||||
|
||||
pass
|
||||
|
||||
def OnRepositoryRepair(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnSlaveStarted(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnSlaveStopped(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnSlaveIdle(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnSlaveRendering(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnSlaveStartingJob(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnSlaveStalled(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnIdleShutdown(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnMachineStartup(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnThermalShutdown(self, job):
|
||||
|
||||
pass
|
||||
|
||||
def OnMachineRestart(self, job):
|
||||
|
||||
pass
|
||||
42
vendor/deadline/custom/events/Pype/Pype.py
vendored
42
vendor/deadline/custom/events/Pype/Pype.py
vendored
|
|
@ -1,6 +1,4 @@
|
|||
import os
|
||||
import sys
|
||||
import logging
|
||||
import json
|
||||
import subprocess
|
||||
import platform
|
||||
|
|
@ -11,7 +9,6 @@ import time
|
|||
import Deadline.Events
|
||||
import Deadline.Scripting
|
||||
|
||||
from System import Environment
|
||||
|
||||
def GetDeadlineEventListener():
|
||||
return PypeEventListener()
|
||||
|
|
@ -71,7 +68,6 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
|
||||
self.ALREADY_INJECTED = False
|
||||
|
||||
|
||||
def Cleanup(self):
|
||||
del self.OnJobSubmittedCallback
|
||||
del self.OnJobStartedCallback
|
||||
|
|
@ -101,7 +97,7 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
del self.OnThermalShutdownCallback
|
||||
del self.OnMachineRestartCallback
|
||||
|
||||
def inject_pype_environment(self, job, additonalData={}):
|
||||
def inject_pype_environment(self, job, additonalData=None):
|
||||
|
||||
if self.ALREADY_INJECTED:
|
||||
self.LogInfo("Environment injected previously")
|
||||
|
|
@ -117,16 +113,19 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
|
||||
self.LogInfo("inject_pype_environment start")
|
||||
try:
|
||||
pype_command = "pype_console"
|
||||
if platform.system().lower() == "linux":
|
||||
pype_command = "pype_console.sh"
|
||||
elif platform.system().lower() == "windows":
|
||||
if platform.system().lower() == "windows":
|
||||
pype_command = "pype_console.exe"
|
||||
|
||||
pype_root = self.GetConfigEntryWithDefault("PypeExecutable", "").strip()
|
||||
pype_root = self.GetConfigEntryWithDefault("PypeExecutable", "")
|
||||
|
||||
pype_app = os.path.join(pype_root , pype_command)
|
||||
pype_app = os.path.join(pype_root.strip(), pype_command)
|
||||
if not os.path.exists(pype_app):
|
||||
raise RuntimeError("App '{}' doesn't exist. Fix it in Tools > Configure Events > pype".format(pype_app))
|
||||
raise RuntimeError("App '{}' doesn't exist. " +
|
||||
"Fix it in Tools > Configure Events > " +
|
||||
"pype".format(pype_app))
|
||||
|
||||
# tempfile.TemporaryFile cannot be used because of locking
|
||||
export_url = os.path.join(tempfile.gettempdir(),
|
||||
|
|
@ -134,20 +133,21 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
'env.json') # add HHMMSS + delete later
|
||||
self.LogInfo("export_url {}".format(export_url))
|
||||
|
||||
additional_args = {}
|
||||
additional_args['project'] = job.GetJobEnvironmentKeyValue('AVALON_PROJECT')
|
||||
additional_args['asset'] = job.GetJobEnvironmentKeyValue('AVALON_ASSET')
|
||||
additional_args['task'] = job.GetJobEnvironmentKeyValue('AVALON_TASK')
|
||||
additional_args['app'] = job.GetJobEnvironmentKeyValue('AVALON_APP_NAME')
|
||||
self.LogInfo("args::{}".format(additional_args))
|
||||
add_args = {}
|
||||
add_args['project'] = \
|
||||
job.GetJobEnvironmentKeyValue('AVALON_PROJECT')
|
||||
add_args['asset'] = job.GetJobEnvironmentKeyValue('AVALON_ASSET')
|
||||
add_args['task'] = job.GetJobEnvironmentKeyValue('AVALON_TASK')
|
||||
add_args['app'] = job.GetJobEnvironmentKeyValue('AVALON_APP_NAME')
|
||||
self.LogInfo("args::{}".format(add_args))
|
||||
|
||||
args = [
|
||||
pype_app,
|
||||
'extractenvironments',
|
||||
export_url
|
||||
]
|
||||
if all(additional_args.values()):
|
||||
for key, value in additional_args.items():
|
||||
if all(add_args.values()):
|
||||
for key, value in add_args.items():
|
||||
args.append("--{}".format(key))
|
||||
args.append(value)
|
||||
|
||||
|
|
@ -163,13 +163,13 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
for key, value in contents.items():
|
||||
job.SetJobEnvironmentKeyValue(key, value)
|
||||
|
||||
Deadline.Scripting.RepositoryUtils.SaveJob(job) # IMPORTANT
|
||||
Deadline.Scripting.RepositoryUtils.SaveJob(job) # IMPORTANT
|
||||
self.ALREADY_INJECTED = True
|
||||
|
||||
os.remove(export_url)
|
||||
|
||||
self.LogInfo("inject_pype_environment end")
|
||||
except Exception as error:
|
||||
except Exception:
|
||||
import traceback
|
||||
self.LogInfo(traceback.format_exc())
|
||||
self.LogInfo("inject_pype_environment failed")
|
||||
|
|
@ -177,7 +177,7 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
raise
|
||||
|
||||
def updateFtrackStatus(self, job, statusName, createIfMissing=False):
|
||||
"Updates version status on ftrack"
|
||||
"""Updates version status on ftrack"""
|
||||
pass
|
||||
|
||||
def OnJobSubmitted(self, job):
|
||||
|
|
@ -220,7 +220,7 @@ class PypeEventListener(Deadline.Events.DeadlineEventListener):
|
|||
|
||||
def OnJobError(self, job, task, report):
|
||||
self.LogInfo("OnJobError LOGGING")
|
||||
data = {"task": task, "report": report}
|
||||
#data = {"task": task, "report": report}
|
||||
|
||||
def OnJobPurged(self, job):
|
||||
pass
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue