From ad1763a483531365c0e0f1f25a169867f0082460 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 24 May 2023 21:05:31 +0800 Subject: [PATCH 01/32] delivery action add renamed frame number --- openpype/pipeline/delivery.py | 15 ++++++++++++--- openpype/plugins/load/delivery.py | 8 ++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 500f54040a..39d49070df 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -176,7 +176,8 @@ def deliver_sequence( anatomy_data, format_dict, report_items, - log + log, + frame_offset=0 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. @@ -298,10 +299,18 @@ def deliver_sequence( src = os.path.normpath( os.path.join(dir_path, src_file_name) ) + dsp_index = int(index) + frame_offset + if dsp_index < 0: + msg = "Frame has a smaller number than Frame Offset" + report_items[msg].append(src_file_name) + log.warning("{} <{}>".format(msg, context)) + return report_items, 0 - dst_padding = dst_collection.format("{padding}") % index + dst_padding = dst_collection.format("{padding}") % dsp_index dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - log.debug("Copying single: {} -> {}".format(src, dst)) + dst = os.path.normpath( + os.path.join(delivery_folder, dst) + ) _copy_file(src, dst) uploaded += 1 diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index d1d5659118..dcb9f094fc 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -88,6 +88,9 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): template_label.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor)) template_label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + frame_offset_value = QtWidgets.QSpinBox() + frame_offset_value.setMinimum(-99) + root_line_edit = QtWidgets.QLineEdit() repre_checkboxes_layout = QtWidgets.QFormLayout() @@ -111,6 +114,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): input_layout.addRow("Selected representations", selected_label) input_layout.addRow("Delivery template", dropdown) input_layout.addRow("Template value", template_label) + input_layout.addRow("Frame Offset", frame_offset_value) input_layout.addRow("Root", root_line_edit) input_layout.addRow("Representations", repre_checkboxes_layout) @@ -138,6 +142,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.selected_label = selected_label self.template_label = template_label self.dropdown = dropdown + self.frame_offset_value = frame_offset_value self.root_line_edit = root_line_edit self.progress_bar = progress_bar self.text_area = text_area @@ -165,6 +170,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): datetime_data = get_datetime_data() template_name = self.dropdown.currentText() format_dict = get_format_dict(self.anatomy, self.root_line_edit.text()) + frame_offset = self.frame_offset_value.value() for repre in self._representations: if repre["name"] not in selected_repres: continue @@ -217,7 +223,9 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if not frame: new_report_items, uploaded = deliver_single_file(*args) else: + args.append(frame_offset) new_report_items, uploaded = deliver_sequence(*args) + print(frame_offset) report_items.update(new_report_items) self._update_progress(uploaded) From ca9d3862816826c6d6abc235b31f6f8d76feb265 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 24 May 2023 21:11:19 +0800 Subject: [PATCH 02/32] remove print function --- openpype/plugins/load/delivery.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index dcb9f094fc..54315ce4f7 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -225,7 +225,6 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): else: args.append(frame_offset) new_report_items, uploaded = deliver_sequence(*args) - print(frame_offset) report_items.update(new_report_items) self._update_progress(uploaded) From d6b22badd29c5b15ff3ba2e022f941aacd8ef930 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 2 Jun 2023 15:15:32 +0800 Subject: [PATCH 03/32] add renumber frame button --- openpype/pipeline/delivery.py | 40 +++++++++++++++++++++---------- openpype/plugins/load/delivery.py | 9 ++++++- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 39d49070df..606c926a8d 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -177,6 +177,7 @@ def deliver_sequence( format_dict, report_items, log, + renumber_frame=False, frame_offset=0 ): """ For Pype2(mainly - works in 3 too) where representation might not @@ -299,19 +300,34 @@ def deliver_sequence( src = os.path.normpath( os.path.join(dir_path, src_file_name) ) - dsp_index = int(index) + frame_offset - if dsp_index < 0: - msg = "Frame has a smaller number than Frame Offset" - report_items[msg].append(src_file_name) - log.warning("{} <{}>".format(msg, context)) - return report_items, 0 - dst_padding = dst_collection.format("{padding}") % dsp_index - dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - dst = os.path.normpath( - os.path.join(delivery_folder, dst) - ) - _copy_file(src, dst) + if renumber_frame: + first_index = src_collection.indexes[0] + dsp_index = (int(index) - first_index) + 1 + dst_padding = dst_collection.format("{padding}") % dsp_index + dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + dst = os.path.normpath( + os.path.join(delivery_folder, dst) + ) + + _copy_file(src, dst) + + else: + dsp_index = int(index) + frame_offset + if dsp_index < 0: + msg = "Frame has a smaller number than Frame Offset" + report_items[msg].append(src_file_name) + log.warning("{} <{}>".format(msg, context)) + return report_items, 0 + + dst_padding = dst_collection.format("{padding}") % dsp_index + dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + dst = os.path.normpath( + os.path.join(delivery_folder, dst) + ) + + _copy_file(src, dst) + uploaded += 1 return report_items, uploaded diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 54315ce4f7..68cfb23681 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -1,4 +1,5 @@ import copy +import math from collections import defaultdict from qtpy import QtWidgets, QtCore, QtGui @@ -88,8 +89,10 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): template_label.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor)) template_label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + renumber_frame = QtWidgets.QCheckBox() + frame_offset_value = QtWidgets.QSpinBox() - frame_offset_value.setMinimum(-99) + frame_offset_value.setMinimum(-(1<<32)//2) root_line_edit = QtWidgets.QLineEdit() @@ -115,6 +118,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): input_layout.addRow("Delivery template", dropdown) input_layout.addRow("Template value", template_label) input_layout.addRow("Frame Offset", frame_offset_value) + input_layout.addRow("Renumber Frame", renumber_frame) input_layout.addRow("Root", root_line_edit) input_layout.addRow("Representations", repre_checkboxes_layout) @@ -143,6 +147,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.template_label = template_label self.dropdown = dropdown self.frame_offset_value = frame_offset_value + self.renumber_frame = renumber_frame self.root_line_edit = root_line_edit self.progress_bar = progress_bar self.text_area = text_area @@ -170,6 +175,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): datetime_data = get_datetime_data() template_name = self.dropdown.currentText() format_dict = get_format_dict(self.anatomy, self.root_line_edit.text()) + renumber_frame = self.renumber_frame.isChecked() frame_offset = self.frame_offset_value.value() for repre in self._representations: if repre["name"] not in selected_repres: @@ -223,6 +229,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if not frame: new_report_items, uploaded = deliver_single_file(*args) else: + args.append(renumber_frame) args.append(frame_offset) new_report_items, uploaded = deliver_sequence(*args) report_items.update(new_report_items) From 199be9fb72619453459bfa1420ad70ceed40bfa1 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 2 Jun 2023 15:17:06 +0800 Subject: [PATCH 04/32] hound fix --- openpype/plugins/load/delivery.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 68cfb23681..f8acc85cf9 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -1,5 +1,4 @@ import copy -import math from collections import defaultdict from qtpy import QtWidgets, QtCore, QtGui @@ -92,7 +91,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): renumber_frame = QtWidgets.QCheckBox() frame_offset_value = QtWidgets.QSpinBox() - frame_offset_value.setMinimum(-(1<<32)//2) + frame_offset_value.setMinimum(-(1 << 32) // 2) root_line_edit = QtWidgets.QLineEdit() From 89070dc8e34a7351158253161fb66f47fc302c36 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 6 Jun 2023 18:11:55 +0800 Subject: [PATCH 05/32] renumber first frame option --- openpype/pipeline/delivery.py | 23 +++++++++-------------- openpype/plugins/load/delivery.py | 17 ++++++++++------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 606c926a8d..eb28db26b9 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -178,7 +178,7 @@ def deliver_sequence( report_items, log, renumber_frame=False, - frame_offset=0 + re_frame_value=0 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. @@ -302,20 +302,9 @@ def deliver_sequence( ) if renumber_frame: - first_index = src_collection.indexes[0] - dsp_index = (int(index) - first_index) + 1 - dst_padding = dst_collection.format("{padding}") % dsp_index - dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - dst = os.path.normpath( - os.path.join(delivery_folder, dst) - ) - - _copy_file(src, dst) - - else: - dsp_index = int(index) + frame_offset + dsp_index = (re_frame_value - int(index)) + 1 if dsp_index < 0: - msg = "Frame has a smaller number than Frame Offset" + msg = "Renumber frame has a smaller number than original frame" report_items[msg].append(src_file_name) log.warning("{} <{}>".format(msg, context)) return report_items, 0 @@ -328,6 +317,12 @@ def deliver_sequence( _copy_file(src, dst) + else: + dst_padding = dst_collection.format("{padding}") % index + dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + log.debug("Copying single: {} -> {}".format(src, dst)) + _copy_file(src, dst) + uploaded += 1 return report_items, uploaded diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index f8acc85cf9..826b4ad95c 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -90,8 +90,8 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): renumber_frame = QtWidgets.QCheckBox() - frame_offset_value = QtWidgets.QSpinBox() - frame_offset_value.setMinimum(-(1 << 32) // 2) + renumber_frame_value = QtWidgets.QSpinBox() + renumber_frame_value.setMinimum(-(1 << 32) // 2) root_line_edit = QtWidgets.QLineEdit() @@ -116,8 +116,8 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): input_layout.addRow("Selected representations", selected_label) input_layout.addRow("Delivery template", dropdown) input_layout.addRow("Template value", template_label) - input_layout.addRow("Frame Offset", frame_offset_value) input_layout.addRow("Renumber Frame", renumber_frame) + input_layout.addRow("Renumber start frame", renumber_frame_value) input_layout.addRow("Root", root_line_edit) input_layout.addRow("Representations", repre_checkboxes_layout) @@ -145,7 +145,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.selected_label = selected_label self.template_label = template_label self.dropdown = dropdown - self.frame_offset_value = frame_offset_value + self.renumber_frame_value = renumber_frame_value self.renumber_frame = renumber_frame self.root_line_edit = root_line_edit self.progress_bar = progress_bar @@ -175,7 +175,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): template_name = self.dropdown.currentText() format_dict = get_format_dict(self.anatomy, self.root_line_edit.text()) renumber_frame = self.renumber_frame.isChecked() - frame_offset = self.frame_offset_value.value() + frame_offset = self.renumber_frame_value.value() for repre in self._representations: if repre["name"] not in selected_repres: continue @@ -228,8 +228,11 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if not frame: new_report_items, uploaded = deliver_single_file(*args) else: - args.append(renumber_frame) - args.append(frame_offset) + optional_args = [ + renumber_frame, + frame_offset + ] + args.extend(optional_args) new_report_items, uploaded = deliver_sequence(*args) report_items.update(new_report_items) self._update_progress(uploaded) From 6926ebd546ca396c5591f27a85c61096979688a8 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 6 Jun 2023 18:17:41 +0800 Subject: [PATCH 06/32] add msg --- openpype/pipeline/delivery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index eb28db26b9..383959c3f8 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -304,7 +304,7 @@ def deliver_sequence( if renumber_frame: dsp_index = (re_frame_value - int(index)) + 1 if dsp_index < 0: - msg = "Renumber frame has a smaller number than original frame" + msg = "Renumber frame has a smaller number than original frame" #noqa report_items[msg].append(src_file_name) log.warning("{} <{}>".format(msg, context)) return report_items, 0 From 2994018817d447943a1c941b096b2953158c31d8 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 6 Jun 2023 18:19:14 +0800 Subject: [PATCH 07/32] hound fix --- openpype/pipeline/delivery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 383959c3f8..0df03bf8f8 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -304,7 +304,7 @@ def deliver_sequence( if renumber_frame: dsp_index = (re_frame_value - int(index)) + 1 if dsp_index < 0: - msg = "Renumber frame has a smaller number than original frame" #noqa + msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) log.warning("{} <{}>".format(msg, context)) return report_items, 0 From 8030ee9c71fcbad57802aff9f8296569e8c00d4d Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 8 Jun 2023 19:05:21 +0800 Subject: [PATCH 08/32] update indexes for dst_collections --- openpype/pipeline/delivery.py | 56 +++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 0df03bf8f8..3b030855b1 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -282,10 +282,26 @@ def deliver_sequence( delivery_folder = os.path.dirname(delivery_path) dst_head, dst_tail = delivery_path.split(frame_indicator) dst_padding = src_collection.padding + dsp_indexes = set() + if renumber_frame: + for idx in src_collection.indexes: + dsp_list = [] + dsp_idx = (re_frame_value - int(idx)) + 1 + if dsp_idx < 0: + msg = "Renumber frame has a smaller number than original frame" # noqa + report_items[msg].append(dsp_idx) + log.warning("{} <{}>".format(msg, context)) + return report_items, 0 + dsp_list.append(dsp_idx) + dsp_indexes.add(dsp_list) + else: + dsp_indexes = set([idx for idx in src_collection.indexes]) + dst_collection = clique.Collection( head=dst_head, tail=dst_tail, - padding=dst_padding + padding=dst_padding, + indexes=dsp_indexes ) if not os.path.exists(delivery_folder): @@ -294,32 +310,34 @@ def deliver_sequence( src_head = src_collection.head src_tail = src_collection.tail uploaded = 0 - for index in src_collection.indexes: - src_padding = src_collection.format("{padding}") % index - src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) - src = os.path.normpath( - os.path.join(dir_path, src_file_name) - ) - - if renumber_frame: - dsp_index = (re_frame_value - int(index)) + 1 - if dsp_index < 0: - msg = "Renumber frame has a smaller number than original frame" # noqa - report_items[msg].append(src_file_name) - log.warning("{} <{}>".format(msg, context)) - return report_items, 0 - - dst_padding = dst_collection.format("{padding}") % dsp_index + if renumber_frame: + for (src_idx, dst_idx) in zip( + src_collection.indexes, dst_collection.indexes): + src_padding = src_collection.format("{padding}") % src_idx + src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) + src = os.path.normpath( + os.path.join(dir_path, src_file_name) + ) + dst_padding = dst_collection.format("{padding}") % dst_idx dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) dst = os.path.normpath( os.path.join(delivery_folder, dst) ) - + log.debug("Copying single: {} -> {}".format(src, dst)) _copy_file(src, dst) + else: + for index in src_collection.indexes: + src_padding = src_collection.format("{padding}") % index + src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) + src = os.path.normpath( + os.path.join(dir_path, src_file_name) + ) - else: dst_padding = dst_collection.format("{padding}") % index dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + dst = os.path.normpath( + os.path.join(delivery_folder, dst) + ) log.debug("Copying single: {} -> {}".format(src, dst)) _copy_file(src, dst) From 95a4a60fd2632496f501b8971ca24743fdc35afe Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 8 Jun 2023 19:07:37 +0800 Subject: [PATCH 09/32] hound fix --- openpype/pipeline/delivery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 3b030855b1..74fe205aa3 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -311,8 +311,8 @@ def deliver_sequence( src_tail = src_collection.tail uploaded = 0 if renumber_frame: - for (src_idx, dst_idx) in zip( - src_collection.indexes, dst_collection.indexes): + for (src_idx, dst_idx) in zip(src_collection.indexes, + dst_collection.indexes): src_padding = src_collection.format("{padding}") % src_idx src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) src = os.path.normpath( From 4576a6fee630d3bc9df494ef08302cb53ad32b85 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 13 Jun 2023 00:38:48 +0800 Subject: [PATCH 10/32] clean up the pipeline script --- openpype/pipeline/delivery.py | 62 +++++++++++++---------------------- 1 file changed, 22 insertions(+), 40 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 74fe205aa3..2edfec19b2 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -177,8 +177,8 @@ def deliver_sequence( format_dict, report_items, log, - renumber_frame=False, - re_frame_value=0 + renumber_frame=True, + re_frame_value=12 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. @@ -282,26 +282,10 @@ def deliver_sequence( delivery_folder = os.path.dirname(delivery_path) dst_head, dst_tail = delivery_path.split(frame_indicator) dst_padding = src_collection.padding - dsp_indexes = set() - if renumber_frame: - for idx in src_collection.indexes: - dsp_list = [] - dsp_idx = (re_frame_value - int(idx)) + 1 - if dsp_idx < 0: - msg = "Renumber frame has a smaller number than original frame" # noqa - report_items[msg].append(dsp_idx) - log.warning("{} <{}>".format(msg, context)) - return report_items, 0 - dsp_list.append(dsp_idx) - dsp_indexes.add(dsp_list) - else: - dsp_indexes = set([idx for idx in src_collection.indexes]) - dst_collection = clique.Collection( head=dst_head, tail=dst_tail, - padding=dst_padding, - indexes=dsp_indexes + padding=dst_padding ) if not os.path.exists(delivery_folder): @@ -310,34 +294,32 @@ def deliver_sequence( src_head = src_collection.head src_tail = src_collection.tail uploaded = 0 - if renumber_frame: - for (src_idx, dst_idx) in zip(src_collection.indexes, - dst_collection.indexes): - src_padding = src_collection.format("{padding}") % src_idx - src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) - src = os.path.normpath( - os.path.join(dir_path, src_file_name) - ) - dst_padding = dst_collection.format("{padding}") % dst_idx + for index in src_collection.indexes: + src_padding = src_collection.format("{padding}") % index + src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) + src = os.path.normpath( + os.path.join(dir_path, src_file_name) + ) + + if renumber_frame: + dsp_index = (re_frame_value - int(index)) + 1 + if dsp_index < 0: + msg = "Renumber frame has a smaller number than original frame" # noqa + report_items[msg].append(src_file_name) + log.warning("{} <{}>".format(msg, context)) + return report_items, 0 + + dst_padding = dst_collection.format("{padding}") % dsp_index dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) dst = os.path.normpath( os.path.join(delivery_folder, dst) ) - log.debug("Copying single: {} -> {}".format(src, dst)) - _copy_file(src, dst) - else: - for index in src_collection.indexes: - src_padding = src_collection.format("{padding}") % index - src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) - src = os.path.normpath( - os.path.join(dir_path, src_file_name) - ) + _copy_file(src, dst) + + else: dst_padding = dst_collection.format("{padding}") % index dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - dst = os.path.normpath( - os.path.join(delivery_folder, dst) - ) log.debug("Copying single: {} -> {}".format(src, dst)) _copy_file(src, dst) From cddbfc02f8153b23e530942fab7c48222413cb38 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 13 Jun 2023 06:52:00 +0800 Subject: [PATCH 11/32] set the right default value in deliver args --- openpype/pipeline/delivery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 2edfec19b2..0df03bf8f8 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -177,8 +177,8 @@ def deliver_sequence( format_dict, report_items, log, - renumber_frame=True, - re_frame_value=12 + renumber_frame=False, + re_frame_value=0 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. From a4d934288590436a26ac2d9f5e8137c56d417034 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 15 Jun 2023 15:36:18 +0800 Subject: [PATCH 12/32] able to renumber frame through delivery action --- openpype/pipeline/delivery.py | 62 +++++++++++++++++++++++++++++-- openpype/plugins/load/delivery.py | 12 +++--- 2 files changed, 66 insertions(+), 8 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 0df03bf8f8..6296ee00bf 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -120,7 +120,9 @@ def deliver_single_file( anatomy_data, format_dict, report_items, - log + log, + renumber_frame=False, + re_frame_value=0 ): """Copy single file to calculated path based on template @@ -162,8 +164,62 @@ def deliver_single_file( if not os.path.exists(delivery_folder): os.makedirs(delivery_folder) - log.debug("Copying single: {} -> {}".format(src_path, delivery_path)) - _copy_file(src_path, delivery_path) + if renumber_frame: + src_dir = os.path.dirname(src_path) + src_filepaths = os.listdir(src_dir) + src_collections, remainders = clique.assemble(src_filepaths) + + src_collection = src_collections[0] + src_indexes = list(src_collection.indexes) + # Use last frame for minimum padding + # - that should cover both 'udim' and 'frame' minimum padding + + # If the representation has `frameStart` set it renumbers the + # frame indices of the published collection. It will start from + # that `frameStart` index instead. Thus if that frame start + # differs from the collection we want to shift the destination + # frame indices from the source collection. + # In case source are published in place we need to + # skip renumbering + + destination_indexes = [ + re_frame_value + idx + for idx in range(len(src_indexes)) + ] + + # To construct the destination template with anatomy we require + # a Frame or UDIM tile set for the template data. We use the first + # index of the destination for that because that could've shifted + # from the source indexes, etc. + + # Construct destination collection from template + dst_filepaths = [] + for index in destination_indexes: + template_data = copy.deepcopy(anatomy_data) + template_data["frame"] = index + template_obj = anatomy.templates_obj["delivery"][template_name] + template_filled = template_obj.format_strict( + template_data + ) + dst_filepaths.append(template_filled) + # Make sure context contains frame + # NOTE: Frame would not be available only if template does not + # contain '{frame}' in template -> Do we want support it? + + # Update the destination indexes and padding + dst_collection = clique.assemble(dst_filepaths)[0][0] + + + for src_file_name, dst in zip(src_collection, dst_collection): + src_path = os.path.join(src_dir, src_file_name) + delivery_path = os.path.join(delivery_folder, dst) + log.debug("Copying single: {} -> {}".format( + src_path, delivery_path)) + _copy_file(src_path, delivery_path) + else: + log.debug("Copying single: {} -> {}".format(src_path, delivery_path)) + _copy_file(src_path, delivery_path) + return report_items, 1 diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 826b4ad95c..735bd4adda 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -206,6 +206,13 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.log ] + if renumber_frame: + optional_args = [ + renumber_frame, + frame_offset + ] + args.extend(optional_args) + if repre.get("files"): src_paths = [] for repre_file in repre["files"]: @@ -228,11 +235,6 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if not frame: new_report_items, uploaded = deliver_single_file(*args) else: - optional_args = [ - renumber_frame, - frame_offset - ] - args.extend(optional_args) new_report_items, uploaded = deliver_sequence(*args) report_items.update(new_report_items) self._update_progress(uploaded) From 3cf1ffeb444be36a0831b19461e18bf935eee39f Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 15 Jun 2023 15:44:08 +0800 Subject: [PATCH 13/32] hound fix --- openpype/pipeline/delivery.py | 16 ---------------- openpype/plugins/load/delivery.py | 2 +- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 6296ee00bf..55043de3bb 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -171,28 +171,12 @@ def deliver_single_file( src_collection = src_collections[0] src_indexes = list(src_collection.indexes) - # Use last frame for minimum padding - # - that should cover both 'udim' and 'frame' minimum padding - - # If the representation has `frameStart` set it renumbers the - # frame indices of the published collection. It will start from - # that `frameStart` index instead. Thus if that frame start - # differs from the collection we want to shift the destination - # frame indices from the source collection. - # In case source are published in place we need to - # skip renumbering destination_indexes = [ re_frame_value + idx for idx in range(len(src_indexes)) ] - # To construct the destination template with anatomy we require - # a Frame or UDIM tile set for the template data. We use the first - # index of the destination for that because that could've shifted - # from the source indexes, etc. - - # Construct destination collection from template dst_filepaths = [] for index in destination_indexes: template_data = copy.deepcopy(anatomy_data) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 735bd4adda..79f1fd745d 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -210,7 +210,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): optional_args = [ renumber_frame, frame_offset - ] + ] args.extend(optional_args) if repre.get("files"): From 89537f2a620aab2e456a4634cd5c01d64697c6a5 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 15 Jun 2023 15:44:52 +0800 Subject: [PATCH 14/32] hound fix --- openpype/pipeline/delivery.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 55043de3bb..abb666189d 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -186,14 +186,9 @@ def deliver_single_file( template_data ) dst_filepaths.append(template_filled) - # Make sure context contains frame - # NOTE: Frame would not be available only if template does not - # contain '{frame}' in template -> Do we want support it? - # Update the destination indexes and padding dst_collection = clique.assemble(dst_filepaths)[0][0] - for src_file_name, dst in zip(src_collection, dst_collection): src_path = os.path.join(src_dir, src_file_name) delivery_path = os.path.join(delivery_folder, dst) From 191876cd1502acf872d10e5f7711c569c47fd665 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 20 Jun 2023 22:04:24 +0800 Subject: [PATCH 15/32] ondrej's comment --- openpype/plugins/load/delivery.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 79f1fd745d..3afedbd5a2 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -91,7 +91,8 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): renumber_frame = QtWidgets.QCheckBox() renumber_frame_value = QtWidgets.QSpinBox() - renumber_frame_value.setMinimum(-(1 << 32) // 2) + max_int = (1 << 32) // 2 + renumber_frame_value.setRange(-max_int, max_int - 1) root_line_edit = QtWidgets.QLineEdit() From ed3f2649d327928a1eef6356175359c9b8566089 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 28 Jun 2023 17:50:39 +0800 Subject: [PATCH 16/32] Jakub's comment --- openpype/pipeline/delivery.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index abb666189d..54ec935a83 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -121,8 +121,8 @@ def deliver_single_file( format_dict, report_items, log, - renumber_frame=False, - re_frame_value=0 + has_renumber_shot=False, + shot_number=0 ): """Copy single file to calculated path based on template @@ -164,7 +164,7 @@ def deliver_single_file( if not os.path.exists(delivery_folder): os.makedirs(delivery_folder) - if renumber_frame: + if has_renumber_shot and shot_number != 0: src_dir = os.path.dirname(src_path) src_filepaths = os.listdir(src_dir) src_collections, remainders = clique.assemble(src_filepaths) @@ -173,7 +173,7 @@ def deliver_single_file( src_indexes = list(src_collection.indexes) destination_indexes = [ - re_frame_value + idx + shot_number + idx for idx in range(len(src_indexes)) ] @@ -212,8 +212,8 @@ def deliver_sequence( format_dict, report_items, log, - renumber_frame=False, - re_frame_value=0 + has_renumber_shot=False, + shot_number=0 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. @@ -336,8 +336,8 @@ def deliver_sequence( os.path.join(dir_path, src_file_name) ) - if renumber_frame: - dsp_index = (re_frame_value - int(index)) + 1 + if has_renumber_shot and shot_number != 0: + dsp_index = (shot_number - int(index)) + 1 if dsp_index < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) From 6d7220e94f8b3ea4fe7b85de4ecc46ac2cf88589 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 28 Jun 2023 17:53:43 +0800 Subject: [PATCH 17/32] Jakub's comment --- openpype/pipeline/delivery.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 54ec935a83..3483251b29 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -164,7 +164,7 @@ def deliver_single_file( if not os.path.exists(delivery_folder): os.makedirs(delivery_folder) - if has_renumber_shot and shot_number != 0: + if has_renumber_shot: src_dir = os.path.dirname(src_path) src_filepaths = os.listdir(src_dir) src_collections, remainders = clique.assemble(src_filepaths) @@ -336,15 +336,15 @@ def deliver_sequence( os.path.join(dir_path, src_file_name) ) - if has_renumber_shot and shot_number != 0: - dsp_index = (shot_number - int(index)) + 1 - if dsp_index < 0: + if has_renumber_shot: + dst_index = (shot_number - int(index)) + 1 + if dst_index < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) log.warning("{} <{}>".format(msg, context)) return report_items, 0 - dst_padding = dst_collection.format("{padding}") % dsp_index + dst_padding = dst_collection.format("{padding}") % dst_index dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) dst = os.path.normpath( os.path.join(delivery_folder, dst) From d92337adeb10f826bd22a743039ef1cf13fd6779 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 28 Jun 2023 17:58:12 +0800 Subject: [PATCH 18/32] Jakub's comment --- openpype/pipeline/delivery.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 3483251b29..88084c5aad 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -337,7 +337,11 @@ def deliver_sequence( ) if has_renumber_shot: - dst_index = (shot_number - int(index)) + 1 + dst_index = None + if shot_number != 0: + dst_index = (shot_number - int(index)) + 1 + else: + dst_index = shot_number - int(index) if dst_index < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) From f757edd644e68ca70489700ebf77692714b0f276 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 28 Jun 2023 18:50:22 +0800 Subject: [PATCH 19/32] implement more concise variable --- openpype/pipeline/delivery.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 88084c5aad..6ac81055f7 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -121,8 +121,8 @@ def deliver_single_file( format_dict, report_items, log, - has_renumber_shot=False, - shot_number=0 + has_renumbered_frame=False, + renumber_frame=0 ): """Copy single file to calculated path based on template @@ -164,7 +164,7 @@ def deliver_single_file( if not os.path.exists(delivery_folder): os.makedirs(delivery_folder) - if has_renumber_shot: + if has_renumbered_frame: src_dir = os.path.dirname(src_path) src_filepaths = os.listdir(src_dir) src_collections, remainders = clique.assemble(src_filepaths) @@ -173,7 +173,7 @@ def deliver_single_file( src_indexes = list(src_collection.indexes) destination_indexes = [ - shot_number + idx + renumber_frame + idx for idx in range(len(src_indexes)) ] @@ -212,8 +212,8 @@ def deliver_sequence( format_dict, report_items, log, - has_renumber_shot=False, - shot_number=0 + has_renumbered_frame=False, + renumber_frame=0 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. @@ -336,12 +336,12 @@ def deliver_sequence( os.path.join(dir_path, src_file_name) ) - if has_renumber_shot: + if has_renumbered_frame: dst_index = None - if shot_number != 0: - dst_index = (shot_number - int(index)) + 1 + if renumber_frame != 0: + dst_index = (renumber_frame - int(index)) + 1 else: - dst_index = shot_number - int(index) + dst_index = renumber_frame - int(index) if dst_index < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) From 44acfd3c9f953098687910dd37fe4d04fb27b19d Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 29 Jun 2023 17:34:45 +0800 Subject: [PATCH 20/32] use files from representation for delivery action --- openpype/pipeline/delivery.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 6ac81055f7..c86c1c8e28 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -166,7 +166,16 @@ def deliver_single_file( if has_renumbered_frame: src_dir = os.path.dirname(src_path) - src_filepaths = os.listdir(src_dir) + src_filepaths =[] + for repre_file in repre["files"]: + src_path = anatomy.fill_root(repre_file["path"]) + base_path = os.path.basename(src_path) + src_filepaths.append(base_path) + if not src_filepaths: + msg = "Source files not found, cannot find collection" + report_items[msg].append(src_path) + log.warning("{} <{}>".format(msg, src_filepaths)) + return report_items, 0 src_collections, remainders = clique.assemble(src_filepaths) src_collection = src_collections[0] From a34e8c163f74a041ccf13a4ae868888a9e1edc06 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 29 Jun 2023 17:35:24 +0800 Subject: [PATCH 21/32] hound fix --- openpype/pipeline/delivery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index c86c1c8e28..fefc80d3c5 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -166,7 +166,7 @@ def deliver_single_file( if has_renumbered_frame: src_dir = os.path.dirname(src_path) - src_filepaths =[] + src_filepaths = [] for repre_file in repre["files"]: src_path = anatomy.fill_root(repre_file["path"]) base_path = os.path.basename(src_path) From 20fd5bbbbe05ae9e28dd9da498fdefd0feac4f76 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 29 Jun 2023 21:06:19 +0800 Subject: [PATCH 22/32] add function for renumbering the frame in either absolute or relative way --- openpype/pipeline/delivery.py | 44 +++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index fefc80d3c5..4a5d2084f2 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -176,18 +176,13 @@ def deliver_single_file( report_items[msg].append(src_path) log.warning("{} <{}>".format(msg, src_filepaths)) return report_items, 0 - src_collections, remainders = clique.assemble(src_filepaths) + src_collections, remainders = clique.assemble(src_filepaths) src_collection = src_collections[0] src_indexes = list(src_collection.indexes) - destination_indexes = [ - renumber_frame + idx - for idx in range(len(src_indexes)) - ] - dst_filepaths = [] - for index in destination_indexes: + for index in src_indexes: template_data = copy.deepcopy(anatomy_data) template_data["frame"] = index template_obj = anatomy.templates_obj["delivery"][template_name] @@ -197,6 +192,9 @@ def deliver_single_file( dst_filepaths.append(template_filled) dst_collection = clique.assemble(dst_filepaths)[0][0] + relative = not has_renumbered_frame + dst_collection = shift_collection( + dst_collection, renumber_frame, relative=relative) for src_file_name, dst in zip(src_collection, dst_collection): src_path = os.path.join(src_dir, src_file_name) @@ -374,3 +372,35 @@ def deliver_sequence( uploaded += 1 return report_items, uploaded + + +def shift_collection(collection, start_offset, relative=True): + """Shift frames of a clique.Collection. + + When relative is True `start_offset` will be an offset from + the current start frame of the collection shifting it by `start_offset`. + When relative is False `start_offset` will be the new start + frame of the sequence - shifting the rest of the frames along. + + Arguments: + collection (clique.Collection): Input collection. + start_offset (int): Offset to apply (or start frame to set if + relative is False) + relative (bool): Whether the start offset is relative or the + the absolute new start frame. + + Returns: + clique.Collection: Shifted collection + + """ + first_frame = next(iter(collection.indexes)) + if relative: + shift = start_offset + else: + shift = start_offset - first_frame + return clique.Collection( + head=collection.head, + tail=collection.tail, + padding=collection.padding, + indexes={idx + shift for idx in collection.indexes} + ) From 7c21bf61bbec2902f3c2208372d6dd82d8d86351 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 5 Jul 2023 17:12:31 +0800 Subject: [PATCH 23/32] Jakub's comment --- openpype/pipeline/delivery.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 4a5d2084f2..a7d8e1dcb6 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -122,7 +122,7 @@ def deliver_single_file( report_items, log, has_renumbered_frame=False, - renumber_frame=0 + new_frame_start=0 ): """Copy single file to calculated path based on template @@ -194,7 +194,7 @@ def deliver_single_file( dst_collection = clique.assemble(dst_filepaths)[0][0] relative = not has_renumbered_frame dst_collection = shift_collection( - dst_collection, renumber_frame, relative=relative) + dst_collection, new_frame_start, relative=relative) for src_file_name, dst in zip(src_collection, dst_collection): src_path = os.path.join(src_dir, src_file_name) @@ -220,7 +220,7 @@ def deliver_sequence( report_items, log, has_renumbered_frame=False, - renumber_frame=0 + new_frame_start=0 ): """ For Pype2(mainly - works in 3 too) where representation might not contain files. @@ -345,10 +345,10 @@ def deliver_sequence( if has_renumbered_frame: dst_index = None - if renumber_frame != 0: - dst_index = (renumber_frame - int(index)) + 1 + if new_frame_start != 0: + dst_index = (new_frame_start - int(index)) + 1 else: - dst_index = renumber_frame - int(index) + dst_index = new_frame_start - int(index) if dst_index < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) From 4cc4bccbb55fda3cf148bbba7cc2a0c58163fee6 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 5 Jul 2023 18:28:58 +0800 Subject: [PATCH 24/32] Jakub's comment --- openpype/pipeline/delivery.py | 106 ++++-------------------------- openpype/plugins/load/delivery.py | 4 +- 2 files changed, 16 insertions(+), 94 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index a7d8e1dcb6..fa4b8aee83 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -164,47 +164,8 @@ def deliver_single_file( if not os.path.exists(delivery_folder): os.makedirs(delivery_folder) - if has_renumbered_frame: - src_dir = os.path.dirname(src_path) - src_filepaths = [] - for repre_file in repre["files"]: - src_path = anatomy.fill_root(repre_file["path"]) - base_path = os.path.basename(src_path) - src_filepaths.append(base_path) - if not src_filepaths: - msg = "Source files not found, cannot find collection" - report_items[msg].append(src_path) - log.warning("{} <{}>".format(msg, src_filepaths)) - return report_items, 0 - - src_collections, remainders = clique.assemble(src_filepaths) - src_collection = src_collections[0] - src_indexes = list(src_collection.indexes) - - dst_filepaths = [] - for index in src_indexes: - template_data = copy.deepcopy(anatomy_data) - template_data["frame"] = index - template_obj = anatomy.templates_obj["delivery"][template_name] - template_filled = template_obj.format_strict( - template_data - ) - dst_filepaths.append(template_filled) - - dst_collection = clique.assemble(dst_filepaths)[0][0] - relative = not has_renumbered_frame - dst_collection = shift_collection( - dst_collection, new_frame_start, relative=relative) - - for src_file_name, dst in zip(src_collection, dst_collection): - src_path = os.path.join(src_dir, src_file_name) - delivery_path = os.path.join(delivery_folder, dst) - log.debug("Copying single: {} -> {}".format( - src_path, delivery_path)) - _copy_file(src_path, delivery_path) - else: - log.debug("Copying single: {} -> {}".format(src_path, delivery_path)) - _copy_file(src_path, delivery_path) + log.debug("Copying single: {} -> {}".format(src_path, delivery_path)) + _copy_file(src_path, delivery_path) return report_items, 1 @@ -336,71 +297,30 @@ def deliver_sequence( src_head = src_collection.head src_tail = src_collection.tail uploaded = 0 + first_frame = next(iter(src_collection.indexes)) for index in src_collection.indexes: src_padding = src_collection.format("{padding}") % index src_file_name = "{}{}{}".format(src_head, src_padding, src_tail) src = os.path.normpath( os.path.join(dir_path, src_file_name) ) - + dst_index = index if has_renumbered_frame: - dst_index = None - if new_frame_start != 0: - dst_index = (new_frame_start - int(index)) + 1 - else: - dst_index = new_frame_start - int(index) + # Calculate offset between first frame and current frame + # - '0' for first frame + offset = new_frame_start - first_frame + # Add offset to new frame start + dst_index = index + offset if dst_index < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_file_name) log.warning("{} <{}>".format(msg, context)) return report_items, 0 - - dst_padding = dst_collection.format("{padding}") % dst_index - dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - dst = os.path.normpath( - os.path.join(delivery_folder, dst) - ) - - _copy_file(src, dst) - - else: - dst_padding = dst_collection.format("{padding}") % index - dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) - log.debug("Copying single: {} -> {}".format(src, dst)) - _copy_file(src, dst) + dst_padding = dst_collection.format("{padding}") % dst_index + dst = "{}{}{}".format(dst_head, dst_padding, dst_tail) + log.debug("Copying single: {} -> {}".format(src, dst)) + _copy_file(src, dst) uploaded += 1 return report_items, uploaded - - -def shift_collection(collection, start_offset, relative=True): - """Shift frames of a clique.Collection. - - When relative is True `start_offset` will be an offset from - the current start frame of the collection shifting it by `start_offset`. - When relative is False `start_offset` will be the new start - frame of the sequence - shifting the rest of the frames along. - - Arguments: - collection (clique.Collection): Input collection. - start_offset (int): Offset to apply (or start frame to set if - relative is False) - relative (bool): Whether the start offset is relative or the - the absolute new start frame. - - Returns: - clique.Collection: Shifted collection - - """ - first_frame = next(iter(collection.indexes)) - if relative: - shift = start_offset - else: - shift = start_offset - first_frame - return clique.Collection( - head=collection.head, - tail=collection.tail, - padding=collection.padding, - indexes={idx + shift for idx in collection.indexes} - ) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 3afedbd5a2..e49d62aa6d 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -225,7 +225,9 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): args[0] = src_path if frame: anatomy_data["frame"] = frame - new_report_items, uploaded = deliver_single_file(*args) + new_report_items, uploaded = deliver_sequence(*args) + else: + new_report_items, uploaded = deliver_single_file(*args) report_items.update(new_report_items) self._update_progress(uploaded) else: # fallback for Pype2 and representations without files From 106b59018a4c0fac3b9557d788ece4b0e966fc03 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 5 Jul 2023 18:32:32 +0800 Subject: [PATCH 25/32] remove unused args --- openpype/pipeline/delivery.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index fa4b8aee83..9a44ec1b84 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -120,9 +120,7 @@ def deliver_single_file( anatomy_data, format_dict, report_items, - log, - has_renumbered_frame=False, - new_frame_start=0 + log ): """Copy single file to calculated path based on template From dab513f01c7258b9858782cae3f9213c0734e3b1 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 5 Jul 2023 20:03:53 +0800 Subject: [PATCH 26/32] jakub's comment --- openpype/pipeline/delivery.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 9a44ec1b84..1806ffdd6b 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -165,7 +165,6 @@ def deliver_single_file( log.debug("Copying single: {} -> {}".format(src_path, delivery_path)) _copy_file(src_path, delivery_path) - return report_items, 1 From be10dc7349924edbe6ae795d01a9d058a7e1e4bf Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 5 Jul 2023 21:06:31 +0800 Subject: [PATCH 27/32] Jakub's comment --- openpype/pipeline/delivery.py | 4 +++- openpype/plugins/load/delivery.py | 32 ++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 1806ffdd6b..e0c3ced626 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -120,7 +120,9 @@ def deliver_single_file( anatomy_data, format_dict, report_items, - log + log, + has_renumbered_frame=False, + new_frame_start=0 ): """Copy single file to calculated path based on template diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 1d38b6f0a0..f56f776dc6 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -237,13 +237,35 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): src_paths.append(src_path) sources_and_frames = collect_frames(src_paths) + frames = set(sources_and_frames.values()) + frames.discard(None) + first_frame = None + if frames: + first_frame = next(iter(frames)) + + for src_path, frame in sources_and_frames.items(): args[0] = src_path - if frame: - anatomy_data["frame"] = frame - new_report_items, uploaded = deliver_sequence(*args) - else: - new_report_items, uploaded = deliver_single_file(*args) + # Renumber frames + if renumber_frame and frame is not None: + # Calculate offset between first frame and current frame + # - '0' for first frame + offset = frame_offset - int(first_frame) + # Add offset to new frame start + frame = int(frame) + dst_frame = frame + offset + if dst_frame < 0: + msg = "Renumber frame has a smaller number than original frame" # noqa + report_items[msg].append(src_path) + self.log.warning("{} <{}>".format( + msg, dst_frame)) + continue + frame = dst_frame + + if frame is not None: + if frame: + anatomy_data["frame"] = frame + new_report_items, uploaded = deliver_single_file(*args) report_items.update(new_report_items) self._update_progress(uploaded) else: # fallback for Pype2 and representations without files From d7256a09925de1963c13b8799a1b6200554b4a04 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 5 Jul 2023 21:07:45 +0800 Subject: [PATCH 28/32] hound fix --- openpype/plugins/load/delivery.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index f56f776dc6..3d4b90686e 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -248,7 +248,8 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): args[0] = src_path # Renumber frames if renumber_frame and frame is not None: - # Calculate offset between first frame and current frame + # Calculate offset between + # first frame and current frame # - '0' for first frame offset = frame_offset - int(first_frame) # Add offset to new frame start From 0f015a6f9207d6f6c65d5319bcdc12a7912982a6 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 7 Jul 2023 20:30:55 +0800 Subject: [PATCH 29/32] jakub's comment --- openpype/plugins/load/delivery.py | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index 3d4b90686e..b78666528c 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -97,9 +97,9 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): renumber_frame = QtWidgets.QCheckBox() - renumber_frame_value = QtWidgets.QSpinBox() + first_frame_start = QtWidgets.QSpinBox() max_int = (1 << 32) // 2 - renumber_frame_value.setRange(-max_int, max_int - 1) + first_frame_start.setRange(0, max_int - 1) root_line_edit = QtWidgets.QLineEdit() @@ -125,7 +125,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): input_layout.addRow("Delivery template", dropdown) input_layout.addRow("Template value", template_label) input_layout.addRow("Renumber Frame", renumber_frame) - input_layout.addRow("Renumber start frame", renumber_frame_value) + input_layout.addRow("Renumber start frame", first_frame_start) input_layout.addRow("Root", root_line_edit) input_layout.addRow("Representations", repre_checkboxes_layout) @@ -153,7 +153,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.selected_label = selected_label self.template_label = template_label self.dropdown = dropdown - self.renumber_frame_value = renumber_frame_value + self.first_frame_start = first_frame_start self.renumber_frame = renumber_frame self.root_line_edit = root_line_edit self.progress_bar = progress_bar @@ -192,7 +192,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): template_name = self.dropdown.currentText() format_dict = get_format_dict(self.anatomy, self.root_line_edit.text()) renumber_frame = self.renumber_frame.isChecked() - frame_offset = self.renumber_frame_value.value() + frame_offset = self.first_frame_start.value() for repre in self._representations: if repre["name"] not in selected_repres: continue @@ -223,13 +223,6 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): self.log ] - if renumber_frame: - optional_args = [ - renumber_frame, - frame_offset - ] - args.extend(optional_args) - if repre.get("files"): src_paths = [] for repre_file in repre["files"]: @@ -241,8 +234,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): frames.discard(None) first_frame = None if frames: - first_frame = next(iter(frames)) - + first_frame = min(frames) for src_path, frame in sources_and_frames.items(): args[0] = src_path @@ -253,8 +245,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): # - '0' for first frame offset = frame_offset - int(first_frame) # Add offset to new frame start - frame = int(frame) - dst_frame = frame + offset + dst_frame = int(frame) + offset if dst_frame < 0: msg = "Renumber frame has a smaller number than original frame" # noqa report_items[msg].append(src_path) @@ -274,7 +265,6 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if frame: repre["context"]["frame"] = len(str(frame)) * "#" - if not frame: new_report_items, uploaded = deliver_single_file(*args) else: new_report_items, uploaded = deliver_sequence(*args) From eee670fc0f9278b648284a7b4d0047a32eb6c316 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 7 Jul 2023 20:33:14 +0800 Subject: [PATCH 30/32] jakub's comment --- openpype/pipeline/delivery.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index fe22f7401c..1bb19498da 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -120,9 +120,7 @@ def deliver_single_file( anatomy_data, format_dict, report_items, - log, - has_renumbered_frame=False, - new_frame_start=0 + log ): """Copy single file to calculated path based on template From a687cc068d63d51306303073c1a1ec93645ad53e Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 7 Jul 2023 20:37:26 +0800 Subject: [PATCH 31/32] Jakub's comment --- openpype/plugins/load/delivery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/plugins/load/delivery.py b/openpype/plugins/load/delivery.py index b78666528c..3b493989bd 100644 --- a/openpype/plugins/load/delivery.py +++ b/openpype/plugins/load/delivery.py @@ -255,8 +255,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): frame = dst_frame if frame is not None: - if frame: - anatomy_data["frame"] = frame + anatomy_data["frame"] = frame new_report_items, uploaded = deliver_single_file(*args) report_items.update(new_report_items) self._update_progress(uploaded) @@ -265,6 +264,7 @@ class DeliveryOptionsDialog(QtWidgets.QDialog): if frame: repre["context"]["frame"] = len(str(frame)) * "#" + if not frame: new_report_items, uploaded = deliver_single_file(*args) else: new_report_items, uploaded = deliver_sequence(*args) From 284b7069ce3ce657f1f500a9d34120ff06df9895 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 12 Jul 2023 11:41:34 +0800 Subject: [PATCH 32/32] oscar's comment --- openpype/pipeline/delivery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/pipeline/delivery.py b/openpype/pipeline/delivery.py index 1bb19498da..bbd01f7a4e 100644 --- a/openpype/pipeline/delivery.py +++ b/openpype/pipeline/delivery.py @@ -296,7 +296,7 @@ def deliver_sequence( src_head = src_collection.head src_tail = src_collection.tail uploaded = 0 - first_frame = next(iter(src_collection.indexes)) + first_frame = min(src_collection.indexes) for index in src_collection.indexes: src_padding = src_collection.format("{padding}") % index src_file_name = "{}{}{}".format(src_head, src_padding, src_tail)