Skip to content
This repository was archived by the owner on Oct 10, 2024. It is now read-only.

Commit a6fe540

Browse files
committed
Merge branch 'hotfix/nuke-publish-fixes'
2 parents 1cac885 + bc900a3 commit a6fe540

File tree

3 files changed

+50
-12
lines changed

3 files changed

+50
-12
lines changed

avalon/nuke/lib.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,20 +88,27 @@ def set_avalon_knob_data(node, data={}, prefix="ak:"):
8888
'subset': 'subsetMain'
8989
}
9090
"""
91+
# fix prefix back compatibility
92+
if not isinstance(prefix, list):
93+
prefix = [prefix]
94+
95+
# definition of knobs
9196
knobs = [
9297
{"name": 'AvalonTab', "value": '', "type": "Tab_Knob"},
9398
{"name": 'begin', "value": 'Avalon data group',
9499
"type": "Tab_Knob", "group": 2},
95100
{"name": '__divider__'},
96101
{"name": 'avalon_data',
97102
"value": 'Warning! Do not change following data!',
98-
"type": "Text_Knob"}
103+
"type": "Text_Knob"},
104+
{"name": 'end', "value": 'Avalon data group',
105+
"type": "Tab_Knob", "group": -1}
99106
]
100107
visible = ["asset", "subset", "name", "namespace"]
101108

102109
try:
103110
# create Avalon Tab and basic knobs
104-
for k in knobs:
111+
for k in knobs[:-1]:
105112
if k["name"] in node.knobs().keys():
106113
continue
107114

@@ -118,7 +125,7 @@ def set_avalon_knob_data(node, data={}, prefix="ak:"):
118125
try:
119126
knob.setValue(k['value'])
120127
except TypeError as E:
121-
print(E)
128+
log.info("{} - Not correct knob value. Error: `{}`".format(__name__, E))
122129
else:
123130
if k["name"] not in node.knobs().keys():
124131
n_knob = getattr(nuke, k["type"])
@@ -127,7 +134,7 @@ def set_avalon_knob_data(node, data={}, prefix="ak:"):
127134

128135
# add avalon knobs for imprinting data
129136
for key, value in data.items():
130-
name = prefix + key
137+
name = prefix[-1] + key
131138
value = str(value)
132139

133140
try:
@@ -140,6 +147,13 @@ def set_avalon_knob_data(node, data={}, prefix="ak:"):
140147
knob = n_knob(name, key, value)
141148
node.addKnob(knob)
142149

150+
# adding closing group knob
151+
cgk = knobs[-1]
152+
if cgk["name"] not in node.knobs().keys():
153+
n_knob = getattr(nuke, cgk["type"])
154+
knob = n_knob(cgk["name"], cgk["value"], cgk.get("group"))
155+
node.addKnob(knob)
156+
143157
return node
144158

145159
except NameError as e:
@@ -159,9 +173,10 @@ def get_avalon_knob_data(node, prefix="ak:"):
159173
"""
160174
# check if lists
161175
if not isinstance(prefix, list):
162-
prefix = list(prefix)
176+
prefix = list([prefix])
163177

164178
data = dict()
179+
log.debug("___> prefix: `{}`".format(prefix))
165180
# loop prefix
166181
for p in prefix:
167182

@@ -176,9 +191,9 @@ def get_avalon_knob_data(node, prefix="ak:"):
176191
return get_avalon_knob_data(node)
177192

178193
# get data from filtered knobs
179-
data.update({k.replace(prefix, ''): node[k].value()
194+
data.update({k.replace(p, ''): node[k].value()
180195
for k in node.knobs().keys()
181-
if prefix in k})
196+
if p in k})
182197

183198
return data
184199

avalon/nuke/pipeline.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import contextlib
44
import importlib
55
from collections import OrderedDict
6+
from __builtin__ import reload
7+
68
from pyblish import api as pyblish
79
from ..pipeline import AVALON_CONTAINER_ID
810
from .. import api, io, schema
@@ -21,8 +23,6 @@ def reload_pipeline():
2123
2224
"""
2325

24-
import importlib
25-
2626
api.uninstall()
2727
_uninstall_menu()
2828

@@ -40,7 +40,12 @@ def reload_pipeline():
4040
log.info("Reloading module: {}...".format(module))
4141

4242
module = importlib.import_module(module)
43-
importlib.reload(module)
43+
44+
try:
45+
importlib.reload(module)
46+
except AttributeError as e:
47+
log.warning("Cannot reload module: {}".format(e))
48+
reload(module)
4449

4550
import avalon.nuke
4651
api.install(avalon.nuke)
@@ -104,7 +109,7 @@ def parse_container(node, validate=True):
104109
"""
105110
data = lib.get_avalon_knob_data(node)
106111

107-
if validate:
112+
if validate and data and data.get("schema"):
108113
schema.validate(data)
109114

110115
if not isinstance(data, dict):

avalon/tools/creator/app.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ def _set_status_color(self, color):
116116
class Window(QtWidgets.QDialog):
117117

118118
stateChanged = QtCore.Signal(bool)
119+
taskSubsetFamilies = ["render"]
119120

120121
def __init__(self, parent=None):
121122
super(Window, self).__init__(parent)
@@ -300,8 +301,14 @@ def _on_data_changed(self):
300301
if asset:
301302
# Get plugin and family
302303
plugin = item.data(PluginRole)
304+
task = io.Session.get('AVALON_TASK', None)
305+
sanitized_task = re.sub('[^0-9a-zA-Z]+', '_', task)
303306
family = plugin.family.rsplit(".", 1)[-1]
304307

308+
if family in self.taskSubsetFamilies:
309+
task = io.Session.get('AVALON_TASK', '')
310+
sanitized_task = re.sub('[^0-9a-zA-Z]+', '', task)
311+
305312
# Get all subsets of the current asset
306313
subsets = io.find(filter={"type": "subset",
307314
"name": {"$regex": "{}*".format(family),
@@ -326,7 +333,18 @@ def _on_data_changed(self):
326333
# Update the result
327334
if subset_name:
328335
subset_name = subset_name[0].upper() + subset_name[1:]
329-
result.setText("{}{}".format(family, subset_name))
336+
337+
if family in self.taskSubsetFamilies:
338+
result.setText("{}{}{}".format(
339+
family,
340+
sanitized_task.capitalize(),
341+
subset_name
342+
))
343+
else:
344+
result.setText("{}{}".format(
345+
family,
346+
subset_name.capitalize()
347+
))
330348

331349
# Indicate subset existence
332350
if not subset_name:

0 commit comments

Comments
 (0)