Skip to content

Commit

Permalink
Have Cuesubmit QSettings use Read/WriteArray (#233)
Browse files Browse the repository at this point in the history
* Fixes #232 handle list settings as arrays.
  • Loading branch information
Greg Denton authored Mar 7, 2019
1 parent d86dc58 commit 0c48985
Showing 1 changed file with 82 additions and 14 deletions.
96 changes: 82 additions & 14 deletions cuesubmit/cuesubmit/ui/Submit.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def __init__(self, settingsWidgetType, jobTypes=JobTypes.JobTypes, parent=None,
super(CueSubmitWidget, self).__init__(parent)
self.skipDataChangedEvent = False
self.settings = QtCore.QSettings('opencue', 'cuesubmit')
self.clearMessageShown = False
self.jobTypes = jobTypes
self.primaryWidgetType = settingsWidgetType
self.primaryWidgetArgs = {'args': args, 'kwargs': kwargs}
Expand Down Expand Up @@ -93,7 +94,7 @@ def __init__(self, settingsWidgetType, jobTypes=JobTypes.JobTypes, parent=None,
self.jobNameInput = Widgets.CueLabelLineEdit(
'Job Name:',
tooltip='Job names must be unique, have more than 3 characters, and contain no spaces.',
completers=self.settings.value('submit/jobName'),
completers=self.getFilteredHistorySetting('submit/jobName'),
validators=[Validators.matchNoSpecialCharactersOnly, Validators.moreThan3Chars,
Validators.matchNoSpaces]
)
Expand All @@ -106,14 +107,14 @@ def __init__(self, settingsWidgetType, jobTypes=JobTypes.JobTypes, parent=None,
self.shotInput = Widgets.CueLabelLineEdit(
'Shot:',
tooltip='Name of the shot associated with this submission.',
completers=self.settings.value('submit/shotName'),
completers=self.getFilteredHistorySetting('submit/shotName'),
validators=[Validators.matchNoSpecialCharactersOnly]
)
self.layerNameInput = Widgets.CueLabelLineEdit(
'Layer Name:',
tooltip='Name for this layer of the job. Should be more than 3 characters, '
'and contain no spaces.',
completers=self.settings.value('submit/layerName'),
completers=self.getFilteredHistorySetting('submit/layerName'),
validators=[Validators.matchNoSpecialCharactersOnly, Validators.moreThan3Chars,
Validators.matchNoSpaces]
)
Expand Down Expand Up @@ -324,6 +325,66 @@ def validate(self, jobData):
'Please ensure all layers have a command to run.')
return True

def updateCompleters(self):
"""Update the line edit completers after submission."""
self.jobNameInput.lineEdit.completerStrings = self.getFilteredHistorySetting('submit/jobName')
self.shotInput.lineEdit.completerStrings = self.getFilteredHistorySetting('submit/shotName')
self.layerNameInput.lineEdit.completerStrings = self.getFilteredHistorySetting('submit/layerName')


def getFilteredHistorySetting(self, setting):
"""Return a list of strings for the provided setting.
Filtering out any None objects.
@type setting: str
@param setting: name of setting to get
@rtype: list<str>
@return: A list of strings of setting values.
"""
try:
return [str(value) for value in self.getHistorySetting(setting) if value is not None]
except Exception:
self.errorReadingSettings()
return []

def errorReadingSettings(self):
"""Display an error message and clear the QSettings object."""
if not self.clearMessageShown:
Widgets.messageBox(
"Previous submission history cannot be read from the QSettings."
"Clearing submission history.",
title="Cannot Read History",
parent=self).show()
self.clearMessageShown = True
self.settings.clear()

def getHistorySetting(self, setting):
"""Return a list of strings for the provided setting.
@type setting: str
@param setting: name of setting to get
@rtype: list<str>
@return: A list of strings of setting values.
"""
size = self.settings.beginReadArray('history')
previousValues = []
for settingIndex in range(size):
self.settings.setArrayIndex(settingIndex)
previousValues.append(self.settings.value(setting))
self.settings.endArray()
return previousValues

def writeHistorySetting(self, setting, values):
"""Update the QSettings object for the provided setting with values.
@type setting: str
@param setting: name of settings to set
@type values: list<str>
@param values: values to set as settings
"""
self.settings.beginWriteArray('history')
for settingIndex, savedValue in enumerate(values):
self.settings.setArrayIndex(settingIndex)
self.settings.setValue(setting, savedValue)
self.settings.endArray()

def updateSettingItem(self, setting, value, maxSettings=10):
"""Update the QSettings list entry for the provided setting.
Keep around a history of the last `maxSettings` number of entries.
Expand All @@ -334,17 +395,22 @@ def updateSettingItem(self, setting, value, maxSettings=10):
@type maxSettings: int
@param maxSettings: maximum number of items to keep a history of
"""
if not value:
return
values = self.settings.value(setting, [])
if value in values:
index = values.index(value)
else:
index = -1
if len(values) == maxSettings or index != -1:
values.pop(index)
values.insert(0, value)
self.settings.setValue(setting, values)
try:
if not value:
return
values = self.getHistorySetting(setting)

if value in values:
index = values.index(value)
else:
index = -1
if len(values) == maxSettings or index != -1:
values.pop(index)
values.insert(0, value)

self.writeHistorySetting(setting, values)
except Exception:
self.errorReadingSettings()

def saveSettings(self, jobData):
"""Update the QSettings with the values from the form.
Expand All @@ -361,7 +427,9 @@ def submit(self):
jobData = self.getJobData()
if not self.validate(jobData):
return
self.clearMessageShown = False
self.saveSettings(jobData)
self.updateCompleters()
try:
jobs = Submission.submitJob(jobData)
except opencue.exception.CueException, e:
Expand Down

0 comments on commit 0c48985

Please sign in to comment.