Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cuesubmit command feedback #1283

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions cuesubmit/cuesubmit/Constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@
MAYA_RENDER_CMD = config.get('MAYA_RENDER_CMD', 'Render')
NUKE_RENDER_CMD = config.get('NUKE_RENDER_CMD', 'nuke')
BLENDER_RENDER_CMD = config.get('BLENDER_RENDER_CMD', 'blender')
FRAME_TOKEN = config.get('FRAME_TOKEN', '#IFRAME#')

FRAME_TOKEN = '#IFRAME#'
FRAME_START = '#FRAME_START#'
FRAME_END = '#FRAME_END#'
BLENDER_FORMATS = ['', 'AVIJPEG', 'AVIRAW', 'BMP', 'CINEON', 'DPX', 'EXR', 'HDR', 'IRIS', 'IRIZ',
'JP2', 'JPEG', 'MPEG', 'MULTILAYER', 'PNG', 'RAWTGA', 'TGA', 'TIFF']
BLENDER_OUTPUT_OPTIONS_URL = \
Expand Down
69 changes: 28 additions & 41 deletions cuesubmit/cuesubmit/Submission.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,27 @@
from cuesubmit import JobTypes


def buildMayaCmd(layerData):
def buildMayaCmd(layerData, silent=False):
"""From a layer, builds a Maya Render command."""
camera = layerData.cmd.get('camera')
mayaFile = layerData.cmd.get('mayaFile')
if not mayaFile:
if not mayaFile and not silent:
raise ValueError('No Maya File provided. Cannot submit job.')
renderCommand = '{renderCmd} -r file -s {frameToken} -e {frameToken}'.format(
renderCmd=Constants.MAYA_RENDER_CMD, frameToken=Constants.FRAME_TOKEN)
renderCommand = '{renderCmd} -r file -s {frameStart} -e {frameEnd}'.format(
renderCmd=Constants.MAYA_RENDER_CMD,
frameStart=Constants.FRAME_START,
frameEnd=Constants.FRAME_END)
if camera:
renderCommand += ' -cam {}'.format(camera)
renderCommand += ' {}'.format(mayaFile)
return renderCommand


def buildNukeCmd(layerData):
def buildNukeCmd(layerData, silent=False):
"""From a layer, builds a Nuke Render command."""
writeNodes = layerData.cmd.get('writeNodes')
nukeFile = layerData.cmd.get('nukeFile')
if not nukeFile:
if not nukeFile and not silent:
raise ValueError('No Nuke file provided. Cannot submit job.')
renderCommand = '{renderCmd} -F {frameToken} '.format(
renderCmd=Constants.NUKE_RENDER_CMD, frameToken=Constants.FRAME_TOKEN)
Expand All @@ -58,12 +60,12 @@ def buildNukeCmd(layerData):
return renderCommand


def buildBlenderCmd(layerData):
def buildBlenderCmd(layerData, silent=False):
"""From a layer, builds a Blender render command."""
blenderFile = layerData.cmd.get('blenderFile')
outputPath = layerData.cmd.get('outputPath')
outputFormat = layerData.cmd.get('outputFormat')
if not blenderFile:
if not blenderFile and not silent:
raise ValueError('No Blender file provided. Cannot submit job.')

renderCommand = '{renderCmd} -b -noaudio {blenderFile}'.format(
Expand Down Expand Up @@ -102,46 +104,31 @@ def buildLayer(layerData, command, lastLayer=None):
layer.depend_on(lastLayer)
return layer


def buildMayaLayer(layerData, lastLayer):
"""Builds a PyOutline layer running a Maya command."""
mayaCmd = buildMayaCmd(layerData)
return buildLayer(layerData, mayaCmd, lastLayer)


def buildNukeLayer(layerData, lastLayer):
"""Builds a PyOutline layer running a Nuke command."""
nukeCmd = buildNukeCmd(layerData)
return buildLayer(layerData, nukeCmd, lastLayer)


def buildBlenderLayer(layerData, lastLayer):
"""Builds a PyOutline layer running a Blender command."""
blenderCmd = buildBlenderCmd(layerData)
return buildLayer(layerData, blenderCmd, lastLayer)


def buildShellLayer(layerData, lastLayer):
"""Builds a PyOutline layer running a shell command."""
return buildLayer(layerData, layerData.cmd['commandTextBox'], lastLayer)

def buildLayerCommand(layerData, silent=False):
"""Builds the command to be sent per jobType"""
if layerData.layerType == JobTypes.JobTypes.MAYA:
command = buildMayaCmd(layerData, silent)
elif layerData.layerType == JobTypes.JobTypes.SHELL:
command = layerData.cmd.get('commandTextBox') if silent else layerData.cmd['commandTextBox']
elif layerData.layerType == JobTypes.JobTypes.NUKE:
command = buildNukeCmd(layerData, silent)
elif layerData.layerType == JobTypes.JobTypes.BLENDER:
command = buildBlenderCmd(layerData, silent)
else:
if silent:
command = 'Error: unrecognized layer type {}'.format(layerData.layerType)
else:
raise ValueError('unrecognized layer type {}'.format(layerData.layerType))
return command

def submitJob(jobData):
"""Submits the job using the PyOutline API."""
ol = outline.Outline(
jobData['name'], shot=jobData['shot'], show=jobData['show'], user=jobData['username'])
lastLayer = None
for layerData in jobData['layers']:
if layerData.layerType == JobTypes.JobTypes.MAYA:
layer = buildMayaLayer(layerData, lastLayer)
elif layerData.layerType == JobTypes.JobTypes.SHELL:
layer = buildShellLayer(layerData, lastLayer)
elif layerData.layerType == JobTypes.JobTypes.NUKE:
layer = buildNukeLayer(layerData, lastLayer)
elif layerData.layerType == JobTypes.JobTypes.BLENDER:
layer = buildBlenderLayer(layerData, lastLayer)
else:
raise ValueError('unrecognized layer type %s' % layerData.layerType)
command = buildLayerCommand(layerData)
layer = buildLayer(layerData, command, lastLayer)
ol.add_layer(layer)
lastLayer = layer

Expand Down
1 change: 1 addition & 0 deletions cuesubmit/cuesubmit/ui/SettingsWidgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ def setupConnections(self):
# pylint: disable=no-member
self.fileInput.lineEdit.textChanged.connect(self.dataChanged.emit)
self.outputPath.lineEdit.textChanged.connect(self.dataChanged.emit)
self.outputSelector.optionsMenu.triggered.connect(self.dataChanged.emit)
# pylint: enable=no-member

def setCommandData(self, commandData):
Expand Down
9 changes: 9 additions & 0 deletions cuesubmit/cuesubmit/ui/Style.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,15 @@
}
"""

DISABLED_LINE_EDIT = """
QLineEdit {
color: rgb(110, 110, 110);
border: 0px solid;
background-color: rgb(30, 35, 40);
border-radius: 4px;
}
"""

SEPARATOR_LINE = 'border: 1px solid rgb(20, 30, 40)'

TEXT = 'background-color: rgb(40, 50, 60); color: rgb(250, 250, 250); font-weight: regular;'
Expand Down
11 changes: 11 additions & 0 deletions cuesubmit/cuesubmit/ui/Submit.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ def __init__(
self.facilitySelector.setChecked(selected_facility)

self.settingsWidget = self.jobTypes.build(self.primaryWidgetType, *args, **kwargs)
self.commandFeedback = Widgets.CueLabelLineEdit( labelText='Final command:' )
self.commandFeedback.greyOut()
self.jobTreeWidget = Job.CueJobWidget()
self.submitButtons = CueSubmitButtons()
self.setupUi()
Expand Down Expand Up @@ -280,6 +282,7 @@ def setupUi(self):
self.coresLayout.addWidget(self.dependSelector)
self.coresLayout.addSpacerItem(Widgets.CueSpacerItem(Widgets.SpacerTypes.HORIZONTAL))
self.layerInfoLayout.addLayout(self.coresLayout)
self.layerInfoLayout.addWidget(self.commandFeedback)
self.scrollingLayout.addLayout(self.layerInfoLayout)

self.scrollingLayout.addSpacerItem(Widgets.CueSpacerItem(Widgets.SpacerTypes.VERTICAL))
Expand Down Expand Up @@ -329,6 +332,7 @@ def jobLayerSelectionChanged(self, layerObject):
self.dependSelector.clearChecked()
self.dependSelector.setChecked([layerObject.dependType])
self.settingsWidget.setCommandData(layerObject.cmd)
self.updateFeedbackCommand(layerObject)
self.skipDataChangedEvent = False

def jobDataChanged(self):
Expand All @@ -351,6 +355,13 @@ def jobDataChanged(self):
dependsOn=None
)
self.jobTreeWidget.updateJobData(self.jobNameInput.text())
self.updateFeedbackCommand(self.jobTreeWidget.currentLayerData)

def updateFeedbackCommand(self, layerData):
""" Builds the final command for this layer and displays it in the feedback widget """
command = Submission.buildLayerCommand(layerData=layerData,
silent=True)
self.commandFeedback.setText(text=command)

def jobTypeChanged(self):
"""Action when the job type is changed."""
Expand Down
5 changes: 5 additions & 0 deletions cuesubmit/cuesubmit/ui/Widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@ def text(self):
"""
return self.lineEdit.text()

def greyOut(self):
"""Make widget grey and read-only"""
self.lineEdit.setReadOnly(True)
self.lineEdit.setStyleSheet(Style.DISABLED_LINE_EDIT)


class CueLineEdit(QtWidgets.QLineEdit):
"""Wrapper around QLineEdit that allows for changing text with up/down arrow keys."""
Expand Down
Loading