Merge branch 'develop' into enhancement/AY-5648_Substance-work--publish-version-sync
2
.gitmodules
vendored
|
|
@ -1,3 +1,3 @@
|
|||
[submodule "client/ayon_core/hosts/unreal/integration"]
|
||||
path = client/ayon_core/hosts/unreal/integration
|
||||
path = server_addon/unreal/client/ayon_unreal/integration
|
||||
url = https://github.com/ynput/ayon-unreal-plugin.git
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ MOVED_ADDON_MILESTONE_VERSIONS = {
|
|||
"royalrender": VersionInfo(0, 2, 0),
|
||||
"substancepainter": VersionInfo(0, 2, 0),
|
||||
"houdini": VersionInfo(0, 3, 0),
|
||||
"unreal": VersionInfo(0, 2, 0),
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
from .addon import UnrealAddon
|
||||
|
||||
|
||||
__all__ = (
|
||||
"UnrealAddon",
|
||||
)
|
||||
|
|
@ -37,6 +37,7 @@ from .creator_plugins import (
|
|||
|
||||
# Changes of instances and context are send as tuple of 2 information
|
||||
UpdateData = collections.namedtuple("UpdateData", ["instance", "changes"])
|
||||
_NOT_SET = object()
|
||||
|
||||
|
||||
class UnavailableSharedData(Exception):
|
||||
|
|
@ -1401,6 +1402,11 @@ class CreateContext:
|
|||
self._current_folder_path = None
|
||||
self._current_task_name = None
|
||||
self._current_workfile_path = None
|
||||
self._current_project_settings = None
|
||||
|
||||
self._current_folder_entity = _NOT_SET
|
||||
self._current_task_entity = _NOT_SET
|
||||
self._current_task_type = _NOT_SET
|
||||
|
||||
self._current_project_anatomy = None
|
||||
|
||||
|
|
@ -1571,6 +1577,64 @@ class CreateContext:
|
|||
|
||||
return self._current_task_name
|
||||
|
||||
def get_current_task_type(self):
|
||||
"""Task type which was used as current context on context reset.
|
||||
|
||||
Returns:
|
||||
Union[str, None]: Task type.
|
||||
|
||||
"""
|
||||
if self._current_task_type is _NOT_SET:
|
||||
task_type = None
|
||||
task_entity = self.get_current_task_entity()
|
||||
if task_entity:
|
||||
task_type = task_entity["taskType"]
|
||||
self._current_task_type = task_type
|
||||
return self._current_task_type
|
||||
|
||||
def get_current_folder_entity(self):
|
||||
"""Folder entity for current context folder.
|
||||
|
||||
Returns:
|
||||
Union[dict[str, Any], None]: Folder entity.
|
||||
|
||||
"""
|
||||
if self._current_folder_entity is not _NOT_SET:
|
||||
return copy.deepcopy(self._current_folder_entity)
|
||||
folder_entity = None
|
||||
folder_path = self.get_current_folder_path()
|
||||
if folder_path:
|
||||
project_name = self.get_current_project_name()
|
||||
folder_entity = ayon_api.get_folder_by_path(
|
||||
project_name, folder_path
|
||||
)
|
||||
self._current_folder_entity = folder_entity
|
||||
return copy.deepcopy(self._current_folder_entity)
|
||||
|
||||
def get_current_task_entity(self):
|
||||
"""Task entity for current context task.
|
||||
|
||||
Returns:
|
||||
Union[dict[str, Any], None]: Task entity.
|
||||
|
||||
"""
|
||||
if self._current_task_entity is not _NOT_SET:
|
||||
return copy.deepcopy(self._current_task_entity)
|
||||
task_entity = None
|
||||
task_name = self.get_current_task_name()
|
||||
if task_name:
|
||||
folder_entity = self.get_current_folder_entity()
|
||||
if folder_entity:
|
||||
project_name = self.get_current_project_name()
|
||||
task_entity = ayon_api.get_task_by_name(
|
||||
project_name,
|
||||
folder_id=folder_entity["id"],
|
||||
task_name=task_name
|
||||
)
|
||||
self._current_task_entity = task_entity
|
||||
return copy.deepcopy(self._current_task_entity)
|
||||
|
||||
|
||||
def get_current_workfile_path(self):
|
||||
"""Workfile path which was opened on context reset.
|
||||
|
||||
|
|
@ -1592,6 +1656,12 @@ class CreateContext:
|
|||
self._current_project_name)
|
||||
return self._current_project_anatomy
|
||||
|
||||
def get_current_project_settings(self):
|
||||
if self._current_project_settings is None:
|
||||
self._current_project_settings = get_project_settings(
|
||||
self.get_current_project_name())
|
||||
return self._current_project_settings
|
||||
|
||||
@property
|
||||
def context_has_changed(self):
|
||||
"""Host context has changed.
|
||||
|
|
@ -1718,7 +1788,12 @@ class CreateContext:
|
|||
self._current_task_name = task_name
|
||||
self._current_workfile_path = workfile_path
|
||||
|
||||
self._current_folder_entity = _NOT_SET
|
||||
self._current_task_entity = _NOT_SET
|
||||
self._current_task_type = _NOT_SET
|
||||
|
||||
self._current_project_anatomy = None
|
||||
self._current_project_settings = None
|
||||
|
||||
def reset_plugins(self, discover_publish_plugins=True):
|
||||
"""Reload plugins.
|
||||
|
|
@ -1772,7 +1847,7 @@ class CreateContext:
|
|||
|
||||
def _reset_creator_plugins(self):
|
||||
# Prepare settings
|
||||
project_settings = get_project_settings(self.project_name)
|
||||
project_settings = self.get_current_project_settings()
|
||||
|
||||
# Discover and prepare creators
|
||||
creators = {}
|
||||
|
|
|
|||
|
|
@ -398,7 +398,11 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin):
|
|||
anatomy_data.update(folder_data)
|
||||
return
|
||||
|
||||
if instance.data.get("newAssetPublishing"):
|
||||
if (
|
||||
instance.data.get("newHierarchyIntegration")
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
or instance.data.get("newAssetPublishing")
|
||||
):
|
||||
hierarchy = instance.data["hierarchy"]
|
||||
anatomy_data["hierarchy"] = hierarchy
|
||||
|
||||
|
|
@ -416,7 +420,7 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin):
|
|||
"path": instance.data["folderPath"],
|
||||
# TODO get folder type from hierarchy
|
||||
# Using 'Shot' is current default behavior of editorial
|
||||
# (or 'newAssetPublishing') publishing.
|
||||
# (or 'newHierarchyIntegration') publishing.
|
||||
"type": "Shot",
|
||||
},
|
||||
})
|
||||
|
|
@ -439,15 +443,22 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin):
|
|||
if task_data:
|
||||
# Fill task data
|
||||
# - if we're in editorial, make sure the task type is filled
|
||||
if (
|
||||
not instance.data.get("newAssetPublishing")
|
||||
or task_data["type"]
|
||||
):
|
||||
new_hierarchy = (
|
||||
instance.data.get("newHierarchyIntegration")
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
or instance.data.get("newAssetPublishing")
|
||||
)
|
||||
if not new_hierarchy or task_data["type"]:
|
||||
anatomy_data["task"] = task_data
|
||||
return
|
||||
|
||||
# New hierarchy is not created, so we can only skip rest of the logic
|
||||
if not instance.data.get("newAssetPublishing"):
|
||||
new_hierarchy = (
|
||||
instance.data.get("newHierarchyIntegration")
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
or instance.data.get("newAssetPublishing")
|
||||
)
|
||||
if not new_hierarchy:
|
||||
return
|
||||
|
||||
# Try to find task data based on hierarchy context and folder path
|
||||
|
|
|
|||
|
|
@ -24,7 +24,11 @@ class ValidateFolderEntities(pyblish.api.InstancePlugin):
|
|||
if instance.data.get("folderEntity"):
|
||||
self.log.debug("Instance has set fodler entity in its data.")
|
||||
|
||||
elif instance.data.get("newAssetPublishing"):
|
||||
elif (
|
||||
instance.data.get("newHierarchyIntegration")
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
or instance.data.get("newAssetPublishing")
|
||||
):
|
||||
# skip if it is editorial
|
||||
self.log.debug("Editorial instance has no need to check...")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,131 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
width="2.93333in" height="3.06667in"
|
||||
viewBox="0 0 512 512"
|
||||
>
|
||||
<g>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="-0.0000027" x2="512" y1="256" y2="256">
|
||||
<stop offset="0" style="stop-color:#541f1b"/>
|
||||
<stop offset="1" style="stop-color:#a91b0d"/>
|
||||
</linearGradient>
|
||||
<circle cx="256" cy="256" fill="url(#SVGID_1_)" r="256"/>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="42.6666641" x2="469.3333435" y1="256.0005188" y2="256.0005188">
|
||||
<stop offset="0" style="stop-color:#a91b0d"/>
|
||||
<stop offset="1" style="stop-color:#541f1b"/>
|
||||
</linearGradient>
|
||||
<path d="M256,469.3338623c-117.6314697,0-213.3333435-95.7023926-213.3333435-213.3333435 c0-117.6314545,95.7018661-213.333313,213.3333435-213.333313c117.6357422,0,213.3333435,95.7018661,213.3333435,213.333313 C469.3333435,373.6314697,373.6357422,469.3338623,256,469.3338623z" fill="url(#SVGID_2_)"/>
|
||||
</g>
|
||||
<g transform="
|
||||
translate(80, 80)
|
||||
scale(0.4)
|
||||
">
|
||||
<path id="glasses"
|
||||
fill="#000"
|
||||
d="M 314.00,503.21
|
||||
C 307.04,504.43 299.79,504.67 294.04,509.39
|
||||
281.95,519.33 287.74,545.64 293.31,558.00
|
||||
305.34,584.70 329.18,602.65 359.00,603.00
|
||||
359.00,603.00 367.00,603.00 367.00,603.00
|
||||
390.85,602.89 413.70,588.04 421.25,565.00
|
||||
424.01,556.59 424.10,550.65 424.00,542.00
|
||||
423.57,505.69 375.59,507.27 350.00,504.83
|
||||
350.00,504.83 335.00,503.91 335.00,503.91
|
||||
335.00,503.91 325.00,503.21 325.00,503.21
|
||||
325.00,503.21 314.00,503.21 314.00,503.21 Z
|
||||
M 549.00,503.42
|
||||
C 549.00,503.42 536.00,504.09 536.00,504.09
|
||||
536.00,504.09 492.00,508.80 492.00,508.80
|
||||
482.54,510.63 471.18,514.25 464.32,521.30
|
||||
457.58,528.23 455.90,537.72 456.00,547.00
|
||||
456.35,577.84 481.12,602.64 512.00,603.00
|
||||
540.73,603.33 565.64,594.85 581.39,569.00
|
||||
587.72,558.59 592.85,544.28 593.00,532.00
|
||||
593.07,525.52 593.79,518.45 589.58,513.02
|
||||
581.71,502.84 560.89,501.98 549.00,503.42 Z" />
|
||||
<path id="head"
|
||||
fill="#000"
|
||||
d="M 196.00,310.00
|
||||
C 157.00,317.34 100.69,333.54 68.00,355.67
|
||||
49.93,367.90 32.97,386.48 45.31,409.00
|
||||
56.44,429.32 84.25,442.43 105.00,450.99
|
||||
105.00,450.99 124.00,458.31 124.00,458.31
|
||||
126.46,459.18 131.76,460.54 133.18,462.51
|
||||
135.43,465.18 132.87,477.62 133.18,482.00
|
||||
133.72,499.63 138.37,519.19 146.27,535.00
|
||||
146.27,535.00 160.00,558.00 160.00,558.00
|
||||
151.04,562.00 138.14,570.76 130.00,576.58
|
||||
106.10,593.66 85.83,612.72 66.73,635.00
|
||||
66.73,635.00 50.58,655.00 50.58,655.00
|
||||
46.85,659.79 43.49,662.96 42.00,669.00
|
||||
42.00,669.00 80.00,697.58 80.00,697.58
|
||||
80.00,697.58 134.00,738.63 134.00,738.63
|
||||
134.00,738.63 159.00,757.63 159.00,757.63
|
||||
159.00,757.63 168.69,766.17 168.69,766.17
|
||||
168.69,766.17 166.41,788.00 166.41,788.00
|
||||
166.41,788.00 159.00,839.00 159.00,839.00
|
||||
159.00,839.00 725.00,839.00 725.00,839.00
|
||||
725.00,839.00 715.00,787.00 715.00,787.00
|
||||
714.23,783.16 710.80,769.90 711.69,767.01
|
||||
712.77,763.46 718.06,760.08 721.00,757.87
|
||||
721.00,757.87 746.00,738.87 746.00,738.87
|
||||
746.00,738.87 805.00,693.88 805.00,693.88
|
||||
805.00,693.88 839.00,668.00 839.00,668.00
|
||||
830.81,653.76 810.68,631.16 799.04,619.00
|
||||
779.93,599.05 746.32,568.97 721.00,558.00
|
||||
736.80,531.67 747.05,511.60 746.88,480.00
|
||||
746.99,476.23 745.11,464.71 746.88,462.51
|
||||
748.19,460.62 752.74,459.42 755.00,458.67
|
||||
755.00,458.67 773.00,451.99 773.00,451.99
|
||||
789.48,445.21 809.73,435.70 823.00,423.83
|
||||
833.14,414.76 839.34,405.89 838.99,392.00
|
||||
838.62,377.75 825.69,365.33 815.00,357.38
|
||||
791.37,339.79 750.60,326.38 722.00,318.42
|
||||
722.00,318.42 698.00,312.65 698.00,312.65
|
||||
694.98,311.97 689.62,311.22 687.31,309.28
|
||||
684.49,306.90 682.00,295.04 680.86,291.00
|
||||
680.86,291.00 667.37,242.00 667.37,242.00
|
||||
655.66,196.99 634.72,129.32 611.40,90.00
|
||||
599.32,69.64 582.92,49.09 559.00,42.75
|
||||
551.96,40.89 546.17,40.92 539.00,41.00
|
||||
521.02,41.21 499.67,47.67 482.00,51.58
|
||||
468.77,54.50 455.47,55.86 442.00,56.82
|
||||
442.00,56.82 432.00,56.04 432.00,56.04
|
||||
400.44,54.66 371.26,41.33 343.00,41.00
|
||||
335.69,40.92 330.19,40.64 323.00,42.48
|
||||
298.44,48.76 281.88,68.37 268.95,89.00
|
||||
244.31,128.34 223.03,195.41 211.63,241.00
|
||||
211.63,241.00 199.63,288.00 199.63,288.00
|
||||
198.01,294.48 194.47,303.56 196.00,310.00 Z
|
||||
M 687.00,478.00
|
||||
C 686.85,494.73 678.57,518.97 665.00,529.32
|
||||
658.84,534.01 657.01,532.67 651.00,535.35
|
||||
644.22,538.36 638.88,543.45 635.40,550.00
|
||||
635.40,550.00 622.40,582.00 622.40,582.00
|
||||
622.40,582.00 611.14,608.00 611.14,608.00
|
||||
592.73,649.33 562.84,703.15 531.00,735.00
|
||||
531.00,735.00 518.00,747.71 518.00,747.71
|
||||
499.32,763.96 471.29,778.70 446.00,779.00
|
||||
399.64,779.54 368.31,757.20 338.87,723.00
|
||||
298.68,676.31 271.17,614.00 248.94,557.00
|
||||
245.41,547.94 240.81,540.99 232.00,536.33
|
||||
224.56,532.38 222.45,534.62 215.00,528.53
|
||||
201.42,517.45 194.00,495.06 194.00,478.00
|
||||
194.00,478.00 226.00,483.92 226.00,483.92
|
||||
226.00,483.92 305.00,494.83 305.00,494.83
|
||||
305.00,494.83 350.00,498.09 350.00,498.09
|
||||
350.00,498.09 391.00,500.00 391.00,500.00
|
||||
391.00,500.00 408.00,501.00 408.00,501.00
|
||||
408.00,501.00 473.00,501.00 473.00,501.00
|
||||
473.00,501.00 485.00,500.04 485.00,500.04
|
||||
485.00,500.04 501.00,500.04 501.00,500.04
|
||||
501.00,500.04 520.00,499.00 520.00,499.00
|
||||
520.00,499.00 531.00,498.04 531.00,498.04
|
||||
559.97,496.78 589.26,493.87 618.00,489.73
|
||||
618.00,489.73 662.00,482.58 662.00,482.58
|
||||
662.00,482.58 687.00,478.00 687.00,478.00 Z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.8 KiB |
|
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" ?><svg enable-background="new 0 0 512 512" id="Layer_1" version="1.1" viewBox="0 0 512 512" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><g><linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="-0.0000027" x2="512" y1="256" y2="256"><stop offset="0" style="stop-color:#00AEEE"/><stop offset="1" style="stop-color:#0095DA"/></linearGradient><circle cx="256" cy="256" fill="url(#SVGID_1_)" r="256"/><linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="42.6666641" x2="469.3333435" y1="256.0005188" y2="256.0005188"><stop offset="0" style="stop-color:#0095DA"/><stop offset="1" style="stop-color:#00AEEE"/></linearGradient><path d="M256,469.3338623c-117.6314697,0-213.3333435-95.7023926-213.3333435-213.3333435 c0-117.6314545,95.7018661-213.333313,213.3333435-213.333313c117.6357422,0,213.3333435,95.7018661,213.3333435,213.333313 C469.3333435,373.6314697,373.6357422,469.3338623,256,469.3338623z" fill="url(#SVGID_2_)"/></g><g><path d="M315.8906555,167.4933319h-28.3743896C287.5162659,154.4944,277.020813,144,264.0218811,144 c-13.0010834,0-23.4944153,10.4944-23.4944153,23.4933319h-28.3760071v40.6847992h103.7391968V167.4933319z" opacity="0.3"/><path d="M325.8906555,187.4895935v30.6885376H202.1504059v-30.6885376H164.354126V384h199.2911987V187.4895935 H325.8906555z M309.4405212,336.4693298l-7.0703735,7.0698853l-38.3712158-38.3712158l-38.3717346,38.3712158 l-7.0704041-7.0698853l38.3717346-38.3717346l-38.3717346-38.3717346l7.0704041-7.0698547l38.3717346,38.3711853 l38.3712158-38.3711853l7.0703735,7.0698547l-38.3717346,38.3717346L309.4405212,336.4693298z" opacity="0.3"/></g><g><path d="M307.8906555,159.4933319h-28.3743896C279.5162659,146.4944,269.020813,136,256.0218811,136 c-13.0010834,0-23.4944153,10.4944-23.4944153,23.4933319h-28.3760071v40.6847992h103.7391968V159.4933319z" fill="#FFFFFF"/><path d="M317.8906555,179.4895935v30.6885376H194.1504059v-30.6885376H156.354126V376h199.2911987V179.4895935 H317.8906555z M301.4405212,328.4693298l-7.0703735,7.0698853l-38.3712158-38.3712158l-38.3717346,38.3712158 l-7.0704041-7.0698853l38.3717346-38.3717346l-38.3717346-38.3717346l7.0704041-7.0698547l38.3717346,38.3711853 l38.3712158-38.3711853l7.0703735,7.0698547l-38.3717346,38.3717346L301.4405212,328.4693298z" fill="#FFFFFF"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 101 KiB |
|
|
@ -1,32 +0,0 @@
|
|||
<html>
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: #333;
|
||||
text-align: center;
|
||||
color: #ccc;
|
||||
margin-top: 200px;
|
||||
}
|
||||
h1 {
|
||||
font-family: "DejaVu Sans";
|
||||
font-size: 36px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
h3 {
|
||||
font-weight: normal;
|
||||
font-family: "DejaVu Sans";
|
||||
margin: 30px 10px;
|
||||
}
|
||||
em {
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<h1>Sign in to Ftrack was successful</h1>
|
||||
<h3>
|
||||
You signed in with username <em>{}</em>.
|
||||
</h3>
|
||||
<h3>
|
||||
You can close this window now.
|
||||
</h3>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -8,6 +8,7 @@ import tempfile
|
|||
import shutil
|
||||
import inspect
|
||||
from abc import ABCMeta, abstractmethod
|
||||
import re
|
||||
|
||||
import six
|
||||
import arrow
|
||||
|
|
@ -39,6 +40,7 @@ from ayon_core.pipeline.create.context import (
|
|||
)
|
||||
from ayon_core.pipeline.publish import get_publish_instance_label
|
||||
from ayon_core.tools.common_models import HierarchyModel
|
||||
from ayon_core.lib.profiles_filtering import filter_profiles
|
||||
|
||||
# Define constant for plugin orders offset
|
||||
PLUGIN_ORDER_OFFSET = 0.5
|
||||
|
|
@ -1686,6 +1688,15 @@ class PublisherController(BasePublisherController):
|
|||
"""Publish plugins."""
|
||||
return self._create_context.publish_plugins
|
||||
|
||||
def _get_current_project_settings(self):
|
||||
"""Current project settings.
|
||||
|
||||
Returns:
|
||||
dict
|
||||
"""
|
||||
|
||||
return self._create_context.get_current_project_settings()
|
||||
|
||||
# Hierarchy model
|
||||
def get_folder_items(self, project_name, sender=None):
|
||||
return self._hierarchy_model.get_folder_items(project_name, sender)
|
||||
|
|
@ -1827,8 +1838,13 @@ class PublisherController(BasePublisherController):
|
|||
def _collect_creator_items(self):
|
||||
# TODO add crashed initialization of create plugins to report
|
||||
output = {}
|
||||
allowed_creator_pattern = self._get_allowed_creators_pattern()
|
||||
for identifier, creator in self._create_context.creators.items():
|
||||
try:
|
||||
if (not self._is_label_allowed(
|
||||
creator.label, allowed_creator_pattern)):
|
||||
self.log.debug(f"{creator.label} not allowed for context")
|
||||
continue
|
||||
output[identifier] = CreatorItem.from_creator(creator)
|
||||
except Exception:
|
||||
self.log.error(
|
||||
|
|
@ -1839,6 +1855,60 @@ class PublisherController(BasePublisherController):
|
|||
|
||||
return output
|
||||
|
||||
def _get_allowed_creators_pattern(self):
|
||||
"""Provide regex pattern for configured creator labels in this context
|
||||
|
||||
If no profile matches current context, it shows all creators.
|
||||
Support usage of regular expressions for configured values.
|
||||
Returns:
|
||||
(re.Pattern)[optional]: None or regex compiled patterns
|
||||
into single one ('Render|Image.*')
|
||||
"""
|
||||
|
||||
task_type = self._create_context.get_current_task_type()
|
||||
project_settings = self._get_current_project_settings()
|
||||
|
||||
filter_creator_profiles = (
|
||||
project_settings
|
||||
["core"]
|
||||
["tools"]
|
||||
["creator"]
|
||||
["filter_creator_profiles"]
|
||||
)
|
||||
filtering_criteria = {
|
||||
"task_names": self.current_task_name,
|
||||
"task_types": task_type,
|
||||
"host_names": self._create_context.host_name
|
||||
}
|
||||
profile = filter_profiles(
|
||||
filter_creator_profiles,
|
||||
filtering_criteria,
|
||||
logger=self.log
|
||||
)
|
||||
|
||||
allowed_creator_pattern = None
|
||||
if profile:
|
||||
allowed_creator_labels = {
|
||||
label
|
||||
for label in profile["creator_labels"]
|
||||
if label
|
||||
}
|
||||
self.log.debug(f"Only allowed `{allowed_creator_labels}` creators")
|
||||
allowed_creator_pattern = (
|
||||
re.compile("|".join(allowed_creator_labels)))
|
||||
return allowed_creator_pattern
|
||||
|
||||
def _is_label_allowed(self, label, allowed_labels_regex):
|
||||
"""Implement regex support for allowed labels.
|
||||
|
||||
Args:
|
||||
label (str): Label of creator - shown in Publisher
|
||||
allowed_labels_regex (re.Pattern): compiled regular expression
|
||||
"""
|
||||
if not allowed_labels_regex:
|
||||
return True
|
||||
return bool(allowed_labels_regex.match(label))
|
||||
|
||||
def _reset_instances(self):
|
||||
"""Reset create instances."""
|
||||
if self._resetting_instances:
|
||||
|
|
|
|||
|
|
@ -35,6 +35,28 @@ class ProductNameProfile(BaseSettingsModel):
|
|||
template: str = SettingsField("", title="Template")
|
||||
|
||||
|
||||
class FilterCreatorProfile(BaseSettingsModel):
|
||||
"""Provide list of allowed Creator identifiers for context"""
|
||||
|
||||
_layout = "expanded"
|
||||
host_names: list[str] = SettingsField(
|
||||
default_factory=list, title="Host names"
|
||||
)
|
||||
task_types: list[str] = SettingsField(
|
||||
default_factory=list,
|
||||
title="Task types",
|
||||
enum_resolver=task_types_enum
|
||||
)
|
||||
task_names: list[str] = SettingsField(
|
||||
default_factory=list,
|
||||
title="Task names")
|
||||
creator_labels: list[str] = SettingsField(
|
||||
default_factory=list,
|
||||
title="Allowed Creator Labels",
|
||||
description="Copy creator label from Publisher, regex supported."
|
||||
)
|
||||
|
||||
|
||||
class CreatorToolModel(BaseSettingsModel):
|
||||
# TODO this was dynamic dictionary '{name: task_names}'
|
||||
product_types_smart_select: list[ProductTypeSmartSelectModel] = (
|
||||
|
|
@ -48,6 +70,13 @@ class CreatorToolModel(BaseSettingsModel):
|
|||
title="Product name profiles"
|
||||
)
|
||||
|
||||
filter_creator_profiles: list[FilterCreatorProfile] = SettingsField(
|
||||
default_factory=list,
|
||||
title="Filter creator profiles",
|
||||
description="Allowed list of creator labels that will be only shown if "
|
||||
"profile matches context."
|
||||
)
|
||||
|
||||
@validator("product_types_smart_select")
|
||||
def validate_unique_name(cls, value):
|
||||
ensure_unique_names(value)
|
||||
|
|
@ -420,7 +449,8 @@ DEFAULT_TOOLS_VALUES = {
|
|||
"tasks": [],
|
||||
"template": "SK_{folder[name]}{variant}"
|
||||
}
|
||||
]
|
||||
],
|
||||
"filter_creator_profiles": []
|
||||
},
|
||||
"Workfiles": {
|
||||
"workfile_template_profiles": [
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'aftereffects' version."""
|
||||
__version__ = "0.2.0"
|
||||
__version__ = "0.2.1"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'applications' version."""
|
||||
__version__ = "0.2.3"
|
||||
|
|
@ -152,7 +152,9 @@ class CollectTimelineInstances(pyblish.api.ContextPlugin):
|
|||
task["name"]: {"type": task["type"]}
|
||||
for task in self.add_tasks},
|
||||
"representations": [],
|
||||
"newAssetPublishing": True
|
||||
"newHierarchyIntegration": True,
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
"newAssetPublishing": True,
|
||||
})
|
||||
self.log.debug("__ inst_data: {}".format(pformat(inst_data)))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'flame' version."""
|
||||
__version__ = "0.2.0"
|
||||
__version__ = "0.2.1"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name = "flame"
|
||||
title = "Flame"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
|
||||
client_dir = "ayon_flame"
|
||||
|
||||
|
|
|
|||
|
|
@ -140,7 +140,9 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
|
|||
|
||||
# add all additional tags
|
||||
"tags": phiero.get_track_item_tags(track_item),
|
||||
"newAssetPublishing": True
|
||||
"newHierarchyIntegration": True,
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
"newAssetPublishing": True,
|
||||
})
|
||||
|
||||
# otio clip data
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'hiero' version."""
|
||||
__version__ = "0.2.1"
|
||||
__version__ = "0.2.2"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name = "hiero"
|
||||
title = "Hiero"
|
||||
version = "0.2.1"
|
||||
version = "0.2.2"
|
||||
client_dir = "ayon_hiero"
|
||||
|
||||
ayon_required_addons = {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'maya' version."""
|
||||
__version__ = "0.2.2"
|
||||
|
|
@ -101,6 +101,8 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
|
|||
"fps": context.data["fps"],
|
||||
"handleStart": handle_start,
|
||||
"handleEnd": handle_end,
|
||||
"newHierarchyIntegration": True,
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
"newAssetPublishing": True,
|
||||
"families": ["clip"],
|
||||
"productType": product_type,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'resolve' version."""
|
||||
__version__ = "0.2.0"
|
||||
__version__ = "0.2.1"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name = "resolve"
|
||||
title = "DaVinci Resolve"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
|
||||
client_dir = "ayon_resolve"
|
||||
|
||||
|
|
|
|||
|
|
@ -676,6 +676,8 @@ or updating already created. Publishing will create OTIO file.
|
|||
"shotName": shot_name,
|
||||
"variant": variant_name,
|
||||
"task": None,
|
||||
"newHierarchyIntegration": True,
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
"newAssetPublishing": True,
|
||||
"trackStartFrame": track_start_frame,
|
||||
"timelineOffset": timeline_offset,
|
||||
|
|
|
|||
|
|
@ -28,8 +28,12 @@ class CollectSequenceFrameData(
|
|||
return
|
||||
|
||||
# editorial would fail since they might not be in database yet
|
||||
new_folder_publishing = instance.data.get("newAssetPublishing")
|
||||
if new_folder_publishing:
|
||||
new_hierarchy = (
|
||||
instance.data.get("newHierarchyIntegration")
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
or instance.data.get("newAssetPublishing")
|
||||
)
|
||||
if new_hierarchy:
|
||||
self.log.debug("Instance is creating new folders. Skipping.")
|
||||
return
|
||||
|
||||
|
|
|
|||
|
|
@ -33,8 +33,12 @@ class ValidateFrameRange(OptionalPyblishPluginMixin,
|
|||
return
|
||||
|
||||
# editorial would fail since they might not be in database yet
|
||||
new_folder_publishing = instance.data.get("newAssetPublishing")
|
||||
if new_folder_publishing:
|
||||
new_hierarchy = (
|
||||
instance.data.get("newHierarchyIntegration")
|
||||
# Backwards compatible (Deprecated since 24/06/06)
|
||||
or instance.data.get("newAssetPublishing")
|
||||
)
|
||||
if new_hierarchy:
|
||||
self.log.debug("Instance is creating new folder. Skipping.")
|
||||
return
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'traypublisher' version."""
|
||||
__version__ = "0.2.2"
|
||||
__version__ = "0.2.3"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name = "traypublisher"
|
||||
title = "TrayPublisher"
|
||||
version = "0.2.2"
|
||||
version = "0.2.3"
|
||||
|
||||
client_dir = "ayon_traypublisher"
|
||||
|
||||
|
|
|
|||
10
server_addon/unreal/client/ayon_unreal/__init__.py
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
from .version import __version__
|
||||
from .addon import UNREAL_ADDON_ROOT, UnrealAddon
|
||||
|
||||
|
||||
__all__ = (
|
||||
"__version__",
|
||||
|
||||
"UNREAL_ADDON_ROOT",
|
||||
"UnrealAddon",
|
||||
)
|
||||
|
|
@ -2,16 +2,19 @@ import os
|
|||
import re
|
||||
from ayon_core.addon import AYONAddon, IHostAddon
|
||||
|
||||
UNREAL_ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
from .version import __version__
|
||||
|
||||
UNREAL_ADDON_ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
class UnrealAddon(AYONAddon, IHostAddon):
|
||||
name = "unreal"
|
||||
version = __version__
|
||||
host_name = "unreal"
|
||||
|
||||
def get_global_environments(self):
|
||||
return {
|
||||
"AYON_UNREAL_ROOT": UNREAL_ROOT_DIR,
|
||||
"AYON_UNREAL_ROOT": UNREAL_ADDON_ROOT,
|
||||
}
|
||||
|
||||
def add_implementation_envs(self, env, app):
|
||||
|
|
@ -40,11 +43,11 @@ class UnrealAddon(AYONAddon, IHostAddon):
|
|||
|
||||
ue_version = app.name.replace("-", ".")
|
||||
unreal_plugin_path = os.path.join(
|
||||
UNREAL_ROOT_DIR, "integration", "UE_{}".format(ue_version), "Ayon"
|
||||
UNREAL_ADDON_ROOT, "integration", "UE_{}".format(ue_version), "Ayon"
|
||||
)
|
||||
if not Path(unreal_plugin_path).exists():
|
||||
compatible_versions = get_compatible_integration(
|
||||
ue_version, Path(UNREAL_ROOT_DIR) / "integration"
|
||||
ue_version, Path(UNREAL_ADDON_ROOT) / "integration"
|
||||
)
|
||||
if compatible_versions:
|
||||
unreal_plugin_path = compatible_versions[-1] / "Ayon"
|
||||
|
|
@ -67,7 +70,7 @@ class UnrealAddon(AYONAddon, IHostAddon):
|
|||
if app.host_name != self.host_name:
|
||||
return []
|
||||
return [
|
||||
os.path.join(UNREAL_ROOT_DIR, "hooks")
|
||||
os.path.join(UNREAL_ADDON_ROOT, "hooks")
|
||||
]
|
||||
|
||||
def get_workfile_extensions(self):
|
||||
|
|
@ -21,8 +21,8 @@ from ayon_core.pipeline import (
|
|||
get_current_project_name,
|
||||
)
|
||||
from ayon_core.tools.utils import host_tools
|
||||
import ayon_core.hosts.unreal
|
||||
from ayon_core.host import HostBase, ILoadHost, IPublishHost
|
||||
from ayon_unreal import UNREAL_ADDON_ROOT
|
||||
|
||||
import unreal # noqa
|
||||
|
||||
|
|
@ -36,8 +36,7 @@ UNREAL_VERSION = semver.VersionInfo(
|
|||
*os.getenv("AYON_UNREAL_VERSION").split(".")
|
||||
)
|
||||
|
||||
HOST_DIR = os.path.dirname(os.path.abspath(ayon_core.hosts.unreal.__file__))
|
||||
PLUGINS_DIR = os.path.join(HOST_DIR, "plugins")
|
||||
PLUGINS_DIR = os.path.join(UNREAL_ADDON_ROOT, "plugins")
|
||||
PUBLISH_PATH = os.path.join(PLUGINS_DIR, "publish")
|
||||
LOAD_PATH = os.path.join(PLUGINS_DIR, "load")
|
||||
CREATE_PATH = os.path.join(PLUGINS_DIR, "create")
|
||||
|
|
@ -324,7 +323,7 @@ def show_tools_popup():
|
|||
|
||||
Popup will disappear on click or losing focus.
|
||||
"""
|
||||
from ayon_core.hosts.unreal.api import tools_ui
|
||||
from ayon_unreal.api import tools_ui
|
||||
|
||||
tools_ui.show_tools_popup()
|
||||
|
||||
|
|
@ -334,7 +333,7 @@ def show_tools_dialog():
|
|||
|
||||
Dialog will stay visible.
|
||||
"""
|
||||
from ayon_core.hosts.unreal.api import tools_ui
|
||||
from ayon_unreal.api import tools_ui
|
||||
|
||||
tools_ui.show_tools_dialog()
|
||||
|
||||
|
|
@ -4,8 +4,8 @@ import unreal
|
|||
|
||||
from ayon_core.settings import get_project_settings
|
||||
from ayon_core.pipeline import Anatomy
|
||||
from ayon_core.hosts.unreal.api import pipeline
|
||||
from ayon_core.tools.utils import show_message_dialog
|
||||
from ayon_unreal.api import pipeline
|
||||
|
||||
|
||||
queue = None
|
||||
|
|
@ -7,7 +7,7 @@ from ayon_core import (
|
|||
)
|
||||
from ayon_core.tools.utils import host_tools
|
||||
from ayon_core.tools.utils.lib import qt_app_context
|
||||
from ayon_core.hosts.unreal.api import rendering
|
||||
from ayon_unreal.api import rendering
|
||||
|
||||
|
||||
class ToolsBtnsWidget(QtWidgets.QWidget):
|
||||
|
|
@ -15,12 +15,12 @@ from ayon_applications import (
|
|||
LaunchTypes,
|
||||
)
|
||||
from ayon_core.pipeline.workfile import get_workfile_template_key
|
||||
import ayon_core.hosts.unreal.lib as unreal_lib
|
||||
from ayon_core.hosts.unreal.ue_workers import (
|
||||
import ayon_unreal.lib as unreal_lib
|
||||
from ayon_unreal.ue_workers import (
|
||||
UEProjectGenerationWorker,
|
||||
UEPluginInstallWorker
|
||||
)
|
||||
from ayon_core.hosts.unreal.ui import SplashScreen
|
||||
from ayon_unreal.ui import SplashScreen
|
||||
|
||||
|
||||
class UnrealPrelaunchHook(PreLaunchHook):
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
import unreal
|
||||
|
||||
from ayon_core.pipeline import CreatorError
|
||||
from ayon_core.hosts.unreal.api.pipeline import UNREAL_VERSION
|
||||
from ayon_core.hosts.unreal.api.plugin import (
|
||||
from ayon_unreal.api.pipeline import UNREAL_VERSION
|
||||
from ayon_unreal.api.plugin import (
|
||||
UnrealAssetCreator,
|
||||
)
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from ayon_core.hosts.unreal.api.plugin import (
|
||||
from ayon_unreal.api.plugin import (
|
||||
UnrealActorCreator,
|
||||
)
|
||||
|
||||
|
|
@ -2,10 +2,10 @@
|
|||
import unreal
|
||||
|
||||
from ayon_core.pipeline import CreatorError
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api.pipeline import (
|
||||
create_folder
|
||||
)
|
||||
from ayon_core.hosts.unreal.api.plugin import (
|
||||
from ayon_unreal.api.plugin import (
|
||||
UnrealAssetCreator
|
||||
)
|
||||
from ayon_core.lib import UILabelDef
|
||||
|
|
@ -3,12 +3,12 @@ from pathlib import Path
|
|||
|
||||
import unreal
|
||||
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api.pipeline import (
|
||||
UNREAL_VERSION,
|
||||
create_folder,
|
||||
get_subsequences,
|
||||
)
|
||||
from ayon_core.hosts.unreal.api.plugin import (
|
||||
from ayon_unreal.api.plugin import (
|
||||
UnrealAssetCreator
|
||||
)
|
||||
from ayon_core.lib import (
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from ayon_core.hosts.unreal.api.plugin import (
|
||||
from ayon_unreal.api.plugin import (
|
||||
UnrealAssetCreator,
|
||||
)
|
||||
|
||||
|
|
@ -4,7 +4,7 @@ from pathlib import Path
|
|||
import unreal
|
||||
|
||||
from ayon_core.pipeline import CreatorError
|
||||
from ayon_core.hosts.unreal.api.plugin import (
|
||||
from ayon_unreal.api.plugin import (
|
||||
UnrealAssetCreator,
|
||||
)
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import unreal
|
||||
|
||||
from ayon_core.hosts.unreal.api.tools_ui import qt_app_context
|
||||
from ayon_core.hosts.unreal.api.pipeline import delete_asset_if_unused
|
||||
from ayon_unreal.api.tools_ui import qt_app_context
|
||||
from ayon_unreal.api.pipeline import delete_asset_if_unused
|
||||
from ayon_core.pipeline import InventoryAction
|
||||
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import unreal
|
||||
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api.pipeline import (
|
||||
ls,
|
||||
replace_static_mesh_actors,
|
||||
replace_skeletal_mesh_actors,
|
||||
|
|
@ -6,8 +6,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api import pipeline as unreal_pipeline
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api import pipeline as unreal_pipeline
|
||||
import unreal # noqa
|
||||
|
||||
|
||||
|
|
@ -13,8 +13,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api import pipeline as unreal_pipeline
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api import pipeline as unreal_pipeline
|
||||
|
||||
|
||||
class AnimationFBXLoader(plugin.Loader):
|
||||
|
|
@ -16,8 +16,8 @@ from ayon_core.pipeline import (
|
|||
get_current_project_name,
|
||||
get_representation_path,
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
generate_sequence,
|
||||
set_sequence_hierarchy,
|
||||
create_container,
|
||||
|
|
@ -6,8 +6,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
AYON_ASSET_DIR,
|
||||
create_container,
|
||||
imprint,
|
||||
|
|
@ -27,8 +27,8 @@ from ayon_core.pipeline import (
|
|||
)
|
||||
from ayon_core.pipeline.context_tools import get_current_folder_entity
|
||||
from ayon_core.settings import get_current_project_settings
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
generate_sequence,
|
||||
set_sequence_hierarchy,
|
||||
create_container,
|
||||
|
|
@ -12,8 +12,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID,
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api import pipeline as upipeline
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api import pipeline as upipeline
|
||||
|
||||
|
||||
class ExistingLayoutLoader(plugin.Loader):
|
||||
|
|
@ -6,8 +6,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
AYON_ASSET_DIR,
|
||||
create_container,
|
||||
imprint,
|
||||
|
|
@ -6,8 +6,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
AYON_ASSET_DIR,
|
||||
create_container,
|
||||
imprint,
|
||||
|
|
@ -6,8 +6,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
AYON_ASSET_DIR,
|
||||
create_container,
|
||||
imprint,
|
||||
|
|
@ -6,8 +6,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api.pipeline import (
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api.pipeline import (
|
||||
AYON_ASSET_DIR,
|
||||
create_container,
|
||||
imprint,
|
||||
|
|
@ -7,8 +7,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api import pipeline as unreal_pipeline
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api import pipeline as unreal_pipeline
|
||||
import unreal # noqa
|
||||
|
||||
|
||||
|
|
@ -7,8 +7,8 @@ from ayon_core.pipeline import (
|
|||
get_representation_path,
|
||||
AYON_CONTAINER_ID
|
||||
)
|
||||
from ayon_core.hosts.unreal.api import plugin
|
||||
from ayon_core.hosts.unreal.api import pipeline as unreal_pipeline
|
||||
from ayon_unreal.api import plugin
|
||||
from ayon_unreal.api import pipeline as unreal_pipeline
|
||||
import unreal # noqa
|
||||
|
||||
|
||||
|
|
@ -5,7 +5,7 @@ import pyblish.api
|
|||
|
||||
from ayon_core.pipeline import get_current_project_name
|
||||
from ayon_core.pipeline import Anatomy
|
||||
from ayon_core.hosts.unreal.api import pipeline
|
||||
from ayon_unreal.api import pipeline
|
||||
|
||||
|
||||
class CollectRenderInstances(pyblish.api.InstancePlugin):
|
||||
|
|
@ -5,7 +5,7 @@ import os
|
|||
import unreal
|
||||
|
||||
from ayon_core.pipeline import publish
|
||||
from ayon_core.hosts.unreal.api.pipeline import UNREAL_VERSION
|
||||
from ayon_unreal.api.pipeline import UNREAL_VERSION
|
||||
|
||||
|
||||
class ExtractCamera(publish.Extractor):
|
||||
|
|
@ -11,7 +11,7 @@ from typing import List, Union
|
|||
|
||||
from qtpy import QtCore
|
||||
|
||||
import ayon_core.hosts.unreal.lib as ue_lib
|
||||
import ayon_unreal.lib as ue_lib
|
||||
from ayon_core.settings import get_project_settings
|
||||
|
||||
|
||||
3
server_addon/unreal/client/ayon_unreal/version.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON addon 'unreal' version."""
|
||||
__version__ = "0.2.0"
|
||||
|
|
@ -1,3 +1,10 @@
|
|||
name = "unreal"
|
||||
title = "Unreal"
|
||||
version = "0.1.0"
|
||||
version = "0.2.0"
|
||||
|
||||
client_dir = "ayon_unreal"
|
||||
|
||||
ayon_required_addons = {
|
||||
"core": ">0.3.2",
|
||||
}
|
||||
ayon_compatible_addons = {}
|
||||
|
|
|
|||