mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
Feature: Copy resources when downloading last workfile (#4944)
* Feature: Copy resources when downloading workfile * Fixed resources dir var name * Removing prints * Fix wrong resources path * Fixed workfile copied to resources folder + lint * Added comments * Handling resource already exists * linting * more linting * Bugfix: copy resources backslash in main path * linting * Using more continue statements, and more comments --------- Co-authored-by: Petr Kalis <petr.kalis@gmail.com>
This commit is contained in:
parent
f6b2ff764b
commit
1d02f46e15
1 changed files with 69 additions and 0 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import os
|
||||
import shutil
|
||||
import filecmp
|
||||
|
||||
from openpype.client.entities import get_representations
|
||||
from openpype.lib.applications import PreLaunchHook, LaunchTypes
|
||||
|
|
@ -194,3 +195,71 @@ class CopyLastPublishedWorkfile(PreLaunchHook):
|
|||
self.data["last_workfile_path"] = local_workfile_path
|
||||
# Keep source filepath for further path conformation
|
||||
self.data["source_filepath"] = last_published_workfile_path
|
||||
|
||||
# Get resources directory
|
||||
resources_dir = os.path.join(
|
||||
os.path.dirname(local_workfile_path), 'resources'
|
||||
)
|
||||
# Make resource directory if it doesn't exist
|
||||
if not os.path.exists(resources_dir):
|
||||
os.mkdir(resources_dir)
|
||||
|
||||
# Copy resources to the local resources directory
|
||||
for file in workfile_representation['files']:
|
||||
# Get resource main path
|
||||
resource_main_path = file["path"].replace(
|
||||
"{root[main]}", str(anatomy.roots["main"])
|
||||
)
|
||||
|
||||
# Only copy if the resource file exists, and it's not the workfile
|
||||
if (
|
||||
not os.path.exists(resource_main_path)
|
||||
and not resource_main_path != last_published_workfile_path
|
||||
):
|
||||
continue
|
||||
|
||||
# Get resource file basename
|
||||
resource_basename = os.path.basename(resource_main_path)
|
||||
|
||||
# Get resource path in workfile folder
|
||||
resource_work_path = os.path.join(
|
||||
resources_dir, resource_basename
|
||||
)
|
||||
if not os.path.exists(resource_work_path):
|
||||
continue
|
||||
|
||||
# Check if the resource file already exists
|
||||
# in the workfile resources folder,
|
||||
# and both files are the same.
|
||||
if filecmp.cmp(resource_main_path, resource_work_path):
|
||||
self.log.warning(
|
||||
'Resource "{}" already exists.'
|
||||
.format(resource_basename)
|
||||
)
|
||||
continue
|
||||
else:
|
||||
# Add `.old` to existing resource path
|
||||
resource_path_old = resource_work_path + '.old'
|
||||
if os.path.exists(resource_work_path + '.old'):
|
||||
for i in range(1, 100):
|
||||
p = resource_path_old + '%02d' % i
|
||||
if not os.path.exists(p):
|
||||
# Rename existing resource file to
|
||||
# `resource_name.old` + 2 digits
|
||||
shutil.move(resource_work_path, p)
|
||||
break
|
||||
else:
|
||||
self.log.warning(
|
||||
'There are a hundred old files for '
|
||||
'resource "{}". '
|
||||
'Perhaps is it time to clean up your '
|
||||
'resources folder'
|
||||
.format(resource_basename)
|
||||
)
|
||||
continue
|
||||
else:
|
||||
# Rename existing resource file to `resource_name.old`
|
||||
shutil.move(resource_work_path, resource_path_old)
|
||||
|
||||
# Copy resource file to workfile resources folder
|
||||
shutil.copy(resource_main_path, resources_dir)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue