How to use step_group method in grail

Best Python code snippet using grail_python

shot_review.py

Source:shot_review.py Github

copy

Full Screen

1# -*- coding: utf-8 -*-2import os3import subprocess4from Qt.QtWidgets import *5from Qt.QtCore import *6from Qt.QtGui import *7import pipeGlobal8from miraLibs.pipeLibs import pipeFile9reload(pipeFile)10from miraLibs.dbLibs import db_api11class ListWidget(QListWidget):12 def __init__(self, removable=False, parent=None):13 super(ListWidget, self).__init__(parent)14 self.removable = removable15 self.setFocusPolicy(Qt.NoFocus)16 self.setSortingEnabled(True)17 self.setSelectionMode(QAbstractItemView.ExtendedSelection)18 self.init()19 def init(self):20 if self.removable:21 self.setContextMenuPolicy(Qt.CustomContextMenu)22 self.customContextMenuRequested.connect(self.show_step_menu)23 def show_step_menu(self, pos):24 global_pos = self.mapToGlobal(pos)25 menu = QMenu(self)26 remove_action = QAction("Remove", self)27 remove_action.triggered.connect(self.remove_selection)28 remove_all_action = QAction("Remove All", self)29 remove_all_action.triggered.connect(self.remove_all)30 menu.addAction(remove_action)31 menu.addAction(remove_all_action)32 menu.exec_(global_pos)33 def remove_selection(self):34 selected_items = self.selectedItems()35 if not selected_items:36 return37 for item in selected_items:38 self.takeItem(self.row(item))39 def remove_all(self):40 self.clear()41 def mousePressEvent(self, event):42 point = event.pos()43 item = self.itemAt(point)44 if not item:45 self.clearSelection()46 super(ListWidget, self).mousePressEvent(event)47class MyGroup(QGroupBox):48 def __init__(self, label_name=None, check_name=None, parent=None):49 super(MyGroup, self).__init__(parent)50 self.label_name = label_name51 self.check_name = check_name52 main_layout = QVBoxLayout(self)53 main_layout.setSpacing(5)54 main_layout.setContentsMargins(0, 0, 0, 0)55 name_label = QLabel()56 name_label.setText('<b>%s</b>' % self.label_name)57 name_label.setAlignment(Qt.AlignCenter)58 self.check_box = QCheckBox(self.check_name)59 self.list_widget = ListWidget(False, self)60 main_layout.addWidget(name_label)61 main_layout.addWidget(self.check_box)62 main_layout.addWidget(self.list_widget)63 self.check_box.stateChanged.connect(self.on_check_state_changed)64 def on_check_state_changed(self):65 if self.check_box.isChecked():66 self.list_widget.setEnabled(False)67 else:68 self.list_widget.setEnabled(True)69 self.list_widget.clearSelection()70class ShotReview(QDialog):71 def __init__(self, parent=None):72 super(ShotReview, self).__init__(parent)73 self.resize(800, 730)74 self.setWindowTitle("Shot Review")75 self.setWindowFlags(Qt.Window)76 self.__projects = pipeGlobal.projects77 self.current_project = pipeGlobal.current_project78 self.__db = db_api.DbApi(self.current_project).db_obj79 self.__shot_step = pipeGlobal.Project(self.current_project).shot_steps80 self.play_list = list()81 main_layout = QVBoxLayout(self)82 main_layout.setContentsMargins(0, 0, 0, 0)83 project_layout = QHBoxLayout()84 project_label = QLabel("Project")85 self.project_cbox = QComboBox()86 project_layout.addWidget(project_label)87 project_layout.addWidget(self.project_cbox)88 project_layout.setStretchFactor(project_label, 0)89 project_layout.setStretchFactor(self.project_cbox, 1)90 list_layout = QHBoxLayout()91 self.sequence_group = MyGroup("sequence", "All Sequences", self)92 self.sequence_group.check_box.setEnabled(False)93 self.sequence_group.list_widget.setSelectionMode(QListWidget.SingleSelection)94 self.shot_group = MyGroup("shot", "All Shots", self)95 self.step_group = MyGroup("step", "Latest", self)96 self.step_group.list_widget.setSelectionMode(QListWidget.SingleSelection)97 list_layout.addWidget(self.sequence_group)98 list_layout.addWidget(self.shot_group)99 list_layout.addWidget(self.step_group)100 btn_layout = QHBoxLayout()101 self.add_to_playlist_btn = QPushButton("Add to playlist")102 btn_layout.addStretch()103 btn_layout.addWidget(self.add_to_playlist_btn)104 self.play_list = ListWidget(True, self)105 play_layout = QHBoxLayout()106 self.play_btn = QPushButton("Play")107 play_layout.addStretch()108 play_layout.addWidget(self.play_btn)109 main_layout.addLayout(project_layout)110 main_layout.addLayout(list_layout)111 main_layout.addLayout(btn_layout)112 main_layout.addWidget(self.play_list)113 main_layout.addLayout(play_layout)114 self.init_project()115 self.init_sequence()116 self.set_signals()117 self.set_style()118 def set_style(self):119 qss_path = os.path.abspath(os.path.join(__file__, "..", "style.qss"))120 qss_path = qss_path.replace("\\", "/")121 self.setStyle(QStyleFactory.create('plastique'))122 self.setStyleSheet(open(qss_path, 'r').read())123 def init_project(self):124 self.project_cbox.addItems(self.__projects)125 self.project_cbox.setCurrentIndex(self.project_cbox.findText(self.current_project))126 def init_sequence(self):127 sequences = self.__db.get_sequence()128 self.sequence_group.list_widget.clear()129 self.sequence_group.list_widget.addItems(sequences)130 def set_signals(self):131 self.project_cbox.currentIndexChanged.connect(self.change_project)132 self.sequence_group.list_widget.itemClicked.connect(self.on_sequence_clicked)133 self.shot_group.list_widget.itemClicked.connect(self.on_shot_clicked)134 self.shot_group.check_box.stateChanged.connect(self.on_shot_clicked)135 self.add_to_playlist_btn.clicked.connect(self.add_to_playlist)136 self.play_btn.clicked.connect(self.play)137 def change_project(self, index):138 self.current_project = self.__projects[index]139 self.__db = db_api.DbApi(self.current_project).db_obj140 self.init_sequence()141 self.shot_group.list_widget.clear()142 self.shot_group.check_box.setChecked(False)143 def on_sequence_clicked(self, item):144 self.step_group.check_box.setChecked(False)145 self.step_group.check_box.setEnabled(False)146 self.step_group.list_widget.clear()147 self.shot_group.check_box.setChecked(False)148 self.shot_group.list_widget.clear()149 shots = self.__db.get_all_shots(item.text())150 if shots:151 shot_names = [shot["code"] for shot in shots]152 self.shot_group.list_widget.addItems(shot_names)153 def on_shot_clicked(self):154 self.step_group.check_box.setEnabled(True)155 self.step_group.list_widget.clear()156 self.step_group.list_widget.addItems(self.__shot_step)157 def get_selected_in_group(self, custom_group):158 if custom_group.check_box.isChecked():159 if custom_group is self.step_group:160 return ["newest"]161 items = [custom_group.list_widget.item(i) for i in xrange(custom_group.list_widget.count())]162 else:163 items = custom_group.list_widget.selectedItems()164 if not items:165 return166 items = [str(item.text()) for item in items]167 items.sort()168 return items169 def parse_selected(self):170 play_list = list()171 project = str(self.project_cbox.currentText())172 sequence = self.get_selected_in_group(self.sequence_group)173 shots = self.get_selected_in_group(self.shot_group)174 step_list = self.get_selected_in_group(self.step_group)175 if not all((sequence, shots, step_list)):176 return177 for seq in sequence:178 for shot in shots:179 if step_list == ["newest"]:180 step_list = ["Comp", "CompLay", "Lgt", "LgtLay", "Sim", "Anim", "AnimLay"]181 for step in step_list:182 video = pipeFile.get_task_video_file(project, "Shot", seq, shot, step, step)183 if video and os.path.isfile(video):184 play_list.append(video)185 break186 return play_list187 def add_to_playlist(self):188 play_list = self.parse_selected()189 if not play_list:190 return191 all_items = [self.play_list.item(i).text() for i in xrange(self.play_list.count())]192 play_list = [i for i in play_list if i not in all_items]193 self.play_list.addItems(play_list)194 def play(self):195 items = [self.play_list.item(i) for i in xrange(self.play_list.count())]196 if not items:197 return198 play_list = [str(item.text()) for item in items]199 cmd_str = "rv %s" % " ".join(play_list)200 subprocess.Popen(cmd_str, shell=True)201if __name__ == "__main__":202 import sys203 app = QApplication(sys.argv)204 sr = ShotReview()205 sr.show()...

Full Screen

Full Screen

steps.py

Source:steps.py Github

copy

Full Screen

1import sys2import traceback3from unittest import TestCase4import grail.settings as settings5import grail.state as state6from grail.step_info import StepInfo, StepResults7def _generate_step_stack():8 stack = traceback.extract_stack()9 step_index = next(i for i, e in enumerate(stack) if e[0].endswith('steps.py'))10 stack = stack[step_index - 1:]11 stack = filter(lambda e: not (e[0].endswith('steps.py') or e[0].endswith('step_info.py')), stack)12 return stack13class _RedirectOut(object):14 def __init__(self):15 self.temp = sys.stdout16 self.step_messages = []17 self.delimited_messages = []18 self.string = ''19 def write(self, s):20 if s.strip(' '):21 self.delimited_messages.append(s)22 if not s.strip('\n'):23 self.string = ''.join(self.delimited_messages)24 self.delimited_messages = []25 self.step_messages.append(self.string)26 def flush(self):27 pass28 def out_to_lst(self):29 sys.stdout = self30 def out_to_console(self):31 sys.stdout = self.temp32 def get_captured_output(self):33 def convert(line):34 final_line = state.indentation + line35 if isinstance(final_line, unicode):36 return final_line37 return unicode(final_line, errors='replace')38 return ''.join(map(convert, self.step_messages))39def _should_skip_step():40 if settings.disable_steps:41 return True42 if settings.export_mode:43 return False44 for filename, line_number, func_name, text in traceback.extract_stack():45 if func_name in settings.skip_func:46 return True47 if state.treat_nested_steps_as_methods_global and state.step_execution_started:48 return True49class GrailValidationException(Exception):50 pass51def _validate_step_info(step_info):52 if step_info.step_group and step_info.treat_nested_steps_as_methods:53 raise GrailValidationException('Step logic disabling is not applicable for step groups')54 if not step_info.step_group and state.step_execution_started:55 raise GrailValidationException('Step is called from another step (without group): %s' %56 step_info.function.func_name)57def _execute(step_info):58 if _should_skip_step():59 return step_info.run_function()60 redirected_out = _RedirectOut()61 redirected_out.out_to_lst()62 state.indentation = state.indentation + settings.indentation_const63 _validate_step_info(step_info)64 output, result, exception_instance = None, None, None65 def print_to_console():66 redirected_out.out_to_console()67 state.step_execution_started = False68 console_message = redirected_out.get_captured_output()69 state.indentation = state.indentation[:-len(settings.indentation_const)]70 print_message = step_info.get_description(output, result, exception_instance)71 if console_message:72 print_message += '\n'73 print_message += console_message.rstrip()74 print75 print_message76 try:77 if state.pending_step or state.step_first_error is not None:78 result = StepResults.IGNORED79 elif step_info.pending:80 result = StepResults.PENDING81 state.pending_step = True82 else:83 if step_info.step_group:84 output = step_info.run_function()85 if state.step_first_error:86 if isinstance(state.step_first_error, TestCase.failureException):87 result = StepResults.FAILED88 else:89 result = StepResults.ERROR90 elif state.pending_step:91 result = StepResults.PENDING92 else:93 result = StepResults.PASSED94 else:95 state.step_execution_started = True96 state.treat_nested_steps_as_methods_global = step_info.treat_nested_steps_as_methods97 if not settings.export_mode:98 output = step_info.run_function()99 result = StepResults.PASSED100 except Exception as inst:101 if isinstance(inst, TestCase.failureException):102 result = StepResults.FAILED103 else:104 result = StepResults.ERROR105 if not state.is_test_wrapped:106 print_to_console()107 raise108 if step_info.step_group:109 raise GrailValidationException('Unexpected exception from step group: %s' % inst)110 if isinstance(inst, GrailValidationException):111 raise112 if not state.step_first_error:113 state.step_first_error = inst114 state.step_stack = _generate_step_stack()115 state.step_exception_traceback = sys.exc_info()[2]116 exception_instance = inst117 print_to_console()118 return output119def step(func=None, description='', pending=False, step_group=False, format_description=False,120 treat_nested_steps_as_methods=False, log_output=True, log_input=True):121 step_info = StepInfo()122 def wrapper(*args, **kwargs):123 step_info.args = args124 step_info.kwargs = kwargs125 return _execute(step_info)126 def params_wrapper(function):127 step_info.function = function128 return wrapper129 if func is None:130 step_info.description = description131 step_info.pending = pending132 step_info.step_group = step_group133 step_info.format_description = format_description134 step_info.treat_nested_steps_as_methods = treat_nested_steps_as_methods135 step_info.log_output = log_output136 step_info.log_input = log_input137 return params_wrapper138 else:139 step_info.function = func...

Full Screen

Full Screen

rollout_step_py3.py

Source:rollout_step_py3.py Github

copy

Full Screen

1# coding=utf-82# --------------------------------------------------------------------------3# Copyright (c) Microsoft Corporation. All rights reserved.4# Licensed under the MIT License. See License.txt in the project root for5# license information.6#7# Code generated by Microsoft (R) AutoRest Code Generator.8# Changes may cause incorrect behavior and will be lost if the code is9# regenerated.10# --------------------------------------------------------------------------11from msrest.serialization import Model12class RolloutStep(Model):13 """Defines a specific step on a target service unit.14 Variables are only populated by the server, and will be ignored when15 sending a request.16 All required parameters must be populated in order to send to Azure.17 :param name: Required. Name of the step.18 :type name: str19 :ivar status: Current state of the step.20 :vartype status: str21 :param step_group: The step group the current step is part of.22 :type step_group: str23 :ivar operation_info: Detailed information of specific action execution.24 :vartype operation_info:25 ~azure.mgmt.deploymentmanager.models.StepOperationInfo26 :ivar resource_operations: Set of resource operations that were performed,27 if any, on an Azure resource.28 :vartype resource_operations:29 list[~azure.mgmt.deploymentmanager.models.ResourceOperation]30 :ivar messages: Supplementary informative messages during rollout.31 :vartype messages: list[~azure.mgmt.deploymentmanager.models.Message]32 """33 _validation = {34 'name': {'required': True},35 'status': {'readonly': True},36 'operation_info': {'readonly': True},37 'resource_operations': {'readonly': True},38 'messages': {'readonly': True},39 }40 _attribute_map = {41 'name': {'key': 'name', 'type': 'str'},42 'status': {'key': 'status', 'type': 'str'},43 'step_group': {'key': 'stepGroup', 'type': 'str'},44 'operation_info': {'key': 'operationInfo', 'type': 'StepOperationInfo'},45 'resource_operations': {'key': 'resourceOperations', 'type': '[ResourceOperation]'},46 'messages': {'key': 'messages', 'type': '[Message]'},47 }48 def __init__(self, *, name: str, step_group: str=None, **kwargs) -> None:49 super(RolloutStep, self).__init__(**kwargs)50 self.name = name51 self.status = None52 self.step_group = step_group53 self.operation_info = None54 self.resource_operations = None...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run grail automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful