diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f3fd658cc..eaf288373f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,29 +1,46 @@ # Changelog -## [3.9.0-nightly.1](https://github.com/pypeclub/OpenPype/tree/HEAD) +## [3.9.0-nightly.2](https://github.com/pypeclub/OpenPype/tree/HEAD) [Full Changelog](https://github.com/pypeclub/OpenPype/compare/3.8.2...HEAD) +**Deprecated:** + +- Loader: Remove default family states for hosts from code [\#2706](https://github.com/pypeclub/OpenPype/pull/2706) + ### 📖 Documentation - documentation: add example to `repack-version` command [\#2669](https://github.com/pypeclub/OpenPype/pull/2669) - Update docusaurus [\#2639](https://github.com/pypeclub/OpenPype/pull/2639) - Documentation: Fixed relative links [\#2621](https://github.com/pypeclub/OpenPype/pull/2621) +**🆕 New features** + +- General: Store settings by OpenPype version [\#2570](https://github.com/pypeclub/OpenPype/pull/2570) + **🚀 Enhancements** +- Project Manager: Disable add task, add asset and save button when not in a project [\#2727](https://github.com/pypeclub/OpenPype/pull/2727) +- Nuke: prerender with review knob [\#2691](https://github.com/pypeclub/OpenPype/pull/2691) - Maya configurable unit validator [\#2680](https://github.com/pypeclub/OpenPype/pull/2680) - Ftrack: Sync description to assets [\#2670](https://github.com/pypeclub/OpenPype/pull/2670) - Houdini: Moved to OpenPype [\#2658](https://github.com/pypeclub/OpenPype/pull/2658) - Maya: Move implementation to OpenPype [\#2649](https://github.com/pypeclub/OpenPype/pull/2649) - General: FFmpeg conversion also check attribute string length [\#2635](https://github.com/pypeclub/OpenPype/pull/2635) +- Global: adding studio name/code to anatomy template formatting data [\#2630](https://github.com/pypeclub/OpenPype/pull/2630) - Houdini: Load Arnold .ass procedurals into Houdini [\#2606](https://github.com/pypeclub/OpenPype/pull/2606) - Houdini: Implement Arnold .ass standin extraction from Houdini \(also support .ass.gz\) [\#2603](https://github.com/pypeclub/OpenPype/pull/2603) - New Publisher: New features and preparations for new standalone publisher [\#2556](https://github.com/pypeclub/OpenPype/pull/2556) **🐛 Bug fixes** +- TVPaint: Set objectName with members [\#2725](https://github.com/pypeclub/OpenPype/pull/2725) +- General: Don't use 'objectName' from loaded references [\#2715](https://github.com/pypeclub/OpenPype/pull/2715) +- Settings: Studio Project anatomy is queried using right keys [\#2711](https://github.com/pypeclub/OpenPype/pull/2711) +- Local Settings: Additional applications don't break UI [\#2710](https://github.com/pypeclub/OpenPype/pull/2710) +- Houdini: Fix refactor of Houdini host move for CreateArnoldAss [\#2704](https://github.com/pypeclub/OpenPype/pull/2704) - LookAssigner: Fix imports after moving code to OpenPype repository [\#2701](https://github.com/pypeclub/OpenPype/pull/2701) +- Multiple hosts: unify menu style across hosts [\#2693](https://github.com/pypeclub/OpenPype/pull/2693) - Maya Redshift fixes [\#2692](https://github.com/pypeclub/OpenPype/pull/2692) - Maya: fix fps validation popup [\#2685](https://github.com/pypeclub/OpenPype/pull/2685) - Houdini Explicitly collect correct frame name even in case of single frame render when `frameStart` is provided [\#2676](https://github.com/pypeclub/OpenPype/pull/2676) @@ -34,6 +51,8 @@ **Merged pull requests:** +- General: Fix loading of unused chars in xml format [\#2729](https://github.com/pypeclub/OpenPype/pull/2729) +- TVPaint: Plugin build without dependencies [\#2705](https://github.com/pypeclub/OpenPype/pull/2705) - Webpublisher: Photoshop create a beauty png [\#2689](https://github.com/pypeclub/OpenPype/pull/2689) - Ftrack: Hierarchical attributes are queried properly [\#2682](https://github.com/pypeclub/OpenPype/pull/2682) - Fix python install in docker for centos7 [\#2664](https://github.com/pypeclub/OpenPype/pull/2664) @@ -42,7 +61,6 @@ - General: Show applications without integration in project [\#2656](https://github.com/pypeclub/OpenPype/pull/2656) - Maya: cleanup duplicate rendersetup code [\#2642](https://github.com/pypeclub/OpenPype/pull/2642) - Deadline: Be able to pass Mongo url to job [\#2616](https://github.com/pypeclub/OpenPype/pull/2616) -- Fix - safer pulling of task name for webpublishing from PS [\#2613](https://github.com/pypeclub/OpenPype/pull/2613) ## [3.8.2](https://github.com/pypeclub/OpenPype/tree/3.8.2) (2022-02-07) @@ -55,7 +73,6 @@ **🚀 Enhancements** - TVPaint: Image loaders also work on review family [\#2638](https://github.com/pypeclub/OpenPype/pull/2638) -- Global: adding studio name/code to anatomy template formatting data [\#2630](https://github.com/pypeclub/OpenPype/pull/2630) - General: Project backup tools [\#2629](https://github.com/pypeclub/OpenPype/pull/2629) - nuke: adding clear button to write nodes [\#2627](https://github.com/pypeclub/OpenPype/pull/2627) - Ftrack: Family to Asset type mapping is in settings [\#2602](https://github.com/pypeclub/OpenPype/pull/2602) @@ -70,6 +87,7 @@ - Docker: enhance dockerfiles with metadata, fix pyenv initialization [\#2647](https://github.com/pypeclub/OpenPype/pull/2647) - WebPublisher: fix instance duplicates [\#2641](https://github.com/pypeclub/OpenPype/pull/2641) +- Fix - safer pulling of task name for webpublishing from PS [\#2613](https://github.com/pypeclub/OpenPype/pull/2613) ## [3.8.1](https://github.com/pypeclub/OpenPype/tree/3.8.1) (2022-02-01) @@ -78,7 +96,6 @@ **🚀 Enhancements** - Webpublisher: Thumbnail extractor [\#2600](https://github.com/pypeclub/OpenPype/pull/2600) -- Loader: Allow to toggle default family filters between "include" or "exclude" filtering [\#2541](https://github.com/pypeclub/OpenPype/pull/2541) **🐛 Bug fixes** @@ -100,25 +117,11 @@ [Full Changelog](https://github.com/pypeclub/OpenPype/compare/CI/3.8.0-nightly.7...3.8.0) -### 📖 Documentation - -- Variable in docs renamed to proper name [\#2546](https://github.com/pypeclub/OpenPype/pull/2546) - -**🆕 New features** - -- General: Store settings by OpenPype version [\#2570](https://github.com/pypeclub/OpenPype/pull/2570) -- Flame: extracting segments with trans-coding [\#2547](https://github.com/pypeclub/OpenPype/pull/2547) -- Maya : V-Ray Proxy - load all ABC files via proxy [\#2544](https://github.com/pypeclub/OpenPype/pull/2544) -- Maya to Unreal: Extended static mesh workflow [\#2537](https://github.com/pypeclub/OpenPype/pull/2537) - **🚀 Enhancements** - Webpublisher: Moved error at the beginning of the log [\#2559](https://github.com/pypeclub/OpenPype/pull/2559) - Ftrack: Use ApplicationManager to get DJV path [\#2558](https://github.com/pypeclub/OpenPype/pull/2558) - Webpublisher: Added endpoint to reprocess batch through UI [\#2555](https://github.com/pypeclub/OpenPype/pull/2555) -- Settings: PathInput strip passed string [\#2550](https://github.com/pypeclub/OpenPype/pull/2550) -- Global: Exctract Review anatomy fill data with output name [\#2548](https://github.com/pypeclub/OpenPype/pull/2548) -- Cosmetics: Clean up some cosmetics / typos [\#2542](https://github.com/pypeclub/OpenPype/pull/2542) **🐛 Bug fixes** @@ -127,15 +130,6 @@ - Ftrack: Delete action revision [\#2563](https://github.com/pypeclub/OpenPype/pull/2563) - Webpublisher: ftrack shows incorrect user names [\#2560](https://github.com/pypeclub/OpenPype/pull/2560) - General: Do not validate version if build does not support it [\#2557](https://github.com/pypeclub/OpenPype/pull/2557) -- Webpublisher: Fixed progress reporting [\#2553](https://github.com/pypeclub/OpenPype/pull/2553) -- Fix Maya AssProxyLoader version switch [\#2551](https://github.com/pypeclub/OpenPype/pull/2551) -- General: Fix install thread in igniter [\#2549](https://github.com/pypeclub/OpenPype/pull/2549) - -**Merged pull requests:** - -- AfterEffects: Move implementation to OpenPype [\#2543](https://github.com/pypeclub/OpenPype/pull/2543) -- Maya: Remove Maya Look Assigner check on startup [\#2540](https://github.com/pypeclub/OpenPype/pull/2540) -- build\(deps\): bump shelljs from 0.8.4 to 0.8.5 in /website [\#2538](https://github.com/pypeclub/OpenPype/pull/2538) ## [3.7.0](https://github.com/pypeclub/OpenPype/tree/3.7.0) (2022-01-04) diff --git a/openpype/hosts/flame/api/pipeline.py b/openpype/hosts/flame/api/pipeline.py index 30c70b491b..11380d4f58 100644 --- a/openpype/hosts/flame/api/pipeline.py +++ b/openpype/hosts/flame/api/pipeline.py @@ -28,18 +28,6 @@ log = Logger.get_logger(__name__) def install(): - # Disable all families except for the ones we explicitly want to see - family_states = [ - "imagesequence", - "render2d", - "plate", - "render", - "mov", - "clip" - ] - avalon.data["familiesStateDefault"] = False - avalon.data["familiesStateToggled"] = family_states - pyblish.register_host("flame") pyblish.register_plugin_path(PUBLISH_PATH) diff --git a/openpype/hosts/fusion/api/pipeline.py b/openpype/hosts/fusion/api/pipeline.py index 6b16339e53..606eb633c0 100644 --- a/openpype/hosts/fusion/api/pipeline.py +++ b/openpype/hosts/fusion/api/pipeline.py @@ -31,13 +31,6 @@ def install(): """ - # Disable all families except for the ones we explicitly want to see - family_states = ["imagesequence", - "camera", - "pointcache"] - avalon.data["familiesStateDefault"] = False - avalon.data["familiesStateToggled"] = family_states - log.info("openpype.hosts.fusion installed") pyblish.register_host("fusion") diff --git a/openpype/hosts/hiero/api/pipeline.py b/openpype/hosts/hiero/api/pipeline.py index d52cb68ba7..cbcaf23994 100644 --- a/openpype/hosts/hiero/api/pipeline.py +++ b/openpype/hosts/hiero/api/pipeline.py @@ -51,16 +51,6 @@ def install(): # register callback for switching publishable pyblish.register_callback("instanceToggled", on_pyblish_instance_toggled) - # Disable all families except for the ones we explicitly want to see - family_states = [ - "write", - "review", - "plate" - ] - - avalon.data["familiesStateDefault"] = False - avalon.data["familiesStateToggled"] = family_states - # install menu menu.menu_install() diff --git a/openpype/hosts/houdini/api/pipeline.py b/openpype/hosts/houdini/api/pipeline.py index 4054d5991f..c3dbdc5ef5 100644 --- a/openpype/hosts/houdini/api/pipeline.py +++ b/openpype/hosts/houdini/api/pipeline.py @@ -60,12 +60,6 @@ def install(): "instanceToggled", on_pyblish_instance_toggled ) - log.info("Setting default family states for loader..") - avalon.api.data["familiesStateToggled"] = [ - "imagesequence", - "review" - ] - self._has_been_setup = True # add houdini vendor packages hou_pythonpath = os.path.join(os.path.dirname(HOST_DIR), "vendor") diff --git a/openpype/hosts/houdini/plugins/create/create_arnold_ass.py b/openpype/hosts/houdini/plugins/create/create_arnold_ass.py index 2af9a71cdd..72088e43b0 100644 --- a/openpype/hosts/houdini/plugins/create/create_arnold_ass.py +++ b/openpype/hosts/houdini/plugins/create/create_arnold_ass.py @@ -1,7 +1,7 @@ -from avalon import houdini +from openpype.hosts.houdini.api import plugin -class CreateArnoldAss(houdini.Creator): +class CreateArnoldAss(plugin.Creator): """Arnold .ass Archive""" label = "Arnold ASS" diff --git a/openpype/hosts/maya/api/pipeline.py b/openpype/hosts/maya/api/pipeline.py index 476ceb840b..14e8f4eb45 100644 --- a/openpype/hosts/maya/api/pipeline.py +++ b/openpype/hosts/maya/api/pipeline.py @@ -76,9 +76,6 @@ def install(): avalon.api.on("taskChanged", on_task_changed) avalon.api.on("before.workfile.save", before_workfile_save) - log.info("Setting default family states for loader..") - avalon.api.data["familiesStateToggled"] = ["imagesequence"] - def _set_project(): """Sets the maya project to the current Session's work directory. diff --git a/openpype/hosts/nuke/api/pipeline.py b/openpype/hosts/nuke/api/pipeline.py index fbbc39f98f..8c6c9ca55b 100644 --- a/openpype/hosts/nuke/api/pipeline.py +++ b/openpype/hosts/nuke/api/pipeline.py @@ -108,17 +108,6 @@ def install(): pyblish.api.register_callback( "instanceToggled", on_pyblish_instance_toggled) workfile_settings = WorkfileSettings() - # Disable all families except for the ones we explicitly want to see - family_states = [ - "write", - "review", - "nukenodes", - "model", - "gizmo" - ] - - avalon.api.data["familiesStateDefault"] = False - avalon.api.data["familiesStateToggled"] = family_states # Set context settings. nuke.addOnCreate(workfile_settings.set_context_settings, nodeClass="Root") diff --git a/openpype/hosts/resolve/api/pipeline.py b/openpype/hosts/resolve/api/pipeline.py index 8b7e2a6c6a..2dc5136c8a 100644 --- a/openpype/hosts/resolve/api/pipeline.py +++ b/openpype/hosts/resolve/api/pipeline.py @@ -35,18 +35,6 @@ def install(): """ from .. import get_resolve_module - # Disable all families except for the ones we explicitly want to see - family_states = [ - "imagesequence", - "render2d", - "plate", - "render", - "mov", - "clip" - ] - avalon.data["familiesStateDefault"] = False - avalon.data["familiesStateToggled"] = family_states - log.info("openpype.hosts.resolve installed") pyblish.register_host("resolve") diff --git a/openpype/hosts/tvpaint/api/pipeline.py b/openpype/hosts/tvpaint/api/pipeline.py index 6b4632e2f2..74eb41892c 100644 --- a/openpype/hosts/tvpaint/api/pipeline.py +++ b/openpype/hosts/tvpaint/api/pipeline.py @@ -377,7 +377,15 @@ def _write_instances(*args, **kwargs): def ls(): - return get_workfile_metadata(SECTION_NAME_CONTAINERS) + output = get_workfile_metadata(SECTION_NAME_CONTAINERS) + if output: + for item in output: + if "objectName" not in item and "members" in item: + members = item["members"] + if isinstance(members, list): + members = "|".join(members) + item["objectName"] = members + return output def on_instance_toggle(instance, old_value, new_value): diff --git a/openpype/lib/transcoding.py b/openpype/lib/transcoding.py index 36f6858a78..e89fa6331e 100644 --- a/openpype/lib/transcoding.py +++ b/openpype/lib/transcoding.py @@ -30,6 +30,9 @@ INT_TAGS = { "deep", "subimages", } + +XML_CHAR_REF_REGEX_HEX = re.compile(r"&#x?[0-9a-fA-F]+;") + # Regex to parse array attributes ARRAY_TYPE_REGEX = re.compile(r"^(int|float|string)\[\d+\]$") @@ -191,6 +194,17 @@ def parse_oiio_xml_output(xml_string, logger=None): if not xml_string: return output + # Fix values with ampresand (lazy fix) + # - oiiotool exports invalid xml which ElementTree can't handle + # e.g. "" + # WARNING: this will affect even valid character entities. If you need + # those values correctly, this must take care of valid character ranges. + # See https://github.com/pypeclub/OpenPype/pull/2729 + matches = XML_CHAR_REF_REGEX_HEX.findall(xml_string) + for match in matches: + new_value = match.replace("&", "&") + xml_string = xml_string.replace(match, new_value) + if logger is None: logger = logging.getLogger("OIIO-xml-parse") diff --git a/openpype/plugins/publish/collect_scene_loaded_versions.py b/openpype/plugins/publish/collect_scene_loaded_versions.py index c26b322df2..d8119846c6 100644 --- a/openpype/plugins/publish/collect_scene_loaded_versions.py +++ b/openpype/plugins/publish/collect_scene_loaded_versions.py @@ -45,7 +45,6 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): # NOTE: # may have more then one representation that are same version version = { - "objectName": con["objectName"], # container node name "subsetName": con["name"], "representation": io.ObjectId(con["representation"]), "version": version_by_repr[con["representation"]], # _id diff --git a/openpype/settings/defaults/system_settings/modules.json b/openpype/settings/defaults/system_settings/modules.json index b31dd6856c..d74269922f 100644 --- a/openpype/settings/defaults/system_settings/modules.json +++ b/openpype/settings/defaults/system_settings/modules.json @@ -13,7 +13,7 @@ } }, "ftrack": { - "enabled": true, + "enabled": false, "ftrack_server": "", "ftrack_actions_path": { "windows": [], diff --git a/openpype/tools/project_manager/project_manager/window.py b/openpype/tools/project_manager/project_manager/window.py index 0298d565a5..bdf32c7415 100644 --- a/openpype/tools/project_manager/project_manager/window.py +++ b/openpype/tools/project_manager/project_manager/window.py @@ -108,7 +108,9 @@ class ProjectManagerWindow(QtWidgets.QWidget): helper_btns_widget ) add_asset_btn.setObjectName("IconBtn") + add_asset_btn.setEnabled(False) add_task_btn.setObjectName("IconBtn") + add_task_btn.setEnabled(False) helper_btns_layout = QtWidgets.QHBoxLayout(helper_btns_widget) helper_btns_layout.setContentsMargins(0, 0, 0, 0) @@ -138,6 +140,7 @@ class ProjectManagerWindow(QtWidgets.QWidget): message_label = QtWidgets.QLabel(buttons_widget) save_btn = QtWidgets.QPushButton("Save", buttons_widget) + save_btn.setEnabled(False) buttons_layout = QtWidgets.QHBoxLayout(buttons_widget) buttons_layout.setContentsMargins(0, 0, 0, 0) @@ -173,6 +176,7 @@ class ProjectManagerWindow(QtWidgets.QWidget): self._create_project_btn = create_project_btn self._create_folders_btn = create_folders_btn self._remove_projects_btn = remove_projects_btn + self._save_btn = save_btn self._add_asset_btn = add_asset_btn self._add_task_btn = add_task_btn @@ -183,6 +187,9 @@ class ProjectManagerWindow(QtWidgets.QWidget): def _set_project(self, project_name=None): self._create_folders_btn.setEnabled(project_name is not None) self._remove_projects_btn.setEnabled(project_name is not None) + self._add_asset_btn.setEnabled(project_name is not None) + self._add_task_btn.setEnabled(project_name is not None) + self._save_btn.setEnabled(project_name is not None) self._project_proxy_model.set_filter_default(project_name is not None) self.hierarchy_view.set_project(project_name) diff --git a/openpype/version.py b/openpype/version.py index 4a161b9017..4bc6d165d4 100644 --- a/openpype/version.py +++ b/openpype/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring Pype version.""" -__version__ = "3.9.0-nightly.1" +__version__ = "3.9.0-nightly.2" diff --git a/pyproject.toml b/pyproject.toml index 9794d39e2b..fb0ba8e655 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "OpenPype" -version = "3.9.0-nightly.1" # OpenPype +version = "3.9.0-nightly.2" # OpenPype description = "Open VFX and Animation pipeline with support." authors = ["OpenPype Team "] license = "MIT License"