Blender Kitsu: New Assset Tagging System #286

Merged
Nick Alberelli merged 8 commits from TinyNick/blender-studio-pipeline:feature/asset-tagging into main 2024-04-30 21:43:07 +02:00
4 changed files with 94 additions and 4 deletions
Showing only changes of commit c9979f52ca - Show all commits

View File

@ -26,6 +26,7 @@ import bpy
from .. import bkglobals, cache, util, prefs
from ..logger import LoggerFactory
from ..types import TaskType, AssetType
from ..context import core as context_core
logger = LoggerFactory.getLogger()
@ -240,11 +241,57 @@ class KITSU_OT_con_detect_context(bpy.types.Operator):
return mapping[key]
class KITSU_OT_con_set_asset(bpy.types.Operator):
bl_idname = "kitsu.con_set_asset"
bl_label = "Set Kitsu Asset"
bl_description = (
"Mark the current file & target collection as an Asset on Kitsu Server "
"Assets marked with this method will be automatically loaded by the "
"Shot Builder, if the Asset is casted to the buider's target shot"
)
@classmethod
def poll(cls, context):
kitsu_props = context.scene.kitsu
if bpy.data.filepath == "":
cls.poll_message_set("Blend file must be saved")
return False
if not context_core.is_asset_context():
cls.poll_message_set("Kitsu Context panel must be set to 'Asset'")
return False
if kitsu_props.asset_type_active_name == "":
cls.poll_message_set("Asset Type must be set")
return False
if kitsu_props.asset_active_name == "":
cls.poll_message_set("Asset must be set")
return False
if not kitsu_props.asset_col:
cls.poll_message_set("Asset Collection must be set")
return False
return True
def execute(self, context):
blender_asset = context.scene.kitsu.asset_col
kitsu_asset = cache.asset_active_get()
if not kitsu_asset:
self.report({"ERROR"}, "Failed to find active Kitsu Asset")
return {"CANCELLED"}
kitsu_asset.set_asset_path(
bpy.data.filepath, blender_asset.name, blender_asset.rna_type.name
)
self.report(
{"INFO"}, f"Kitsu Asset '{kitsu_asset.name}' set to Collection '{blender_asset.name}'"
)
return {"FINISHED"}
# ---------REGISTER ----------.
classes = [
KITSU_OT_con_productions_load,
KITSU_OT_con_detect_context,
KITSU_OT_con_set_asset,
]

View File

@ -22,9 +22,7 @@ import bpy
from ..context import core as context_core
from .. import cache, prefs, ui, bkglobals
from ..context.ops import (
KITSU_OT_con_detect_context,
)
from ..context.ops import KITSU_OT_con_detect_context, KITSU_OT_con_set_asset
class KITSU_PT_vi3d_context(bpy.types.Panel):
@ -113,6 +111,34 @@ class KITSU_PT_vi3d_context(bpy.types.Panel):
context_core.draw_task_type_selector(context, col)
class KITSU_PT_set_asset(bpy.types.Panel):
"""
Panel in 3dview that enables browsing through backend data structure.
Thought of as a menu to setup a context by selecting active production
active sequence, shot etc.
"""
bl_category = "Kitsu"
bl_label = "Set Asset"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_options = {"DEFAULT_CLOSED"}
bl_order = 25
bl_parent_id = "KITSU_PT_vi3d_context"
@classmethod
def poll(cls, context):
return context_core.is_asset_context()
def draw(self, context):
layout = self.layout
layout.use_property_split = True
layout.use_property_decorate = False
col = layout.column()
col.prop(context.scene.kitsu, "asset_col")
col.operator(KITSU_OT_con_set_asset.bl_idname)
class KITSU_PT_comp_context(KITSU_PT_vi3d_context):
bl_space_type = "NODE_EDITOR"
@ -124,7 +150,12 @@ class KITSU_PT_editorial_context(KITSU_PT_vi3d_context):
# ---------REGISTER ----------.
# Classes that inherit from another need to be registered first for some reason.
classes = [KITSU_PT_comp_context, KITSU_PT_editorial_context, KITSU_PT_vi3d_context]
classes = [
KITSU_PT_comp_context,
KITSU_PT_editorial_context,
KITSU_PT_vi3d_context,
KITSU_PT_set_asset,
]
def register():

View File

@ -279,6 +279,8 @@ class KITSU_property_group_scene(bpy.types.PropertyGroup):
NOTE: It would be nice to have searchable enums instead of doing all this work manually.
"""
asset_col: bpy.props.PointerProperty(type=bpy.types.Collection, name="Collection")
###########
# Sequence
###########

View File

@ -735,6 +735,16 @@ class Asset(Entity):
asset_dict = gazu.asset.get_asset(asset_id)
return cls.from_dict(asset_dict)
def update(self) -> Asset:
gazu.asset.update_asset_data(asdict(self))
return self
def set_asset_path(self, asset_path: str, asset_name: str, asset_type: str):
self.data["asset_path"] = asset_path
self.data["asset_name"] = asset_name
self.data["asset_type"] = asset_type
self.update()
def get_all_task_types(self) -> List[TaskType]:
return [TaskType.from_dict(t) for t in gazu.task.all_task_types_for_asset(asdict(self))]