From 4650669782a7bc8e904214bbb3b88632d597e5b7 Mon Sep 17 00:00:00 2001 From: "felix.wang" Date: Wed, 15 Sep 2021 14:14:13 -0700 Subject: [PATCH 1/5] Adding predefined project folders creation in PM #1989. --- .../project_manager/project_manager/window.py | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/window.py b/openpype/tools/project_manager/project_manager/window.py index 7c71f4b4511..caea6f46ab2 100644 --- a/openpype/tools/project_manager/project_manager/window.py +++ b/openpype/tools/project_manager/project_manager/window.py @@ -1,3 +1,4 @@ +import logging from Qt import QtWidgets, QtCore, QtGui from . import ( @@ -15,8 +16,11 @@ from openpype.widgets import PasswordDialog from openpype import resources +from openpype.api import get_project_basic_paths, create_project_folders from avalon.api import AvalonMongoDB +log = logging.getLogger(__name__) + class ProjectManagerWindow(QtWidgets.QWidget): """Main widget of Project Manager tool.""" @@ -28,6 +32,9 @@ def __init__(self, parent=None): self._password_dialog = None self._user_passed = False + # keep track of the current project PM is viewing + self._current_project = None + self.setWindowTitle("OpenPype Project Manager") self.setWindowIcon(QtGui.QIcon(resources.pype_icon_filepath())) @@ -82,11 +89,20 @@ def __init__(self, parent=None): add_asset_btn.setObjectName("IconBtn") add_task_btn.setObjectName("IconBtn") + add_misc_folders_label = QtWidgets.QLabel("Create misc. folders:", helper_btns_widget) + add_misc_folders_btn = QtWidgets.QPushButton( + ResourceCache.get_icon("asset", "default"), + "Create Misc. Folders", + helper_btns_widget + ) + helper_btns_layout = QtWidgets.QHBoxLayout(helper_btns_widget) helper_btns_layout.setContentsMargins(0, 0, 0, 0) helper_btns_layout.addWidget(helper_label) helper_btns_layout.addWidget(add_asset_btn) helper_btns_layout.addWidget(add_task_btn) + helper_btns_layout.addWidget(add_misc_folders_label) + helper_btns_layout.addWidget(add_misc_folders_btn) helper_btns_layout.addStretch(1) # Add widgets to top widget layout @@ -128,6 +144,7 @@ def __init__(self, parent=None): save_btn.clicked.connect(self._on_save_click) add_asset_btn.clicked.connect(self._on_add_asset) add_task_btn.clicked.connect(self._on_add_task) + add_misc_folders_btn.clicked.connect(self._on_add_misc_folders) self._project_model = project_model @@ -142,6 +159,7 @@ def __init__(self, parent=None): self._add_asset_btn = add_asset_btn self._add_task_btn = add_task_btn + self._add_misc_folders_btn = add_misc_folders_btn self.resize(1200, 600) self.setStyleSheet(load_stylesheet()) @@ -179,7 +197,9 @@ def refresh_projects(self, project_name=None): self._set_project(self._project_combobox.currentText()) def _on_project_change(self): - self._set_project(self._project_combobox.currentText()) + if self._project_combobox.currentIndex() != 0: + self._current_project = self._project_combobox.currentText() + self._set_project(self._current_project) def _on_project_refresh(self): self.refresh_projects() @@ -193,6 +213,23 @@ def _on_add_asset(self): def _on_add_task(self): self.hierarchy_view.add_task() + def _on_add_misc_folders(self): + if not self._current_project: + return + + qm = QtWidgets.QMessageBox + ans = qm.question(self, '', "Confirm to create misc. project folders?", qm.Yes | qm.No) + if ans == qm.Yes: + try: + # Get paths based on presets + basic_paths = get_project_basic_paths(self._current_project) + if not basic_paths: + pass + # Invoking OpenPype API to create the project folders + create_project_folders(basic_paths, self._current_project) + except Exception as exc: + log.warning("Error creating.", exc_info=True) + def show_message(self, message): # TODO add nicer message pop self.message_label.setText(message) @@ -203,9 +240,9 @@ def _on_project_create(self): if dialog.result() != 1: return - project_name = dialog.project_name - self.show_message("Created project \"{}\"".format(project_name)) - self.refresh_projects(project_name) + self._current_project = dialog.project_name + self.show_message("Created project \"{}\"".format(self._current_project)) + self.refresh_projects(self._current_project) def _show_password_dialog(self): if self._password_dialog: From 1e6b82bf1137364aa115ad63b1e5ead14c91ad57 Mon Sep 17 00:00:00 2001 From: "felix.wang" Date: Wed, 15 Sep 2021 14:41:36 -0700 Subject: [PATCH 2/5] Make hound happy. --- .../project_manager/project_manager/window.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/window.py b/openpype/tools/project_manager/project_manager/window.py index caea6f46ab2..f8fbe2f288d 100644 --- a/openpype/tools/project_manager/project_manager/window.py +++ b/openpype/tools/project_manager/project_manager/window.py @@ -89,7 +89,10 @@ def __init__(self, parent=None): add_asset_btn.setObjectName("IconBtn") add_task_btn.setObjectName("IconBtn") - add_misc_folders_label = QtWidgets.QLabel("Create misc. folders:", helper_btns_widget) + add_misc_folders_label = QtWidgets.QLabel( + "Create misc. folders:", + helper_btns_widget + ) add_misc_folders_btn = QtWidgets.QPushButton( ResourceCache.get_icon("asset", "default"), "Create Misc. Folders", @@ -218,7 +221,10 @@ def _on_add_misc_folders(self): return qm = QtWidgets.QMessageBox - ans = qm.question(self, '', "Confirm to create misc. project folders?", qm.Yes | qm.No) + ans = qm.question(self, + "", + "Confirm to create misc. project folders?", + qm.Yes | qm.No) if ans == qm.Yes: try: # Get paths based on presets @@ -228,7 +234,8 @@ def _on_add_misc_folders(self): # Invoking OpenPype API to create the project folders create_project_folders(basic_paths, self._current_project) except Exception as exc: - log.warning("Error creating.", exc_info=True) + log.warning("Failed to create misc folders: {}".format(exc), + exc_info=True) def show_message(self, message): # TODO add nicer message pop @@ -241,7 +248,9 @@ def _on_project_create(self): return self._current_project = dialog.project_name - self.show_message("Created project \"{}\"".format(self._current_project)) + self.show_message( + "Created project \"{}\"".format(self._current_project) + ) self.refresh_projects(self._current_project) def _show_password_dialog(self): From e9f9c387fb62e65d028c72a7f2d608be165e3912 Mon Sep 17 00:00:00 2001 From: "felix.wang" Date: Thu, 16 Sep 2021 15:09:28 -0700 Subject: [PATCH 3/5] addressing PR comments. --- .../project_manager/project_manager/window.py | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/window.py b/openpype/tools/project_manager/project_manager/window.py index f8fbe2f288d..57e373086fe 100644 --- a/openpype/tools/project_manager/project_manager/window.py +++ b/openpype/tools/project_manager/project_manager/window.py @@ -16,11 +16,9 @@ from openpype.widgets import PasswordDialog from openpype import resources -from openpype.api import get_project_basic_paths, create_project_folders +from openpype.api import get_project_basic_paths, create_project_folders, Logger from avalon.api import AvalonMongoDB -log = logging.getLogger(__name__) - class ProjectManagerWindow(QtWidgets.QWidget): """Main widget of Project Manager tool.""" @@ -28,6 +26,8 @@ class ProjectManagerWindow(QtWidgets.QWidget): def __init__(self, parent=None): super(ProjectManagerWindow, self).__init__(parent) + self.log = Logger.get_logger(self.__class__.__name__) + self._initial_reset = False self._password_dialog = None self._user_passed = False @@ -64,12 +64,18 @@ def __init__(self, parent=None): create_project_btn = QtWidgets.QPushButton( "Create project...", project_widget ) + create_folders_btn = QtWidgets.QPushButton( + ResourceCache.get_icon("asset", "default"), + "Create Starting Folders", + project_widget + ) project_layout = QtWidgets.QHBoxLayout(project_widget) project_layout.setContentsMargins(0, 0, 0, 0) project_layout.addWidget(project_combobox, 0) project_layout.addWidget(refresh_projects_btn, 0) project_layout.addWidget(create_project_btn, 0) + project_layout.addWidget(create_folders_btn) project_layout.addStretch(1) # Helper buttons @@ -89,23 +95,11 @@ def __init__(self, parent=None): add_asset_btn.setObjectName("IconBtn") add_task_btn.setObjectName("IconBtn") - add_misc_folders_label = QtWidgets.QLabel( - "Create misc. folders:", - helper_btns_widget - ) - add_misc_folders_btn = QtWidgets.QPushButton( - ResourceCache.get_icon("asset", "default"), - "Create Misc. Folders", - helper_btns_widget - ) - helper_btns_layout = QtWidgets.QHBoxLayout(helper_btns_widget) helper_btns_layout.setContentsMargins(0, 0, 0, 0) helper_btns_layout.addWidget(helper_label) helper_btns_layout.addWidget(add_asset_btn) helper_btns_layout.addWidget(add_task_btn) - helper_btns_layout.addWidget(add_misc_folders_label) - helper_btns_layout.addWidget(add_misc_folders_btn) helper_btns_layout.addStretch(1) # Add widgets to top widget layout @@ -143,11 +137,11 @@ def __init__(self, parent=None): refresh_projects_btn.clicked.connect(self._on_project_refresh) create_project_btn.clicked.connect(self._on_project_create) + create_folders_btn.clicked.connect(self._on_add_misc_folders) project_combobox.currentIndexChanged.connect(self._on_project_change) save_btn.clicked.connect(self._on_save_click) add_asset_btn.clicked.connect(self._on_add_asset) add_task_btn.clicked.connect(self._on_add_task) - add_misc_folders_btn.clicked.connect(self._on_add_misc_folders) self._project_model = project_model @@ -159,10 +153,10 @@ def __init__(self, parent=None): self._refresh_projects_btn = refresh_projects_btn self._project_combobox = project_combobox self._create_project_btn = create_project_btn + self._create_folders_btn = create_folders_btn self._add_asset_btn = add_asset_btn self._add_task_btn = add_task_btn - self._add_misc_folders_btn = add_misc_folders_btn self.resize(1200, 600) self.setStyleSheet(load_stylesheet()) @@ -222,8 +216,8 @@ def _on_add_misc_folders(self): qm = QtWidgets.QMessageBox ans = qm.question(self, - "", - "Confirm to create misc. project folders?", + "OpenPype Project Manager", + "Confirm to create starting project folders?", qm.Yes | qm.No) if ans == qm.Yes: try: @@ -234,8 +228,8 @@ def _on_add_misc_folders(self): # Invoking OpenPype API to create the project folders create_project_folders(basic_paths, self._current_project) except Exception as exc: - log.warning("Failed to create misc folders: {}".format(exc), - exc_info=True) + self.log.warning("Cannot create starting folders: {}".format(exc), + exc_info=True) def show_message(self, message): # TODO add nicer message pop From bc05de97d554f136ded0a6d9c2be3dc8621fee34 Mon Sep 17 00:00:00 2001 From: "felix.wang" Date: Thu, 16 Sep 2021 15:17:15 -0700 Subject: [PATCH 4/5] Hound fixes. --- .../tools/project_manager/project_manager/window.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/window.py b/openpype/tools/project_manager/project_manager/window.py index 57e373086fe..21367287cde 100644 --- a/openpype/tools/project_manager/project_manager/window.py +++ b/openpype/tools/project_manager/project_manager/window.py @@ -1,4 +1,3 @@ -import logging from Qt import QtWidgets, QtCore, QtGui from . import ( @@ -16,7 +15,11 @@ from openpype.widgets import PasswordDialog from openpype import resources -from openpype.api import get_project_basic_paths, create_project_folders, Logger +from openpype.api import ( + get_project_basic_paths, + create_project_folders, + Logger +) from avalon.api import AvalonMongoDB @@ -228,8 +231,10 @@ def _on_add_misc_folders(self): # Invoking OpenPype API to create the project folders create_project_folders(basic_paths, self._current_project) except Exception as exc: - self.log.warning("Cannot create starting folders: {}".format(exc), - exc_info=True) + self.log.warning( + "Cannot create starting folders: {}".format(exc), + exc_info=True + ) def show_message(self, message): # TODO add nicer message pop From 284e2cca1850385077c0f16888eb51cb71ee50df Mon Sep 17 00:00:00 2001 From: "felix.wang" Date: Thu, 16 Sep 2021 16:30:16 -0700 Subject: [PATCH 5/5] Fix function name to be consistent. --- openpype/tools/project_manager/project_manager/window.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/window.py b/openpype/tools/project_manager/project_manager/window.py index 21367287cde..a89aff11687 100644 --- a/openpype/tools/project_manager/project_manager/window.py +++ b/openpype/tools/project_manager/project_manager/window.py @@ -140,7 +140,7 @@ def __init__(self, parent=None): refresh_projects_btn.clicked.connect(self._on_project_refresh) create_project_btn.clicked.connect(self._on_project_create) - create_folders_btn.clicked.connect(self._on_add_misc_folders) + create_folders_btn.clicked.connect(self._on_create_folders) project_combobox.currentIndexChanged.connect(self._on_project_change) save_btn.clicked.connect(self._on_save_click) add_asset_btn.clicked.connect(self._on_add_asset) @@ -213,7 +213,7 @@ def _on_add_asset(self): def _on_add_task(self): self.hierarchy_view.add_task() - def _on_add_misc_folders(self): + def _on_create_folders(self): if not self._current_project: return