Asset Pipeline v2 #145
@ -24,18 +24,18 @@ MATERIAL_SLOT_KEY = TRANSFER_DATA_KEYS[3]
|
|||||||
|
|
||||||
PUBLISH_TYPES = [
|
PUBLISH_TYPES = [
|
||||||
(
|
(
|
||||||
"ACTIVE",
|
"publish",
|
||||||
"Active",
|
"Active",
|
||||||
"Publish a new active version that will become the latest published version",
|
"Publish a new active version that will become the latest published version",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"STAGE",
|
"staged",
|
||||||
"Staged",
|
"Staged",
|
||||||
"""Publish a staged version that will replace the last active version as the Push/Pull target.
|
"""Publish a staged version that will replace the last active version as the Push/Pull target.
|
||||||
Used for internal asset pipeline use only""",
|
Used for internal asset pipeline use only""",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"REVIEW",
|
"review",
|
||||||
"Review",
|
"Review",
|
||||||
"Test the results that will be published in the review area, will not be used as Push/Pull target",
|
"Test the results that will be published in the review area, will not be used as Push/Pull target",
|
||||||
),
|
),
|
||||||
|
@ -96,28 +96,40 @@ def merge_task_layer(
|
|||||||
asset_suffix.remove_suffix_from_hierarchy(local_col)
|
asset_suffix.remove_suffix_from_hierarchy(local_col)
|
||||||
|
|
||||||
|
|
||||||
def find_published_file_version(file):
|
def find_file_version(file):
|
||||||
return int(file.name.split(".")[1].replace("v", ""))
|
return int(file.name.split(".")[1].replace("v", ""))
|
||||||
|
|
||||||
|
|
||||||
def get_next_published_file(current_file: Path):
|
def get_next_published_file(current_file: Path, publish_type="publish"):
|
||||||
last_publish = find_published_file(current_file)
|
last_publish = find_published(current_file, publish_type)
|
||||||
new_version_number = find_published_file_version(last_publish) + 1
|
base_name = current_file.name.split(".")[0]
|
||||||
|
publish_dir = current_file.parent.joinpath(publish_type)
|
||||||
|
if not last_publish:
|
||||||
|
new_version_number = 1
|
||||||
|
|
||||||
|
else:
|
||||||
|
new_version_number = find_file_version(last_publish) + 1
|
||||||
new_version = "{0:0=3d}".format(new_version_number)
|
new_version = "{0:0=3d}".format(new_version_number)
|
||||||
return last_publish.parent.joinpath(
|
return publish_dir.joinpath(base_name + f".v" + new_version + ".blend")
|
||||||
last_publish.name.split(".v")[0] + f".v" + new_version + ".blend"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def find_published_file(current_file: Path):
|
def find_published(current_file: Path, publish_type="publish"):
|
||||||
publish_dir = current_file.parent.joinpath("publish")
|
publish_dir = current_file.parent.joinpath(publish_type)
|
||||||
if not publish_dir.exists():
|
if not publish_dir.exists():
|
||||||
return
|
return
|
||||||
published_files = list(current_file.parent.joinpath("publish").glob('*.blend'))
|
published_files = list(publish_dir.glob('*.blend'))
|
||||||
published_files.sort(key=find_published_file_version)
|
published_files.sort(key=find_file_version)
|
||||||
|
if published_files:
|
||||||
return published_files[-1]
|
return published_files[-1]
|
||||||
|
|
||||||
|
|
||||||
|
def find_sync_target(current_file: Path):
|
||||||
|
latest_staged = find_published(current_file, publish_type="staged")
|
||||||
|
if latest_staged:
|
||||||
|
return latest_staged
|
||||||
|
return find_published(current_file, publish_type="publish")
|
||||||
|
|
||||||
|
|
||||||
def import_data_from_lib(
|
def import_data_from_lib(
|
||||||
libpath: Path,
|
libpath: Path,
|
||||||
data_category: str,
|
data_category: str,
|
||||||
|
@ -95,7 +95,7 @@ class ASSETPIPE_OT_sync_with_publish(bpy.types.Operator):
|
|||||||
self.report({'ERROR'}, "Current File Name doesn't contain valid task layer")
|
self.report({'ERROR'}, "Current File Name doesn't contain valid task layer")
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
pub_file = core.find_published_file(current_file)
|
pub_file = core.find_sync_target(current_file)
|
||||||
pub_file_path = pub_file.__str__()
|
pub_file_path = pub_file.__str__()
|
||||||
|
|
||||||
if self.pull:
|
if self.pull:
|
||||||
@ -144,12 +144,19 @@ class ASSETPIPE_OT_publish_new_version(bpy.types.Operator):
|
|||||||
bl_description = """Create a new Published Version in the Publish Area"""
|
bl_description = """Create a new Published Version in the Publish Area"""
|
||||||
|
|
||||||
publish_types: bpy.props.EnumProperty(
|
publish_types: bpy.props.EnumProperty(
|
||||||
name="Transfer Data Owner",
|
name="Type",
|
||||||
items=constants.PUBLISH_TYPES,
|
items=constants.PUBLISH_TYPES,
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO use published types to publish to different folders
|
# TODO use published types to publish to different folders
|
||||||
|
|
||||||
|
def invoke(self, context: bpy.types.Context, event: bpy.types.Event):
|
||||||
|
return context.window_manager.invoke_props_dialog(self, width=400)
|
||||||
|
|
||||||
|
def draw(self, context: bpy.types.Context):
|
||||||
|
layout = self.layout
|
||||||
|
layout.prop(self, "publish_types")
|
||||||
|
|
||||||
def execute(self, context: bpy.types.Context):
|
def execute(self, context: bpy.types.Context):
|
||||||
if bpy.data.is_dirty:
|
if bpy.data.is_dirty:
|
||||||
self.report(
|
self.report(
|
||||||
@ -158,7 +165,7 @@ class ASSETPIPE_OT_publish_new_version(bpy.types.Operator):
|
|||||||
)
|
)
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
current_file = Path(bpy.data.filepath)
|
current_file = Path(bpy.data.filepath)
|
||||||
new_file_path = core.get_next_published_file(current_file)
|
new_file_path = core.get_next_published_file(current_file, self.publish_types)
|
||||||
bpy.ops.wm.save_as_mainfile(filepath=new_file_path.__str__(), copy=True)
|
bpy.ops.wm.save_as_mainfile(filepath=new_file_path.__str__(), copy=True)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user