mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge branch 'develop' into feature/OP-7176_Use-folder-path-as-unique-identifier
This commit is contained in:
commit
79c079961b
21 changed files with 525 additions and 73 deletions
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -35,6 +35,7 @@ body:
|
|||
label: Version
|
||||
description: What version are you running? Look to OpenPype Tray
|
||||
options:
|
||||
- 3.17.6
|
||||
- 3.17.6-nightly.3
|
||||
- 3.17.6-nightly.2
|
||||
- 3.17.6-nightly.1
|
||||
|
|
@ -134,7 +135,6 @@ body:
|
|||
- 3.15.2-nightly.3
|
||||
- 3.15.2-nightly.2
|
||||
- 3.15.2-nightly.1
|
||||
- 3.15.1
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
|
|
|
|||
380
CHANGELOG.md
380
CHANGELOG.md
|
|
@ -1,6 +1,386 @@
|
|||
# Changelog
|
||||
|
||||
|
||||
## [3.17.6](https://github.com/ynput/OpenPype/tree/3.17.6)
|
||||
|
||||
|
||||
[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.5...3.17.6)
|
||||
|
||||
### **🚀 Enhancements**
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Testing: Validate Maya Logs <a href="https://github.com/ynput/OpenPype/pull/5775">#5775</a></summary>
|
||||
|
||||
This PR adds testing of the logs within Maya such as Python and Pyblish errors.The reason why we need to touch so many files outside of Maya is because of the pyblish errors below;
|
||||
```
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "collect_otio_frame_ranges" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "collect_otio_frame_ranges" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "collect_otio_review" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "collect_otio_review" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "collect_otio_subset_resources" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "collect_otio_subset_resources" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "extract_otio_audio_tracks" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "extract_otio_audio_tracks" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "extract_otio_file" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "extract_otio_file" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "extract_otio_review" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "extract_otio_review" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "extract_otio_trimming_video" (No module named 'opentimelineio')
|
||||
# Error: pyblish.plugin : Skipped: "extract_otio_trimming_video" (No module named 'opentimelineio') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "submit_blender_deadline" (No module named 'bpy')
|
||||
# Error: pyblish.plugin : Skipped: "submit_blender_deadline" (No module named 'bpy') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "submit_houdini_remote_publish" (No module named 'hou')
|
||||
# Error: pyblish.plugin : Skipped: "submit_houdini_remote_publish" (No module named 'hou') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "submit_houdini_render_deadline" (No module named 'hou')
|
||||
# Error: pyblish.plugin : Skipped: "submit_houdini_render_deadline" (No module named 'hou') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "submit_max_deadline" (No module named 'pymxs')
|
||||
# Error: pyblish.plugin : Skipped: "submit_max_deadline" (No module named 'pymxs') #
|
||||
pyblish (ERROR) (line: 1371) pyblish.plugin:
|
||||
Skipped: "submit_nuke_deadline" (No module named 'nuke')
|
||||
# Error: pyblish.plugin : Skipped: "submit_nuke_deadline" (No module named 'nuke') #
|
||||
```
|
||||
We also needed to `stdout` and `stderr` from the launched application to capture the output.Split from #5644.Dependent on #5734
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Maya: Render Settings cleanup remove global `RENDER_ATTRS` <a href="https://github.com/ynput/OpenPype/pull/5801">#5801</a></summary>
|
||||
|
||||
Remove global `lib.RENDER_ATTRS` and implement a `RenderSettings.get_padding_attr(renderer)` method instead.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Testing: Ingest expected files and input workfile <a href="https://github.com/ynput/OpenPype/pull/5840">#5840</a></summary>
|
||||
|
||||
This ingests the Maya workfile from the Drive storage. Have changed the format to MayaAscii so its easier to see what changes are happening in a PR. This meant changing the expected files and database entries as well.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Chore: Create plugin auto-apply settings <a href="https://github.com/ynput/OpenPype/pull/5908">#5908</a></summary>
|
||||
|
||||
Create plugins can auto-apply settings.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Resolve: Add save current file button + "Save" shortcut when menu is active <a href="https://github.com/ynput/OpenPype/pull/5691">#5691</a></summary>
|
||||
|
||||
Adds a "Save current file" to the OpenPype menu.Also adds a "Save" shortcut key sequence (CTRL+S on Windows) to the button, so that clicking CTRL+S when the menu is active will save the current workfile. However this of course does not work if the menu does not receive the key press event (e.g. when Resolve UI is active instead)Resolves #5684
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Reference USD file as maya native geometry <a href="https://github.com/ynput/OpenPype/pull/5781">#5781</a></summary>
|
||||
|
||||
Add MayaUsdReferenceLoader to reference USD as Maya native geometry using `mayaUSDImport` file translator.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Max: Bug fix on wrong aspect ratio and viewport not being maximized during context in review family <a href="https://github.com/ynput/OpenPype/pull/5839">#5839</a></summary>
|
||||
|
||||
This PR will fix the bug on wrong aspect ratio and viewport not being maximized when creating preview animationBesides, the support of tga image format and the options for AA quality are implemented in this PR
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Blender: Incorporate blender "Collections" into Publish/Load <a href="https://github.com/ynput/OpenPype/pull/5841">#5841</a></summary>
|
||||
|
||||
Allow `blendScene` family to include collections.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Max: Allows user preset the setting of preview animation in OP/AYON Setting <a href="https://github.com/ynput/OpenPype/pull/5859">#5859</a></summary>
|
||||
|
||||
Allows user preset the setting of preview animation in OP/AYON Setting for review family.
|
||||
- [x] Openpype
|
||||
- [x] AYON
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Publisher: Center publisher window on first show <a href="https://github.com/ynput/OpenPype/pull/5877">#5877</a></summary>
|
||||
|
||||
Move publisher window to center of a screen on first show.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Publisher: Instance context changes confirm works <a href="https://github.com/ynput/OpenPype/pull/5881">#5881</a></summary>
|
||||
|
||||
Confirmation of context changes in publisher on existing instances does not cause glitches.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>AYON workfiles tools: Revisit workfiles tool <a href="https://github.com/ynput/OpenPype/pull/5897">#5897</a></summary>
|
||||
|
||||
Revisited workfiles tool for AYON mode to reuse common models and widgets.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Nuke: updated colorspace settings <a href="https://github.com/ynput/OpenPype/pull/5906">#5906</a></summary>
|
||||
|
||||
Updating nuke colorspace settings into more convenient way with usage of ocio config roles rather then particular colorspace names. This way we should not have troubles to switch between linear Rec709 or ACES configs without any additional settings changes.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Blender: Refactor to new publisher <a href="https://github.com/ynput/OpenPype/pull/5910">#5910</a></summary>
|
||||
|
||||
Refactor Blender integration to use the new publisher
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Enhancement: Some publish logs cosmetics <a href="https://github.com/ynput/OpenPype/pull/5917">#5917</a></summary>
|
||||
|
||||
General logging message tweaks:
|
||||
- Sort some lists of folder/filenames so they appear sorted in the logs
|
||||
- Fix some grammar / typos
|
||||
- In some cases provide slightly more information in a log
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Blender: Better name of 'asset_name' function <a href="https://github.com/ynput/OpenPype/pull/5927">#5927</a></summary>
|
||||
|
||||
Renamed function `asset_name` to `prepare_scene_name`.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
### **🐛 Bug fixes**
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Maya: Bug fix the fbx animation export errored out when the skeletonAnim set is empty <a href="https://github.com/ynput/OpenPype/pull/5875">#5875</a></summary>
|
||||
|
||||
Resolve this bug discordIf the skeletonAnim SET is empty and fbx animation collect, the fbx animation extractor would skip the fbx extraction
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Bugfix: fix few typos in houdini's and Maya's Ayon settings <a href="https://github.com/ynput/OpenPype/pull/5882">#5882</a></summary>
|
||||
|
||||
Fixing few typos
|
||||
- [x] Maya unreal static mesh
|
||||
- [x] Houdini static mesh
|
||||
- [x] Houdini collect asset handles
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Bugfix: Ayon Deadline env vars + error message on no executable found <a href="https://github.com/ynput/OpenPype/pull/5815">#5815</a></summary>
|
||||
|
||||
Fix some Ayon x Deadline issues as came up in this topic:
|
||||
- missing Environment Variables issue explained here for `deadlinePlugin.RunProcess` for the AYON _extract environments_ call.
|
||||
- wrong error formatting described here with a `;` between each character like this: `Ayon executable was not found in the semicolon separated list "C;:;/;P;r;o;g;r;a;m; ;F;i;l;e;s;/;Y;n;p;u;t;/;A;Y;O;N; ;1;.;0;.;0;-;b;e;t;a;.;5;/;a;y;o;n;_;c;o;n;s;o;l;e;.;e;x;e". The path to the render executable can be configured from the Plugin Configuration in the Deadline Monitor.`
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>AYON: Fix bundles access in settings <a href="https://github.com/ynput/OpenPype/pull/5856">#5856</a></summary>
|
||||
|
||||
Fixed access to bundles data in settings to define correct develop variant.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>AYON 3dsMax settings: 'ValidateAttributes' settings converte only if available <a href="https://github.com/ynput/OpenPype/pull/5878">#5878</a></summary>
|
||||
|
||||
Convert `ValidateAttributes` settings only if are available in AYON settings.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>AYON: Fix TrayPublisher editorial settings <a href="https://github.com/ynput/OpenPype/pull/5880">#5880</a></summary>
|
||||
|
||||
Fixing Traypublisher settings for adding task in simple editorial.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>TrayPublisher: editorial frame range check not needed <a href="https://github.com/ynput/OpenPype/pull/5884">#5884</a></summary>
|
||||
|
||||
Validator for frame ranges is not needed during editorial publishing since entity data are not yet in database.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Update houdini license validator <a href="https://github.com/ynput/OpenPype/pull/5886">#5886</a></summary>
|
||||
|
||||
As reported in this community commentHoudini USD publishing is only restricted in Houdini apprentice.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Blender: Fix blend extraction and packed images <a href="https://github.com/ynput/OpenPype/pull/5888">#5888</a></summary>
|
||||
|
||||
Fixed a with blend extractor and packed images.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>AYON: Initialize connection with all information <a href="https://github.com/ynput/OpenPype/pull/5890">#5890</a></summary>
|
||||
|
||||
Create global AYON api connection with all informations all the time.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>AYON: Scene inventory tool without site sync <a href="https://github.com/ynput/OpenPype/pull/5896">#5896</a></summary>
|
||||
|
||||
Skip 'get_site_icons' if site sync addon is disabled.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Publish report tool: Fix PySide6 <a href="https://github.com/ynput/OpenPype/pull/5898">#5898</a></summary>
|
||||
|
||||
Use constants from classes instead of objects.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>fusion: removing hardcoded template name for saver <a href="https://github.com/ynput/OpenPype/pull/5907">#5907</a></summary>
|
||||
|
||||
Fusion is not hardcoded for `render` anatomy template only anymore. This was blocking AYON deployment.
|
||||
|
||||
|
||||
___
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.17.5](https://github.com/ynput/OpenPype/tree/3.17.5)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -138,16 +138,22 @@ def _template_replacements_to_v3(template):
|
|||
)
|
||||
|
||||
|
||||
def _convert_template_item(template):
|
||||
# Others won't have 'directory'
|
||||
if "directory" not in template:
|
||||
return
|
||||
folder = _template_replacements_to_v3(template.pop("directory"))
|
||||
template["folder"] = folder
|
||||
template["file"] = _template_replacements_to_v3(template["file"])
|
||||
template["path"] = "/".join(
|
||||
(folder, template["file"])
|
||||
)
|
||||
def _convert_template_item(template_item):
|
||||
for key, value in tuple(template_item.items()):
|
||||
template_item[key] = _template_replacements_to_v3(value)
|
||||
|
||||
# Change 'directory' to 'folder'
|
||||
if "directory" in template_item:
|
||||
template_item["folder"] = template_item.pop("directory")
|
||||
|
||||
if (
|
||||
"path" not in template_item
|
||||
and "file" in template_item
|
||||
and "folder" in template_item
|
||||
):
|
||||
template_item["path"] = "/".join(
|
||||
(template_item["folder"], template_item["file"])
|
||||
)
|
||||
|
||||
|
||||
def _fill_template_category(templates, cat_templates, cat_key):
|
||||
|
|
@ -212,10 +218,27 @@ def convert_v4_project_to_v3(project):
|
|||
_convert_template_item(template)
|
||||
new_others_templates[name] = template
|
||||
|
||||
staging_templates = templates.pop("staging", None)
|
||||
# Key 'staging_directories' is legacy key that changed
|
||||
# to 'staging_dir'
|
||||
_legacy_staging_templates = templates.pop("staging_directories", None)
|
||||
if staging_templates is None:
|
||||
staging_templates = _legacy_staging_templates
|
||||
|
||||
if staging_templates is None:
|
||||
staging_templates = {}
|
||||
|
||||
# Prefix all staging template names with 'staging_' prefix
|
||||
# and add them to 'others'
|
||||
for name, template in staging_templates.items():
|
||||
_convert_template_item(template)
|
||||
new_name = "staging_{}".format(name)
|
||||
new_others_templates[new_name] = template
|
||||
|
||||
for key in (
|
||||
"work",
|
||||
"publish",
|
||||
"hero"
|
||||
"hero",
|
||||
):
|
||||
cat_templates = templates.pop(key)
|
||||
_fill_template_category(templates, cat_templates, key)
|
||||
|
|
|
|||
|
|
@ -149,9 +149,7 @@ class CreateSaver(NewCreator):
|
|||
|
||||
# get frame padding from anatomy templates
|
||||
anatomy = Anatomy()
|
||||
frame_padding = int(
|
||||
anatomy.templates["render"].get("frame_padding", 4)
|
||||
)
|
||||
frame_padding = anatomy.templates["frame_padding"]
|
||||
|
||||
# Subset change detected
|
||||
workdir = os.path.normpath(legacy_io.Session["AVALON_WORKDIR"])
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ def deprecated(new_destination):
|
|||
|
||||
class Context:
|
||||
main_window = None
|
||||
context_label = None
|
||||
context_action_item = None
|
||||
project_name = os.getenv("AVALON_PROJECT")
|
||||
# Workfile related code
|
||||
workfiles_launched = False
|
||||
|
|
|
|||
|
|
@ -236,9 +236,13 @@ def _install_menu():
|
|||
|
||||
if not ASSIST:
|
||||
label = get_context_label()
|
||||
Context.context_label = label
|
||||
context_action = menu.addCommand(label)
|
||||
context_action.setEnabled(False)
|
||||
context_action_item = menu.addCommand("Context")
|
||||
context_action_item.setEnabled(False)
|
||||
|
||||
Context.context_action_item = context_action_item
|
||||
|
||||
context_action = context_action_item.action()
|
||||
context_action.setText(label)
|
||||
|
||||
# add separator after context label
|
||||
menu.addSeparator()
|
||||
|
|
@ -348,26 +352,21 @@ def _install_menu():
|
|||
|
||||
|
||||
def change_context_label():
|
||||
menubar = nuke.menu("Nuke")
|
||||
menu = menubar.findItem(MENU_LABEL)
|
||||
if ASSIST:
|
||||
return
|
||||
|
||||
label = get_context_label()
|
||||
context_action_item = Context.context_action_item
|
||||
if context_action_item is None:
|
||||
return
|
||||
context_action = context_action_item.action()
|
||||
|
||||
rm_item = [
|
||||
(i, item) for i, item in enumerate(menu.items())
|
||||
if Context.context_label in item.name()
|
||||
][0]
|
||||
old_label = context_action.text()
|
||||
new_label = get_context_label()
|
||||
|
||||
menu.removeItem(rm_item[1].name())
|
||||
|
||||
context_action = menu.addCommand(
|
||||
label,
|
||||
index=(rm_item[0])
|
||||
)
|
||||
context_action.setEnabled(False)
|
||||
context_action.setText(new_label)
|
||||
|
||||
log.info("Task label changed from `{}` to `{}`".format(
|
||||
Context.context_label, label))
|
||||
old_label, new_label))
|
||||
|
||||
|
||||
def add_shortcuts_from_presets():
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ class CollectAutoImage(pyblish.api.ContextPlugin):
|
|||
self.log.debug("Auto image instance found, won't create new")
|
||||
return
|
||||
|
||||
project_name = context.data["anatomyData"]["project"]["name"]
|
||||
project_name = context.data["projectName"]
|
||||
proj_settings = context.data["project_settings"]
|
||||
task_name = context.data["anatomyData"]["task"]["name"]
|
||||
task_name = context.data["task"]
|
||||
host_name = context.data["hostName"]
|
||||
asset_doc = context.data["assetEntity"]
|
||||
asset_name = get_asset_name_identifier(asset_doc)
|
||||
|
|
|
|||
|
|
@ -61,9 +61,9 @@ class CollectAutoReview(pyblish.api.ContextPlugin):
|
|||
variant = (context.data.get("variant") or
|
||||
auto_creator["default_variant"])
|
||||
|
||||
project_name = context.data["anatomyData"]["project"]["name"]
|
||||
project_name = context.data["projectName"]
|
||||
proj_settings = context.data["project_settings"]
|
||||
task_name = context.data["anatomyData"]["task"]["name"]
|
||||
task_name = context.data["task"]
|
||||
host_name = context.data["hostName"]
|
||||
asset_doc = context.data["assetEntity"]
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class CollectAutoWorkfile(pyblish.api.ContextPlugin):
|
|||
self.log.debug("Workfile instance disabled")
|
||||
return
|
||||
|
||||
project_name = context.data["anatomyData"]["project"]["name"]
|
||||
project_name = context.data["projectName"]
|
||||
proj_settings = context.data["project_settings"]
|
||||
auto_creator = proj_settings.get(
|
||||
"photoshop", {}).get(
|
||||
|
|
@ -67,7 +67,7 @@ class CollectAutoWorkfile(pyblish.api.ContextPlugin):
|
|||
variant = (context.data.get("variant") or
|
||||
auto_creator["default_variant"])
|
||||
|
||||
task_name = context.data["anatomyData"]["task"]["name"]
|
||||
task_name = context.data["task"]
|
||||
host_name = context.data["hostName"]
|
||||
asset_doc = context.data["assetEntity"]
|
||||
|
||||
|
|
|
|||
|
|
@ -708,6 +708,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin,
|
|||
"""
|
||||
|
||||
project_name = context.data["projectName"]
|
||||
host_name = context.data["hostName"]
|
||||
if not version:
|
||||
version = get_last_version_by_subset_name(
|
||||
project_name,
|
||||
|
|
@ -719,7 +720,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin,
|
|||
else:
|
||||
version = get_versioning_start(
|
||||
project_name,
|
||||
template_data["app"],
|
||||
host_name,
|
||||
task_name=template_data["task"]["name"],
|
||||
task_type=template_data["task"]["type"],
|
||||
family="render",
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class CollectSlackFamilies(pyblish.api.InstancePlugin,
|
|||
"families": family,
|
||||
"tasks": task_data.get("name"),
|
||||
"task_types": task_data.get("type"),
|
||||
"hosts": instance.data["anatomyData"]["app"],
|
||||
"hosts": instance.context.data["hostName"],
|
||||
"subsets": instance.data["subset"]
|
||||
}
|
||||
profile = filter_profiles(self.profiles, key_values,
|
||||
|
|
|
|||
|
|
@ -19,16 +19,16 @@
|
|||
"rules": {}
|
||||
},
|
||||
"viewer": {
|
||||
"viewerProcess": "sRGB"
|
||||
"viewerProcess": "sRGB (default)"
|
||||
},
|
||||
"baking": {
|
||||
"viewerProcess": "rec709"
|
||||
"viewerProcess": "rec709 (default)"
|
||||
},
|
||||
"workfile": {
|
||||
"colorManagement": "Nuke",
|
||||
"colorManagement": "OCIO",
|
||||
"OCIO_config": "nuke-default",
|
||||
"workingSpaceLUT": "linear",
|
||||
"monitorLut": "sRGB"
|
||||
"workingSpaceLUT": "scene_linear",
|
||||
"monitorLut": "sRGB (default)"
|
||||
},
|
||||
"nodes": {
|
||||
"requiredNodes": [
|
||||
|
|
@ -76,7 +76,7 @@
|
|||
{
|
||||
"type": "text",
|
||||
"name": "colorspace",
|
||||
"value": "linear"
|
||||
"value": "scene_linear"
|
||||
},
|
||||
{
|
||||
"type": "bool",
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
{
|
||||
"type": "text",
|
||||
"name": "colorspace",
|
||||
"value": "linear"
|
||||
"value": "scene_linear"
|
||||
},
|
||||
{
|
||||
"type": "bool",
|
||||
|
|
@ -177,7 +177,7 @@
|
|||
{
|
||||
"type": "text",
|
||||
"name": "colorspace",
|
||||
"value": "sRGB"
|
||||
"value": "texture_paint"
|
||||
},
|
||||
{
|
||||
"type": "bool",
|
||||
|
|
@ -193,7 +193,7 @@
|
|||
"inputs": [
|
||||
{
|
||||
"regex": "(beauty).*(?=.exr)",
|
||||
"colorspace": "linear"
|
||||
"colorspace": "scene_linear"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import logging
|
||||
import uuid
|
||||
|
||||
import ayon_api
|
||||
|
||||
|
|
@ -314,8 +315,21 @@ class LoaderController(BackendLoaderController, FrontendLoaderController):
|
|||
containers = self._host.get_containers()
|
||||
else:
|
||||
containers = self._host.ls()
|
||||
repre_ids = {c.get("representation") for c in containers}
|
||||
repre_ids.discard(None)
|
||||
repre_ids = set()
|
||||
for container in containers:
|
||||
repre_id = container.get("representation")
|
||||
# Ignore invalid representation ids.
|
||||
# - invalid representation ids may be available if e.g. is
|
||||
# opened scene from OpenPype whe 'ObjectId' was used instead
|
||||
# of 'uuid'.
|
||||
# NOTE: Server call would crash if there is any invalid id.
|
||||
# That would cause crash we won't get any information.
|
||||
try:
|
||||
uuid.UUID(repre_id)
|
||||
repre_ids.add(repre_id)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
product_ids = self._products_model.get_product_ids_by_repre_ids(
|
||||
project_name, repre_ids
|
||||
)
|
||||
|
|
|
|||
|
|
@ -77,7 +77,15 @@ def product_item_from_entity(
|
|||
product_attribs = product_entity["attrib"]
|
||||
group = product_attribs.get("productGroup")
|
||||
product_type = product_entity["productType"]
|
||||
product_type_item = product_type_items_by_name[product_type]
|
||||
product_type_item = product_type_items_by_name.get(product_type)
|
||||
# NOTE This is needed for cases when products were not created on server
|
||||
# using api functions. In that case product type item may not be
|
||||
# available and we need to create a default.
|
||||
if product_type_item is None:
|
||||
product_type_item = create_default_product_type_item(product_type)
|
||||
# Cache the item for future use
|
||||
product_type_items_by_name[product_type] = product_type_item
|
||||
|
||||
product_type_icon = product_type_item.icon
|
||||
|
||||
product_icon = {
|
||||
|
|
@ -117,6 +125,15 @@ def product_type_item_from_data(product_type_data):
|
|||
return ProductTypeItem(product_type_data["name"], icon, True)
|
||||
|
||||
|
||||
def create_default_product_type_item(product_type):
|
||||
icon = {
|
||||
"type": "awesome-font",
|
||||
"name": "fa.folder",
|
||||
"color": "#0091B2",
|
||||
}
|
||||
return ProductTypeItem(product_type, icon, True)
|
||||
|
||||
|
||||
class ProductsModel:
|
||||
"""Model for products, version and representation.
|
||||
|
||||
|
|
|
|||
|
|
@ -1457,7 +1457,7 @@ class BasePublisherController(AbstractPublisherController):
|
|||
"""
|
||||
|
||||
if self._log is None:
|
||||
self._log = logging.getLogget(self.__class__.__name__)
|
||||
self._log = logging.getLogger(self.__class__.__name__)
|
||||
return self._log
|
||||
|
||||
@property
|
||||
|
|
@ -1885,10 +1885,19 @@ class PublisherController(BasePublisherController):
|
|||
self._emit_event("plugins.refresh.finished")
|
||||
|
||||
def _collect_creator_items(self):
|
||||
return {
|
||||
identifier: CreatorItem.from_creator(creator)
|
||||
for identifier, creator in self._create_context.creators.items()
|
||||
}
|
||||
# TODO add crashed initialization of create plugins to report
|
||||
output = {}
|
||||
for identifier, creator in self._create_context.creators.items():
|
||||
try:
|
||||
output[identifier] = CreatorItem.from_creator(creator)
|
||||
except Exception:
|
||||
self.log.error(
|
||||
"Failed to create creator item for '%s'",
|
||||
identifier,
|
||||
exc_info=True
|
||||
)
|
||||
|
||||
return output
|
||||
|
||||
def _reset_instances(self):
|
||||
"""Reset create instances."""
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
from qtpy import QtWidgets, QtCore
|
||||
|
||||
from openpype import AYON_SERVER_ENABLED
|
||||
|
||||
from .border_label_widget import BorderedLabelWidget
|
||||
|
||||
from .card_view_widgets import InstanceCardView
|
||||
|
|
@ -35,7 +37,10 @@ class OverviewWidget(QtWidgets.QFrame):
|
|||
# --- Created Subsets/Instances ---
|
||||
# Common widget for creation and overview
|
||||
subset_views_widget = BorderedLabelWidget(
|
||||
"Subsets to publish", subset_content_widget
|
||||
"{} to publish".format(
|
||||
"Products" if AYON_SERVER_ENABLED else "Subsets"
|
||||
),
|
||||
subset_content_widget
|
||||
)
|
||||
|
||||
subset_view_cards = InstanceCardView(controller, subset_views_widget)
|
||||
|
|
|
|||
|
|
@ -210,7 +210,9 @@ class CreateBtn(PublishIconBtn):
|
|||
def __init__(self, parent=None):
|
||||
icon_path = get_icon_path("create")
|
||||
super(CreateBtn, self).__init__(icon_path, "Create", parent)
|
||||
self.setToolTip("Create new subset/s")
|
||||
self.setToolTip("Create new {}/s".format(
|
||||
"product" if AYON_SERVER_ENABLED else "subset"
|
||||
))
|
||||
self.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
|
||||
|
||||
|
|
@ -656,7 +658,11 @@ class TasksCombobox(QtWidgets.QComboBox):
|
|||
self._proxy_model.set_filter_empty(invalid)
|
||||
if invalid:
|
||||
self._set_is_valid(False)
|
||||
self.set_text("< One or more subsets require Task selected >")
|
||||
self.set_text(
|
||||
"< One or more {} require Task selected >".format(
|
||||
"products" if AYON_SERVER_ENABLED else "subsets"
|
||||
)
|
||||
)
|
||||
else:
|
||||
self.set_text(None)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring Pype version."""
|
||||
__version__ = "3.17.6-nightly.3"
|
||||
__version__ = "3.17.6"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[tool.poetry]
|
||||
name = "OpenPype"
|
||||
version = "3.17.5" # OpenPype
|
||||
version = "3.17.6" # OpenPype
|
||||
description = "Open VFX and Animation pipeline with support."
|
||||
authors = ["OpenPype Team <info@openpype.io>"]
|
||||
license = "MIT License"
|
||||
|
|
|
|||
|
|
@ -213,16 +213,16 @@ class ImageIOSettings(BaseSettingsModel):
|
|||
|
||||
DEFAULT_IMAGEIO_SETTINGS = {
|
||||
"viewer": {
|
||||
"viewerProcess": "sRGB"
|
||||
"viewerProcess": "sRGB (default)"
|
||||
},
|
||||
"baking": {
|
||||
"viewerProcess": "rec709"
|
||||
"viewerProcess": "rec709 (default)"
|
||||
},
|
||||
"workfile": {
|
||||
"color_management": "Nuke",
|
||||
"color_management": "OCIO",
|
||||
"native_ocio_config": "nuke-default",
|
||||
"working_space": "linear",
|
||||
"thumbnail_space": "sRGB",
|
||||
"working_space": "scene_linear",
|
||||
"thumbnail_space": "sRGB (default)",
|
||||
},
|
||||
"nodes": {
|
||||
"required_nodes": [
|
||||
|
|
@ -269,7 +269,7 @@ DEFAULT_IMAGEIO_SETTINGS = {
|
|||
{
|
||||
"type": "text",
|
||||
"name": "colorspace",
|
||||
"text": "linear"
|
||||
"text": "scene_linear"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
|
|
@ -321,7 +321,7 @@ DEFAULT_IMAGEIO_SETTINGS = {
|
|||
{
|
||||
"type": "text",
|
||||
"name": "colorspace",
|
||||
"text": "linear"
|
||||
"text": "scene_linear"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
|
|
@ -368,7 +368,7 @@ DEFAULT_IMAGEIO_SETTINGS = {
|
|||
{
|
||||
"type": "text",
|
||||
"name": "colorspace",
|
||||
"text": "sRGB"
|
||||
"text": "texture_paint"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
__version__ = "0.1.4"
|
||||
__version__ = "0.1.5"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue