Skip to content

Commit

Permalink
Implement batch dialog box and arrange settings
Browse files Browse the repository at this point in the history
  • Loading branch information
Jerome Lorrain authored and ClementHector committed Feb 7, 2022
1 parent 01e4f54 commit cd86d6c
Show file tree
Hide file tree
Showing 8 changed files with 262 additions and 28 deletions.
14 changes: 14 additions & 0 deletions openpype/modules/default_modules/shotgrid/lib/server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from typing import Dict
from openpype_modules.shotgrid.lib import settings


def poll_server() -> int:
return 200


def check_batch_settings(settings: Dict[str, any]) -> bool:
return True


def send_batch_request(settings: Dict[str, any], override: bool) -> int:
return 200
20 changes: 18 additions & 2 deletions openpype/modules/default_modules/shotgrid/lib/settings.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
import os
from typing import Tuple, Dict, Any
from typing import Tuple, Dict, List, Any

from openpype.api import get_system_settings
from pymongo import MongoClient
from openpype.api import get_system_settings, get_project_settings
from openpype_modules.shotgrid.lib.const import MODULE_NAME


def get_project_list() -> List[str]:
mongo_url = os.getenv("OPENPYPE_MONGO")
client = MongoClient(mongo_url)
db = client['avalon']
return db.list_collection_names()


def get_shotgrid_project_settings(project: str) -> Dict[str, Any]:
return get_project_settings(project).get(MODULE_NAME, {})


def get_shotgrid_settings() -> Dict[str, Any]:
return get_system_settings().get("modules", {}).get(MODULE_NAME, {})

Expand All @@ -13,6 +25,10 @@ def get_shotgrid_url() -> str:
return get_shotgrid_settings().get("shotgrid_url")


def get_module_server_url() -> str:
return get_shotgrid_settings().get("module_server_url")


def get_shotgrid_event_mongo_info() -> Tuple[str, str]:
database_name = os.environ["OPENPYPE_DATABASE_NAME"]
collection_name = "shotgrid_events"
Expand Down
211 changes: 211 additions & 0 deletions openpype/modules/default_modules/shotgrid/tray/batch_dialog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
from typing import Dict, Any, Optional
from Qt import QtCore, QtWidgets, QtGui

from openpype import style
from openpype import resources
from openpype.modules.default_modules.shotgrid.lib import settings, server


class BatchDialog(QtWidgets.QDialog):
SIZE_W = 450
SIZE_H = 200

_module: Any = None
project_settings: Optional[Dict[str, Any]] = None

project_label: QtWidgets.QLabel
project_dropdown: QtWidgets.QComboBox
override: QtWidgets.QCheckBox

shotgrid_url: QtWidgets.QLabel
shotgrid_script_name: QtWidgets.QLabel
shotgrid_script_key: QtWidgets.QLabel
shotgrid_project_id: QtWidgets.QLabel
error_label: QtWidgets.QLabel
success_label: QtWidgets.QLabel

input_layout: QtWidgets.QFormLayout
info_layout: QtWidgets.QFormLayout
batch_button: QtWidgets.QPushButton
buttons_layout: QtWidgets.QHBoxLayout
main_widget: QtWidgets.QVBoxLayout

def __init__(self, module, parent=None):
super(BatchDialog, self).__init__(parent)

self._module = module

self.setWindowTitle("OpenPype - Shotgrid Batch")

icon = QtGui.QIcon(resources.pype_icon_filepath())
self.setWindowIcon(icon)

self.setWindowFlags(
QtCore.Qt.WindowCloseButtonHint
| QtCore.Qt.WindowMinimizeButtonHint
)
self.setMinimumSize(QtCore.QSize(self.SIZE_W, self.SIZE_H))
self.setMaximumSize(QtCore.QSize(self.SIZE_W + 100, self.SIZE_H + 100))
self.setStyleSheet(style.load_stylesheet())

self.ui_init()

def ui_init(self):
self.project_label = QtWidgets.QLabel("Select OpenPype project:")
self.project_dropdown = QtWidgets.QComboBox()
self.project_dropdown.currentIndexChanged.connect(
self._on_project_selection_changed
)
self.override = QtWidgets.QCheckBox(
"Override Openpype existing project"
)

self.shotgrid_url = QtWidgets.QLabel("")
self.shotgrid_script_name = QtWidgets.QLabel("")
self.shotgrid_script_key = QtWidgets.QLabel("")
self.shotgrid_project_id = QtWidgets.QLabel("")

self.error_label = QtWidgets.QLabel("")
self.error_label.setStyleSheet("color: red;")
self.error_label.setWordWrap(True)
self.error_label.hide()
self.success_label = QtWidgets.QLabel("")
self.success_label.setStyleSheet("color: green;")
self.success_label.setWordWrap(True)
self.success_label.hide()

self.input_layout = QtWidgets.QFormLayout()
self.input_layout.setContentsMargins(10, 15, 10, 5)

self.input_layout.addRow(self.project_label, self.project_dropdown)
self.input_layout.addRow(self.override)
self.input_layout.addRow(self.error_label)
self.input_layout.addRow(self.success_label)

self.info_layout = QtWidgets.QFormLayout()
self.info_layout.setContentsMargins(10, 15, 10, 5)

self.info_layout.addRow(
QtWidgets.QLabel("Project ID:"), self.shotgrid_project_id
)
self.info_layout.addRow(
QtWidgets.QLabel("Server URL:"), self.shotgrid_url
)
self.info_layout.addRow(
QtWidgets.QLabel("Script Name:"),
self.shotgrid_script_name,
)
self.info_layout.addRow(
QtWidgets.QLabel("Script Key:"), self.shotgrid_script_key
)

self.batch_button = QtWidgets.QPushButton("Batch")
self.batch_button.setToolTip("Launch Batch")
self.batch_button.setEnabled(False)
self.batch_button.clicked.connect(self._on_shotgrid_batch_clicked)

self.buttons_layout = QtWidgets.QHBoxLayout()
self.buttons_layout.addStretch()
self.buttons_layout.addWidget(self.batch_button)

self.main_widget = QtWidgets.QVBoxLayout(self)
self.main_widget.addLayout(self.input_layout)
self.main_widget.addLayout(self.info_layout)
self.main_widget.addLayout(self.buttons_layout)
self.setLayout(self.main_widget)

def show(self, *args, **kwargs):
self.project_dropdown.clear()
self._fill_project_dropdown()
super(BatchDialog, self).show(*args, **kwargs)

def _fill_project_dropdown(self):
avalon_projects = settings.get_project_list()
for project in avalon_projects:
self.project_dropdown.addItem(project)

def _on_shotgrid_batch_clicked(self):
if self.project_settings:
res = server.send_batch_request(
self.project_settings, self.override.isChecked()
)

if res != 200:
self.set_error("Error sending batch request")
else:
self.set_success("Batch sent")

def _on_project_selection_changed(self):
self.clear_messages()

project = self.project_dropdown.currentText()

if not project:
return

project_settings = settings.get_shotgrid_project_settings(project)

auth_settings = project_settings.get("auth", {})
self.shotgrid_project_id.setText(
str(project_settings.get("shotgrid_project_id"))
)
self.shotgrid_url.setText(auth_settings.get("project_shotgrid_url"))
self.shotgrid_script_name.setText(
auth_settings.get("project_shotgrid_script_name")
)
self.shotgrid_script_key.setText(
auth_settings.get("project_shotgrid_script_key")
)

if (
self._check_selected_project_settings(project_settings)
and self._check_server_status()
):
self.project_settings = project_settings
self.batch_button.setEnabled(True)
else:
self.project_settings = None
self.batch_button.setEnabled(False)

def set_error(self, msg: str):
self.clear_messages()
self.error_label.setText(msg)
self.error_label.show()

def set_success(self, msg: str):
self.clear_messages()
self.success_label.setText(msg)
self.success_label.show()

def clear_error(self):
self.error_label.setText("")
self.error_label.hide()

def clear_success(self):
self.success_label.setText("")
self.success_label.hide()

def clear_messages(self):
self.clear_error()
self.clear_success()

def _close_widget(self):
self.hide()

def _check_selected_project_settings(self, settings: Dict[str, Any]):
if not server.check_batch_settings(settings):
self.set_error("Can't access shotgrid project with those settings")
return False
return True

def _check_server_status(self):
if server.poll_server() != 200:
self.set_error("Can't access module server, contact your admin")
return False
return True

def _valid_input(self, input_widget: QtWidgets.QLineEdit):
input_widget.setStyleSheet("")

def _invalid_input(self, input_widget: QtWidgets.QLineEdit):
input_widget.setStyleSheet("border: 1px solid red;")
10 changes: 10 additions & 0 deletions openpype/modules/default_modules/shotgrid/tray/shotgrid_tray.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
from openpype.modules.default_modules.shotgrid.tray.credential_dialog import (
CredentialsDialog,
)
from openpype.modules.default_modules.shotgrid.tray.batch_dialog import (
BatchDialog,
)
from openpype.modules.default_modules.shotgrid.lib import credentials, settings

from Qt import QtWidgets
Expand All @@ -15,6 +18,10 @@ class ShotgridTrayWrapper:
def __init__(self, module) -> None:
self.module = module
self.credentials_dialog = CredentialsDialog(module)
self.batch_dialog = BatchDialog(module)

def show_batch_dialog(self):
self.batch_dialog.show()

def show_connect_dialog(self):
self.show_credential_dialog()
Expand All @@ -28,7 +35,10 @@ def tray_menu(self, tray_menu):
menu = QtWidgets.QMenu("Shotgrid", tray_menu)
show_connect_action = QtWidgets.QAction("Connect to Shotgrid", menu)
show_connect_action.triggered.connect(self.show_connect_dialog)
show_batch_action = QtWidgets.QAction("Launch Batch", menu)
show_batch_action.triggered.connect(self.show_batch_dialog)
menu.addAction(show_connect_action)
menu.addAction(show_batch_action)
tray_menu.addMenu(menu)

def validate(self) -> bool:
Expand Down
4 changes: 0 additions & 4 deletions openpype/settings/defaults/project_settings/shotgrid.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@
"project_shotgrid_script_name": "",
"project_shotgrid_script_key": ""
},
"batch": {
"enabled": false,
"override": false
},
"event": {
"enabled": false
},
Expand Down
1 change: 1 addition & 0 deletions openpype/settings/defaults/system_settings/modules.json
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
},
"shotgrid": {
"enabled": true,
"module_server_url": "",
"shotgrid_url": "",
"shotgrid_script_name": "",
"shotgrid_script_key": ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,6 @@
}
]
},
{
"type": "dict",
"key": "batch",
"label": "Batch",
"collapsible": true,
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "boolean",
"key": "override",
"label": "Override existing project"
}
]
},
{
"type": "dict",
"key": "event",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,25 @@
"key": "enabled",
"label": "Enabled"
},
{
"type": "text",
"key": "module_server_url",
"label": "Module Server URL"
},
{
"type": "text",
"key": "shotgrid_url",
"label": "Server URL"
"label": "Shotgrid Server URL"
},
{
"type": "text",
"key": "shotgrid_script_name",
"label": "Script Name"
"label": "Shotgrid Script Name"
},
{
"type": "text",
"key": "shotgrid_script_key",
"label": "Script Key"
"label": "Shotgrid Script Key"
}
]
},
Expand Down

0 comments on commit cd86d6c

Please sign in to comment.