def get_new_tab_wdg(my): widget = Widget() span = SpanWdg() swap = SwapDisplayWdg.get_triangle_wdg() title = SpanWdg("Tab Creation") span.add(swap) span.add(title) span.add_style("float: left") widget.add(span) widget.add(HtmlElement.br()) # add the tab selector div = DivWdg() SwapDisplayWdg.create_swap_title(title, swap, div) tab_text = TextWdg("tab") tab_text.set_persistence() span = SpanWdg(css="med") span.add("Tab: ") span.add(tab_text) div.add(span) # parent index_text = TextWdg("parent_tab") index_text.set_persistence() span = SpanWdg(css="med") span.add("Parent Tab: ") span.add(index_text) span.add( HintWdg( "Enter the name of the tab that this will fall under. Leave empty to put on the main tab" )) div.add(span) # index index_text = TextWdg("index") index_text.set_attr("size", "4") index_text.set_persistence() span = SpanWdg(css="med") span.add("Index: ") span.add(index_text) span.add( HintWdg("Enter the numeric location for this tab to be placed")) div.add(span) WebContainer.register_cmd("CreateTabCmd") button = IconSubmitWdg("Create Tab", IconWdg.CREATE, True) div.add(button) widget.add(div) return widget
def get_new_tab_wdg(self): widget = Widget() span = SpanWdg() swap = SwapDisplayWdg.get_triangle_wdg() title = SpanWdg("Tab Creation") span.add(swap) span.add(title) span.add_style("float: left") widget.add(span) widget.add(HtmlElement.br() ) # add the tab selector div = DivWdg() SwapDisplayWdg.create_swap_title( title, swap, div) tab_text = TextWdg("tab") tab_text.set_persistence() span = SpanWdg(css="med") span.add("Tab: ") span.add(tab_text) div.add(span) # parent index_text = TextWdg("parent_tab") index_text.set_persistence() span = SpanWdg(css="med") span.add("Parent Tab: ") span.add(index_text) span.add(HintWdg("Enter the name of the tab that this will fall under. Leave empty to put on the main tab") ) div.add(span) # index index_text = TextWdg("index") index_text.set_attr("size", "4") index_text.set_persistence() span = SpanWdg(css="med") span.add("Index: ") span.add(index_text) span.add(HintWdg("Enter the numeric location for this tab to be placed") ) div.add(span) WebContainer.register_cmd("CreateTabCmd") button = IconSubmitWdg("Create Tab", IconWdg.CREATE, True) div.add(button) widget.add(div) return widget
def get_display(my): name = my.get_name() # get the sobject required by this input sobject = my.get_current_sobject() widget = DivWdg() # add an advanced widget text = TextWdg("%s" % name) text.set_attr("size", 90) value = sobject.get_value(name) text.set_value(value) div = DivWdg() # div.add("Advanced: ") div.add(text) widget.add(div) return widget
def get_display(self): name = self.get_name() # get the sobject required by this input sobject = self.get_current_sobject() widget = DivWdg() # add an advanced widget text = TextWdg("%s" % name) text.set_attr("size", 90) value = sobject.get_value(name) text.set_value(value) div = DivWdg() #div.add("Advanced: ") div.add(text) widget.add(div) return widget
def get_bottom_wdg(my, search_keys=[]): # check if the user has enabled it info = my.check_bottom_wdg() if info.get('check') == False: return None if info.get('mode') != 'total': top = DivWdg() top.add( "Only [total] is supported. Please change it in Edit Column Definition" ) return top my.today = datetime.date.today() if my.is_refresh: top = Widget() else: top = DivWdg() days = [] for date in my.dates: days.append(date.strftime("%Y_%m_%d")) today = my.today.strftime("%Y_%m_%d") table = Table() top.add(table) row_list = [my.ST_ROW] if my.show_overtime: row_list.append(my.OT_ROW) for row_to_draw in row_list: table.add_row() table.add_color("color", "color") table.add_styles("width: %spx; float: left" % my.table_width) td = table.add_blank_cell() td.add_style("min-width: %spx" % (my.MONTH_WIDTH + my.LEFT_WIDTH + 8)) time_prefix = '' if row_to_draw == my.OT_ROW: time_prefix = 'ot' div = DivWdg() div.add("OT") div.add_styles( 'text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.STT_ROW: time_prefix = 'stt' div = DivWdg() div.add("ST") div.add_styles( 'text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.ENT_ROW: time_prefix = 'ent' div = DivWdg() div.add("ET") div.add_styles( 'text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) for idx, day in enumerate(days): day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add_style("width: %spx" % my.day_width) # keep it as text input for consistent alignment text = TextWdg("%sday_%s" % (time_prefix, day)) if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[idx] else: sobj_daily_dict = my.summary_st[idx] if search_keys: sobj_daily_sub_dict = Common.subset_dict( sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict daily_total = 0 for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td.add(text) text.add_class("spt_day%s" % (time_prefix)) text.add_style("width: %spx" % (my.day_width - 2)) #text.add_style("width: 100%") text.add_style("text-align: right") text.add_style("padding-left: 2px") text.add_style('font-weight: 500') text.set_attr("readonly", "readonly") # grey out the text color text.add_color('color', 'color', +40) if day == today: text.add_style("border: solid 1px black") elif idx in [0, 6]: if row_to_draw == my.OT_ROW: # FOOTER: Overtime, weekends text.add_color("background", "background2", modifier=[-15, 0, 5]) else: # FOOTER: Straight time, weekends text.add_color("background", "background2", modifier=[0, 15, 20]) text = TextWdg("total") daily_total = 0 if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[7] else: sobj_daily_dict = my.summary_st[7] if search_keys: sobj_daily_sub_dict = Common.subset_dict( sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td = table.add_cell(text) text.add_class("spt_total%s" % (time_prefix)) # does not look good in FF #td.add_style("border-width: 0 0 0 1") #td.add_style("border-style: solid") td.add_style("width: %spx" % my.day_width) text.add_styles( "font-weight: 500;width: %spx; text-align: right; padding-left: 2px" % (my.day_width)) text.set_attr("readonly", "readonly") text.add_color('color', 'color', +40) if row_to_draw == my.OT_ROW: # FOOTER: Overtime, total. text.add_color("background", "background2", modifier=[5, -15, 0]) else: # FOOTER: Straight time, total text.add_color("background", "background2", modifier=[20, 0, 15]) td = table.add_blank_cell() td.add_style('width', '100%') return top
def get_display(my): from tactic_client_lib import TacticServerStub login = Environment.get_login() user_name = login.get_login() user_name = user_name.replace('.','') barcodes = [] complete = False errors = '' first_loc_num1 = 5660 last_loc_num1 = 5991 first_loc_num2 = 6020 last_loc_num2 = 6037 if 'barcodes' in my.kwargs.keys(): barcodes = my.kwargs.get('barcodes').split(',') if 'complete' in my.kwargs.keys(): complete = my.kwargs.get('complete') if 'errors' in my.kwargs.keys(): errors = my.kwargs.get('errors') table = Table() table.add_attr('id','tracker_%s' % user_name) table.add_attr('class','tracker_%s' % user_name) if errors not in [None,'']: table.add_row() csp1 = table.add_cell(errors) csp1.add_attr('colspan','2') count = 0 if complete: server = TacticServerStub.get() t2 = Table() for bc in barcodes: if 'EMP' in bc: that_user = server.eval("@SOBJECT(sthpw/login['barcode','%s'])" % bc) if that_user: that_user = that_user[0] else: that_user = {'login': '******'} t2.add_row() t2.add_cell('USER: '******'login')) t2.add_cell('BARCODE: %s' % bc) for bc in barcodes: bc_num = 555555555 if '2G' in bc: bc_num = bc.replace('2G','').replace('A','').replace('B','').replace('C','').replace('V','') bc_num = int(bc_num) if (bc_num >= first_loc_num1 and bc_num <= last_loc_num1) or (bc_num >= first_loc_num2 and bc_num <= last_loc_num2): that_location = server.eval("@SOBJECT(twog/inhouse_locations['barcode','%s'])" % bc) if that_location: that_location = that_location[0] else: that_location = {'name': 'UNKNOWN LOCATION'} t2.add_row() t2.add_cell('LOCATION: ') t2.add_cell(that_location.get('name')) t2.add_cell('BARCODE: %s' % bc) for bc in barcodes: bc_num = 555555555 if '2G' in bc: bc_num = bc.replace('2G','').replace('A','').replace('B','').replace('C','').replace('V','') bc_num = int(bc_num) #if 'LOC' not in bc and 'EMP' not in bc: if not ((bc_num >= first_loc_num1 and bc_num <= last_loc_num1) or (bc_num >= first_loc_num2 and bc_num <= last_loc_num2)) and 'EMP' not in bc: that_src = server.eval("@SOBJECT(twog/source['barcode','%s'])" % bc) if that_src: that_src = that_src[0] else: that_src = {'title': 'UNKNOWN SOURCE', 'episode': '', 'season': '', 'part': ''} full_name = that_src.get('title') if that_src.get('episode') not in [None,'']: full_name = '%s EPISODE: %s' % (full_name, that_src.get('episode')) if that_src.get('season') not in [None,'']: full_name = '%s SEASON: %s' % (full_name, that_src.get('season')) if that_src.get('part') not in [None,'']: full_name = '%s PART: %s' % (full_name, that_src.get('part')) t2.add_row() t2.add_cell('SOURCE: ') t2.add_cell(full_name) t2.add_cell('BARCODE: %s' % bc) table.add_row() csp2 = table.add_cell(t2) csp2.add_attr('colspan','2') else: for bc in barcodes: table.add_row() table.add_cell('BARCODE: ') oldtxt = TextWdg('oldtxt') oldtxt.set_attr('id', 'txt_%s' % count) oldtxt.set_value(bc) table.add_cell(oldtxt) count = count + 1 table.add_row() nextbc = TextWdg('nextbc') nextbc.add_attr('id', 'txt_%s' % count) nextbc.add_behavior(my.get_entry_bvr(user_name)) table.add_cell('Barcode: ') table.add_cell(nextbc) widget = DivWdg() widget.add(table) widget.add_behavior(my.get_on_load_js(count)) return widget
def get_bottom_wdg(my, search_keys=[]): # check if the user has enabled it info = my.check_bottom_wdg() if info.get('check') == False: return None if info.get('mode') != 'total': top = DivWdg() top.add("Only [total] is supported. Please change it in Edit Column Definition") return top my.today = datetime.date.today() if my.is_refresh: top = Widget() else: top = DivWdg() days = [] for date in my.dates: days.append( date.strftime("%Y_%m_%d") ) today = my.today.strftime("%Y_%m_%d") table = Table() top.add(table) row_list = [my.ST_ROW] if my.show_overtime: row_list.append( my.OT_ROW) for row_to_draw in row_list: table.add_row() table.add_color("color", "color") table.add_styles("width: %spx; float: left"%my.table_width) td = table.add_blank_cell() td.add_style("min-width: %spx" % (my.MONTH_WIDTH + my.LEFT_WIDTH+8)) time_prefix = '' if row_to_draw == my.OT_ROW: time_prefix = 'ot' div = DivWdg() div.add("OT") div.add_styles('text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.STT_ROW: time_prefix = 'stt' div = DivWdg() div.add("ST") div.add_styles('text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.ENT_ROW: time_prefix = 'ent' div = DivWdg() div.add("ET") div.add_styles('text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) for idx, day in enumerate(days): day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add_style("width: %spx" % my.day_width) # keep it as text input for consistent alignment text = TextWdg("%sday_%s" % (time_prefix, day) ) if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[idx] else: sobj_daily_dict = my.summary_st[idx] if search_keys: sobj_daily_sub_dict = Common.subset_dict(sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict daily_total = 0 for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td.add(text) text.add_class("spt_day%s" % (time_prefix)) text.add_style("width: %spx"%(my.day_width-2)) #text.add_style("width: 100%") text.add_style("text-align: right") text.add_style("padding-left: 2px") text.add_style('font-weight: 500') text.set_attr("readonly", "readonly") # grey out the text color text.add_color('color', 'color', +40) if day == today: text.add_style("border: solid 1px black") elif idx in [0,6]: if row_to_draw == my.OT_ROW: # FOOTER: Overtime, weekends text.add_color("background", "background2", modifier=[-15,0,5]) else: # FOOTER: Straight time, weekends text.add_color("background", "background2", modifier=[0,15,20]) text = TextWdg("total") daily_total = 0 if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[7] else: sobj_daily_dict = my.summary_st[7] if search_keys: sobj_daily_sub_dict = Common.subset_dict(sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td = table.add_cell(text) text.add_class("spt_total%s" % (time_prefix)) # does not look good in FF #td.add_style("border-width: 0 0 0 1") #td.add_style("border-style: solid") td.add_style("width: %spx"%my.day_width) text.add_styles("font-weight: 500;width: %spx; text-align: right; padding-left: 2px"%(my.day_width)) text.set_attr("readonly", "readonly") text.add_color('color', 'color', +40) if row_to_draw == my.OT_ROW: # FOOTER: Overtime, total. text.add_color("background", "background2", modifier=[5,-15,0]) else: # FOOTER: Straight time, total text.add_color("background", "background2", modifier=[20,0,15]) td = table.add_blank_cell() td.add_style('width','100%') return top
def get_display(self): top = DivWdg() top.add_color("background", "background") top.add_color("color", "color") top.add_style("min-width: 600px") os_name = os.name top.set_unique_id() top.add_smart_style("spt_info_title", "background", self.top.get_color("background3")) top.add_smart_style("spt_info_title", "padding", "3px") top.add_smart_style("spt_info_title", "font-weight", "bold") # server title_div = DivWdg() top.add(title_div) title_div.add("Server") title_div.add_class("spt_info_title") os_div = DivWdg() top.add(os_div) os_info = platform.uname() try: os_login = os.getlogin() except Exception: os_login = os.environ.get("LOGNAME") table = Table() table.add_color("color", "color") table.add_style("margin: 10px") os_div.add(table) for i, title in enumerate( ['OS', 'Node Name', 'Release', 'Version', 'Machine']): table.add_row() td = table.add_cell("%s: " % title) td.add_style("width: 150px") table.add_cell(os_info[i]) table.add_row() table.add_cell("CPU Count: ") try: import multiprocessing table.add_cell(multiprocessing.cpu_count()) except (ImportError, NotImplementedError): table.add_cell("n/a") table.add_row() table.add_cell("Login: "******"Python") title_div.add_class("spt_info_title") table = Table() table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("Version: ") td.add_style("width: 150px") table.add_cell(sys.version) # client title_div = DivWdg() top.add(title_div) title_div.add("Client") title_div.add_class("spt_info_title") web = WebContainer.get_web() user_agent = web.get_env("HTTP_USER_AGENT") table = Table() table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("User Agent: ") td.add_style("width: 150px") table.add_cell(user_agent) table.add_row() td = table.add_cell("TACTIC User: "******"Performance Test") title_div.add_class("spt_info_title") performance_wdg = PerformanceWdg() top.add(performance_wdg) top.add('<br/>') # mail server title_div = DivWdg() top.add(title_div) title_div.add("Mail Server") title_div.add_class("spt_info_title") table = Table(css='email_server') table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("Server: ") td.add_style("width: 150px") mailserver = Config.get_value("services", "mailserver") has_mailserver = True if mailserver: table.add_cell(mailserver) else: table.add_cell("None configured") has_mailserver = False login = Login.get_by_login('admin') login_email = login.get_value('email') table.add_row() td = table.add_cell("From: ") td.add_style("width: 150px") text = TextWdg('email_from') text.set_attr('size', '40') text.set_value(login_email) text.add_class('email_from') table.add_cell(text) table.add_row() td = table.add_cell("To: ") td.add_style("width: 150px") text = TextWdg('email_to') text.set_attr('size', '40') text.add_class('email_to') text.set_value(login_email) table.add_cell(text) button = ActionButtonWdg(title='Email Send Test') table.add_row_cell('<br/>') table.add_row() table.add_cell(button) button.add_style("float: right") button.add_behavior({ 'type': 'click_up', 'has_mailserver': has_mailserver, 'cbjs_action': ''' if (!bvr.has_mailserver) { spt.alert('You have to fill in mailserver and possibly other mail related options in the TACTIC config file to send email.'); return; } var s = TacticServerStub.get(); try { spt.app_busy.show('Sending email'); var from_txt = bvr.src_el.getParent('.email_server').getElement('.email_from'); var to_txt = bvr.src_el.getParent('.email_server').getElement('.email_to'); var rtn = s.execute_cmd('pyasm.command.EmailTriggerTestCmd', {'sender_email': from_txt.value, 'recipient_emails': to_txt.value.split(','), 'msg': 'Simple Email Test by TACTIC'} ); if (rtn.status == 'OK') { spt.info("Email sent successfully to " + to_txt.value) } } catch(e) { spt.alert(spt.exception.handler(e)); } spt.app_busy.hide(); ''' }) top.add('<br/>') self.handle_directories(top) #table.add_row() #td = table.add_cell("TACTIC User: ") #table.add_cell( web.get_user_name() ) top.add('<br/>') top.add(DivWdg('Link Test', css='spt_info_title')) top.add('<br/>') top.add(LinkLoadTestWdg()) top.add('<br/>') self.handle_python_script_test(top) top.add('<br/>') self.handle_sidebar_clear(top) return top
def get_first_row_wdg(self): # read the csv file self.file_path = "" div = DivWdg() div.add(self.get_upload_wdg()) if not self.search_type: return div if not self.file_path: return div if not self.file_path.endswith(".csv"): div.add("Uploaded file [%s] is not a csv file" % self.file_path) return div if not os.path.exists(self.file_path): raise Exception("Path '%s' does not exists" % self.file_path) div.add(HtmlElement.br(2)) div.add( HtmlElement. b("The following is taken from first line in the uploaded csv file. Select the appropriate column to match." )) div.add(HtmlElement.br()) div.add( HtmlElement.b( "Make sure you have all the required columns** in the csv.")) option_div = DivWdg() option_div.add_style("float: left") option_div.add_style("margin-right: 30px") option_div.add("<p>3. Parsing Options:</p>") self.search_type_obj = SearchType.get(self.search_type) # first row and second row option_div.add(HtmlElement.br(2)) option_div.add("Use Title Row: ") title_row_checkbox = FilterCheckboxWdg("has_title") title_row_checkbox.set_default_checked() option_div.add(title_row_checkbox) option_div.add( HintWdg( "Set this to use the first row as a title row to match up columns in the database" )) option_div.add(HtmlElement.br(2)) option_div.add("Sample Data Row: ") data_row_text = TextWdg("data_row") data_row_text.set_attr("size", "3") option_div.add(data_row_text) option_div.add( HintWdg( "Set this as a sample data row to match the columns to the database" )) option_div.add(HtmlElement.br(2)) div.add(option_div) self.has_title = title_row_checkbox.is_checked() # parse the first fow csv_parser = CsvParser(self.file_path) if self.has_title: csv_parser.set_has_title_row(True) else: csv_parser.set_has_title_row(False) csv_parser.parse() csv_titles = csv_parser.get_titles() csv_data = csv_parser.get_data() data_row = data_row_text.get_value() if not data_row: data_row = 0 else: try: data_row = int(data_row) except ValueError: data_row = 0 if data_row >= len(csv_data): data_row = len(csv_data) - 1 data_row_text.set_value(data_row) table = Table() table.set_attr("cellpadding", "10") table.add_row() table.add_header("CSV Column Value") table.add_header("TACTIC Column") table.add_header("Create New Column") columns = self.search_type_obj.get_columns() search_type = self.search_type_obj.get_base_search_type() sobj = SObjectFactory.create(search_type) required_columns = sobj.get_required_columns() row = csv_data[data_row] labels = [] for column in columns: if column in required_columns: label = '%s**' % column else: label = column labels.append(label) for j, cell in enumerate(row): table.add_row() table.add_cell(cell) column_select = SelectWdg("column_%s" % j) column_select.add_event( "onchange", "if (this.value!='') {set_display_off('new_column_div_%s')} else {set_display_on('new_column_div_%s')}" % (j, j)) column_select.add_empty_option("-- Select --") column_select.set_option("values", columns) column_select.set_option("labels", labels) # only set the value if it is actually in there if csv_titles[j] in columns: column_select.set_option("default", csv_titles[j]) column_select.set_persist_on_submit() column_select_value = column_select.get_value() display = column_select.get_buffer_display() td = table.add_cell(display) if csv_titles[j] not in columns: td.add(" <b style='color: red'>*</b>") # new property new_column_div = DivWdg() if column_select_value: new_column_div.add_style("display", "none") else: new_column_div.add_style("display", "block") new_column_div.set_id("new_column_div_%s" % j) td = table.add_cell(new_column_div) text = TextWdg("new_column_%s" % j) text.set_persist_on_submit() if self.has_title: text.set_value(csv_titles[j]) new_column_div.add(" ... or ...") new_column_div.add(text) self.num_columns = len(row) hidden = HiddenWdg("num_columns", self.num_columns) # need to somehow specify defaults for columns div.add(table) div.add("<br/><br/>") div.add(self.get_preview_wdg()) return div
def get_display(self): top = DivWdg() top.add_color("background", "background") top.add_color("color", "color") top.add_style("min-width: 600px") os_name = os.name top.set_unique_id() top.add_smart_style("spt_info_title", "background", self.top.get_color("background3")) top.add_smart_style("spt_info_title", "padding", "3px") top.add_smart_style("spt_info_title", "font-weight", "bold") # server title_div = DivWdg() top.add(title_div) title_div.add("Server") title_div.add_class("spt_info_title") os_div = DivWdg() top.add(os_div) os_info = platform.uname() try: os_login = os.getlogin() except Exception: os_login = os.environ.get("LOGNAME") table = Table() table.add_color("color", "color") table.add_style("margin: 10px") os_div.add(table) for i, title in enumerate(['OS','Node Name','Release','Version','Machine']): table.add_row() td = table.add_cell("%s: " % title) td.add_style("width: 150px") table.add_cell( os_info[i] ) table.add_row() table.add_cell("CPU Count: ") try : import multiprocessing table.add_cell( multiprocessing.cpu_count() ) except (ImportError, NotImplementedError): table.add_cell( "n/a" ) table.add_row() table.add_cell("Login: "******"Python") title_div.add_class("spt_info_title") table = Table() table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("Version: ") td.add_style("width: 150px") table.add_cell( sys.version ) # client title_div = DivWdg() top.add(title_div) title_div.add("Client") title_div.add_class("spt_info_title") web = WebContainer.get_web() user_agent = web.get_env("HTTP_USER_AGENT") table = Table() table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("User Agent: ") td.add_style("width: 150px") table.add_cell( user_agent ) table.add_row() td = table.add_cell("TACTIC User: "******"Performance Test") title_div.add_class("spt_info_title") performance_wdg = PerformanceWdg() top.add(performance_wdg) top.add('<br/>') # mail server title_div = DivWdg() top.add(title_div) title_div.add("Mail Server") title_div.add_class("spt_info_title") table = Table(css='email_server') table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("Server: ") td.add_style("width: 150px") mailserver = Config.get_value("services", "mailserver") has_mailserver = True if mailserver: table.add_cell( mailserver ) else: table.add_cell("None configured") has_mailserver = False login = Login.get_by_login('admin') login_email = login.get_value('email') table.add_row() td = table.add_cell("From: ") td.add_style("width: 150px") text = TextWdg('email_from') text.set_attr('size', '40') text.set_value(login_email) text.add_class('email_from') table.add_cell(text) table.add_row() td = table.add_cell("To: ") td.add_style("width: 150px") text = TextWdg('email_to') text.set_attr('size', '40') text.add_class('email_to') text.set_value(login_email) table.add_cell(text) button = ActionButtonWdg(title='Email Send Test') table.add_row_cell('<br/>') table.add_row() table.add_cell(button) button.add_style("float: right") button.add_behavior( { 'type': 'click_up', 'has_mailserver': has_mailserver, 'cbjs_action': ''' if (!bvr.has_mailserver) { spt.alert('You have to fill in mailserver and possibly other mail related options in the TACTIC config file to send email.'); return; } var s = TacticServerStub.get(); try { spt.app_busy.show('Sending email'); var from_txt = bvr.src_el.getParent('.email_server').getElement('.email_from'); var to_txt = bvr.src_el.getParent('.email_server').getElement('.email_to'); var rtn = s.execute_cmd('pyasm.command.EmailTriggerTestCmd', {'sender_email': from_txt.value, 'recipient_emails': to_txt.value.split(','), 'msg': 'Simple Email Test by TACTIC'} ); if (rtn.status == 'OK') { spt.info("Email sent successfully to " + to_txt.value) } } catch(e) { spt.alert(spt.exception.handler(e)); } spt.app_busy.hide(); ''' }) top.add('<br/>') self.handle_directories(top) #table.add_row() #td = table.add_cell("TACTIC User: ") #table.add_cell( web.get_user_name() ) top.add('<br/>') top.add(DivWdg('Link Test', css='spt_info_title')) top.add('<br/>') top.add(LinkLoadTestWdg()) top.add('<br/>') self.handle_python_script_test(top) top.add('<br/>') self.handle_sidebar_clear(top) return top
def get_first_row_wdg(my): # read the csv file my.file_path = "" div = DivWdg() div.add( my.get_upload_wdg() ) if not my.search_type: return div if not my.file_path: return div if not my.file_path.endswith(".csv"): div.add( "Uploaded file [%s] is not a csv file"% my.file_path) return div if not os.path.exists(my.file_path): raise Exception("Path '%s' does not exists" % my.file_path) div.add(HtmlElement.br(2)) div.add( HtmlElement.b("The following is taken from first line in the uploaded csv file. Select the appropriate column to match.") ) div.add(HtmlElement.br()) div.add( HtmlElement.b("Make sure you have all the required columns** in the csv.")) option_div = DivWdg() option_div.add_style("float: left") option_div.add_style("margin-right: 30px") option_div.add("<p>3. Parsing Options:</p>") my.search_type_obj = SearchType.get(my.search_type) # first row and second row option_div.add( HtmlElement.br(2) ) option_div.add("Use Title Row: ") title_row_checkbox = FilterCheckboxWdg("has_title") title_row_checkbox.set_default_checked() option_div.add(title_row_checkbox) option_div.add( HintWdg("Set this to use the first row as a title row to match up columns in the database") ) option_div.add( HtmlElement.br(2) ) option_div.add("Sample Data Row: ") data_row_text = TextWdg("data_row") data_row_text.set_attr("size", "3") option_div.add(data_row_text) option_div.add( HintWdg("Set this as a sample data row to match the columns to the database") ) option_div.add( HtmlElement.br(2) ) div.add(option_div) my.has_title = title_row_checkbox.is_checked() # parse the first fow csv_parser = CsvParser(my.file_path) if my.has_title: csv_parser.set_has_title_row(True) else: csv_parser.set_has_title_row(False) csv_parser.parse() csv_titles = csv_parser.get_titles() csv_data = csv_parser.get_data() data_row = data_row_text.get_value() if not data_row: data_row = 0 else: try: data_row = int(data_row) except ValueError: data_row = 0 if data_row >= len(csv_data): data_row = len(csv_data)-1 data_row_text.set_value(data_row) table = Table() table.set_attr("cellpadding", "10") table.add_row() table.add_header("CSV Column Value") table.add_header("TACTIC Column") table.add_header("Create New Column") columns = my.search_type_obj.get_columns() search_type = my.search_type_obj.get_base_search_type() sobj = SObjectFactory.create(search_type) required_columns = sobj.get_required_columns() row = csv_data[data_row] labels = [] for column in columns: if column in required_columns: label = '%s**'%column else: label = column labels.append(label) for j, cell in enumerate(row): table.add_row() table.add_cell(cell) column_select = SelectWdg("column_%s" % j) column_select.add_event("onchange", "if (this.value!='') {set_display_off('new_column_div_%s')} else {set_display_on('new_column_div_%s')}" % (j,j)) column_select.add_empty_option("-- Select --") column_select.set_option("values", columns) column_select.set_option("labels", labels) # only set the value if it is actually in there if csv_titles[j] in columns: column_select.set_option("default", csv_titles[j]) column_select.set_persist_on_submit() column_select_value = column_select.get_value() display = column_select.get_buffer_display() td = table.add_cell( display ) if csv_titles[j] not in columns: td.add(" <b style='color: red'>*</b>") # new property new_column_div = DivWdg() if column_select_value: new_column_div.add_style("display", "none") else: new_column_div.add_style("display", "block") new_column_div.set_id("new_column_div_%s" % j) td = table.add_cell( new_column_div ) text = TextWdg("new_column_%s" % j) text.set_persist_on_submit() if my.has_title: text.set_value(csv_titles[j]) new_column_div.add( " ... or ..." ) new_column_div.add( text ) my.num_columns = len(row) hidden = HiddenWdg("num_columns", my.num_columns) # need to somehow specify defaults for columns div.add(table) div.add("<br/><br/>") div.add(my.get_preview_wdg()) return div