mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
252 lines
7.4 KiB
Python
252 lines
7.4 KiB
Python
"""Functions useful for delivery action or loader"""
|
|
import os
|
|
import shutil
|
|
import functools
|
|
import warnings
|
|
|
|
|
|
class DeliveryDeprecatedWarning(DeprecationWarning):
|
|
pass
|
|
|
|
|
|
def deprecated(new_destination):
|
|
"""Mark functions as deprecated.
|
|
|
|
It will result in a warning being emitted when the function is used.
|
|
"""
|
|
|
|
func = None
|
|
if callable(new_destination):
|
|
func = new_destination
|
|
new_destination = None
|
|
|
|
def _decorator(decorated_func):
|
|
if new_destination is None:
|
|
warning_message = (
|
|
" Please check content of deprecated function to figure out"
|
|
" possible replacement."
|
|
)
|
|
else:
|
|
warning_message = " Please replace your usage with '{}'.".format(
|
|
new_destination
|
|
)
|
|
|
|
@functools.wraps(decorated_func)
|
|
def wrapper(*args, **kwargs):
|
|
warnings.simplefilter("always", DeliveryDeprecatedWarning)
|
|
warnings.warn(
|
|
(
|
|
"Call to deprecated function '{}'"
|
|
"\nFunction was moved or removed.{}"
|
|
).format(decorated_func.__name__, warning_message),
|
|
category=DeliveryDeprecatedWarning,
|
|
stacklevel=4
|
|
)
|
|
return decorated_func(*args, **kwargs)
|
|
return wrapper
|
|
|
|
if func is None:
|
|
return _decorator
|
|
return _decorator(func)
|
|
|
|
|
|
@deprecated("openpype.lib.path_tools.collect_frames")
|
|
def collect_frames(files):
|
|
"""Returns dict of source path and its frame, if from sequence
|
|
|
|
Uses clique as most precise solution, used when anatomy template that
|
|
created files is not known.
|
|
|
|
Assumption is that frames are separated by '.', negative frames are not
|
|
allowed.
|
|
|
|
Args:
|
|
files(list) or (set with single value): list of source paths
|
|
|
|
Returns:
|
|
(dict): {'/asset/subset_v001.0001.png': '0001', ....}
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from .path_tools import collect_frames
|
|
|
|
return collect_frames(files)
|
|
|
|
|
|
@deprecated("openpype.lib.path_tools.format_file_size")
|
|
def sizeof_fmt(num, suffix=None):
|
|
"""Returns formatted string with size in appropriate unit
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from .path_tools import format_file_size
|
|
return format_file_size(num, suffix)
|
|
|
|
|
|
@deprecated("openpype.pipeline.load.get_representation_path_with_anatomy")
|
|
def path_from_representation(representation, anatomy):
|
|
"""Get representation path using representation document and anatomy.
|
|
|
|
Args:
|
|
representation (Dict[str, Any]): Representation document.
|
|
anatomy (Anatomy): Project anatomy.
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from openpype.pipeline.load import get_representation_path_with_anatomy
|
|
|
|
return get_representation_path_with_anatomy(representation, anatomy)
|
|
|
|
|
|
@deprecated
|
|
def copy_file(src_path, dst_path):
|
|
"""Hardlink file if possible(to save space), copy if not"""
|
|
from openpype.lib import create_hard_link # safer importing
|
|
|
|
if os.path.exists(dst_path):
|
|
return
|
|
try:
|
|
create_hard_link(
|
|
src_path,
|
|
dst_path
|
|
)
|
|
except OSError:
|
|
shutil.copyfile(src_path, dst_path)
|
|
|
|
|
|
@deprecated("openpype.pipeline.delivery.get_format_dict")
|
|
def get_format_dict(anatomy, location_path):
|
|
"""Returns replaced root values from user provider value.
|
|
|
|
Args:
|
|
anatomy (Anatomy)
|
|
location_path (str): user provided value
|
|
|
|
Returns:
|
|
(dict): prepared for formatting of a template
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from openpype.pipeline.delivery import get_format_dict
|
|
|
|
return get_format_dict(anatomy, location_path)
|
|
|
|
|
|
@deprecated("openpype.pipeline.delivery.check_destination_path")
|
|
def check_destination_path(repre_id,
|
|
anatomy, anatomy_data,
|
|
datetime_data, template_name):
|
|
""" Try to create destination path based on 'template_name'.
|
|
|
|
In the case that path cannot be filled, template contains unmatched
|
|
keys, provide error message to filter out repre later.
|
|
|
|
Args:
|
|
anatomy (Anatomy)
|
|
anatomy_data (dict): context to fill anatomy
|
|
datetime_data (dict): values with actual date
|
|
template_name (str): to pick correct delivery template
|
|
|
|
Returns:
|
|
(collections.defauldict): {"TYPE_OF_ERROR":"ERROR_DETAIL"}
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from openpype.pipeline.delivery import check_destination_path
|
|
|
|
return check_destination_path(
|
|
repre_id,
|
|
anatomy,
|
|
anatomy_data,
|
|
datetime_data,
|
|
template_name
|
|
)
|
|
|
|
|
|
@deprecated("openpype.pipeline.delivery.deliver_single_file")
|
|
def process_single_file(
|
|
src_path, repre, anatomy, template_name, anatomy_data, format_dict,
|
|
report_items, log
|
|
):
|
|
"""Copy single file to calculated path based on template
|
|
|
|
Args:
|
|
src_path(str): path of source representation file
|
|
_repre (dict): full repre, used only in process_sequence, here only
|
|
as to share same signature
|
|
anatomy (Anatomy)
|
|
template_name (string): user selected delivery template name
|
|
anatomy_data (dict): data from repre to fill anatomy with
|
|
format_dict (dict): root dictionary with names and values
|
|
report_items (collections.defaultdict): to return error messages
|
|
log (Logger): for log printing
|
|
|
|
Returns:
|
|
(collections.defaultdict , int)
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from openpype.pipeline.delivery import deliver_single_file
|
|
|
|
return deliver_single_file(
|
|
src_path, repre, anatomy, template_name, anatomy_data, format_dict,
|
|
report_items, log
|
|
)
|
|
|
|
|
|
@deprecated("openpype.pipeline.delivery.deliver_sequence")
|
|
def process_sequence(
|
|
src_path, repre, anatomy, template_name, anatomy_data, format_dict,
|
|
report_items, log
|
|
):
|
|
""" For Pype2(mainly - works in 3 too) where representation might not
|
|
contain files.
|
|
|
|
Uses listing physical files (not 'files' on repre as a)might not be
|
|
present, b)might not be reliable for representation and copying them.
|
|
|
|
TODO Should be refactored when files are sufficient to drive all
|
|
representations.
|
|
|
|
Args:
|
|
src_path(str): path of source representation file
|
|
repre (dict): full representation
|
|
anatomy (Anatomy)
|
|
template_name (string): user selected delivery template name
|
|
anatomy_data (dict): data from repre to fill anatomy with
|
|
format_dict (dict): root dictionary with names and values
|
|
report_items (collections.defaultdict): to return error messages
|
|
log (Logger): for log printing
|
|
|
|
Returns:
|
|
(collections.defaultdict , int)
|
|
|
|
Deprecated:
|
|
Function was moved to different location and will be removed
|
|
after 3.16.* release.
|
|
"""
|
|
|
|
from openpype.pipeline.delivery import deliver_sequence
|
|
|
|
return deliver_sequence(
|
|
src_path, repre, anatomy, template_name, anatomy_data, format_dict,
|
|
report_items, log
|
|
)
|