def show_form(cursor): return """ <form action="web.py" method="post" accept-charset="utf-8" style="padding:10px;"> <input type="hidden" name="mode" id="mode" value="emulate_user" /> <table border="0" cellspacing="0" cellpadding="5"> <tr> <td><label for="user_id">User:</label></td> <td>{user_id}</td> </tr> <tr> <td><label for="emulate_mode">Mode:</label></td> <td><input type="text" name="emulate_mode" id="emulate_mode" value="" /></td> </tr> <tr> <td colspan="2"> <input type="submit" value="Emulate" style="width:95%;" /> </td> </tr> </table> </form> """.format( user_id = html_f.option_box("user_id", common_q.get_all(cursor, user.User), element_property="username"), )
def main(cursor, query_filter=""): query_filter = common_f.get_val("filter", query_filter) if query_filter == "": error_dict = common_q.get_all(cursor, error.Error, where="fixed = False", orderby="timestamp DESC") elif query_filter == "today": today = datetime.date.today() today = time.mktime(today.timetuple()) error_dict = common_q.get_all( cursor, error.Error, where="timestamp >= %d AND fixed = False" % today, orderby="timestamp DESC" ) else: error_dict = common_q.get_all( cursor, error.Error, where="mode='%s' and fixed = False" % database_f.escape(query_filter), orderby="timestamp DESC", ) output = [] if len(error_dict) > 0: user_dict = common_q.get_all(cursor, user.User) user_dict[-1] = user.User(username="******") output.append( """<table border="0" cellspacing="0" cellpadding="5" style="width:100%;"> <tr class="row2"> <th>Date</th> <th>Mode</th> <th>Func Call</th> <th>Type</th> <th>User</th> <th colspan="2"> </th> </tr> """ ) i = 1 for error_id, the_error in error_dict.items(): i += 1 the_date = the_error.timestamp output.append( """ <tr class="row{row}" id="row{error_id}"> <td>{date}</td> <td>{mode}</td> <td>{function_call}</td> <td>{etype}</td> <td>{user}</td> <td class="block_cell"><a href="web.py?mode=edit_error&error={error_id}">View</a></td> <td class="block_cell"><a href="#" onclick="{onclick}">Fix</a></td> </tr>""".format( error_id=error_id, row=i % 2, etype=the_error.exception_type, date=common_f.display_date(the_date, "%d of %B at %H:%M"), mode="No mode specified" if the_error.mode == "" else the_error.mode, function_call="" if the_error.function_call == "" else the_error.function_call, user=user_dict[the_error.user_id].username, onclick="""$('#ajax_target').load('web.py', {'mode':'edit_error', 'error':'%d', 'sub_mode':'fix'}); $('#row%d').hide(); return false;""" % (error_id, error_id), ) ) output.append("</table>") else: output.append("<div style='padding:10px;'>No errors found</div>") modes = {} # Select all the groups possible query = """SELECT mode FROM errors GROUP BY mode""" try: cursor.execute(query) except Exception as e: raise Exception("Database error: %s\nQuery: %s" % (str(e.args[0]).replace("\n", ""), query)) for row in cursor: modes[row["mode"]] = row["mode"] page_data["Rows"] = len(error_dict) page_data["Title"] = "Error list (%d)" % len(error_dict) page_data[ "Filters" ] = """ <form action="web.py" method="get" accept-charset="utf-8" style="float: left;"> <a href="web.py?mode=list_errors">All errors</a> <a href="web.py?mode=list_errors&filter=today">Todays errors</a> <input type="hidden" name="mode" value="list_errors" /> {} <input type="submit" value="Sort by mode" /> </form> """.format( html_f.option_box("filter", modes, selected=query_filter) ) return "".join(output)
def test_form_elements(self): """There won't be a lot gained from testing the actual output of these functions so what we're going to do is ensure we get _some_ output and that we don't cause an exception""" self.test_targets.extend([ html_f.check_box, html_f.doubleclick_text, html_f.doubleclick_text_full, html_f.live_option_box, html_f.option_box, html_f.text_box, html_f.textarea, ]) # check_box(name, checked=False, custom_id=''): vals = itertools.product( ["name1", "name2"], [True, False], ["", "custom_id"], ) for args in vals: self.assertNotEqual(html_f.check_box(*args), "") # doubleclick_text(table, field, where_id, value, label_style="", size=10): vals = itertools.product( ["table1", ""], ["field1", ""], [0, 1, 2], ["value1", 5], ["", "font-weight:bold;"], [0, 5, 10], ) for args in vals: self.assertNotEqual(html_f.doubleclick_text(*args), "") # doubleclick_text_full(table, field, where_field, value, label_style="", size=10): vals = itertools.product( ["table1", ""], ["field1", ""], ["id=5", "name='x'"], [0, 1, "X"], ["", "font-weight:bold;"], [0, 5, 10], ) for args in vals: self.assertNotEqual(html_f.doubleclick_text_full(*args), "") # live_option_box(elements, table, field, where_id, value, tab_index = -1, style="", disabled=[], element_property="name", sort=True): vals = itertools.product( [{"1":"a","2":"b","3":"c"}], ["table1", ""], ["field1", ""], [0, 1, 2], ["value1", 5], [-1, 10, 1000000], ["", "font-weight:bold;"], [[1,2,3], []], ["name", "property-name"], [True, False], ) for args in vals: self.assertNotEqual(html_f.live_option_box(*args), "") # option_box(name, elements, selected="", tab_index = -1, custom_id="<>", onchange="", style="", disabled=[], insert_dud=False, element_property="name", sort=True): vals = itertools.product( ["name1", ""], [{"1":"a","2":"b","3":"c"}], ["selected", ""], [-1, 10, 1000000], ["custom_id", "<>", ""], ["onchange", ""], ["style", ""], [[1,2,3], []], ["Insert dud", False], ["", "element property"], [True, False], ) for args in vals: self.assertNotEqual(html_f.option_box(*args), "") # text_box(name, text='', size=15, tabIndex=-1, onchange='', custom_id='<>', style="", warn_on=None, disabled=False): vals = itertools.product( ["name1", ""], ["", "some text"], [0, 1, 15, 2000], [-1, 10, 1000000], ["onchange", ""], ["custom_id", "<>", ""], ["style", ""], [None],# Needs to be a function or none [True, False], ) for args in vals: self.assertNotEqual(html_f.text_box(*args), "") # textarea(name, text='', rows=6, cols=30, tabIndex=-1, onchange='', custom_id='<>', style="", warn_on=None): vals = itertools.product( ["name1", ""], ["", "some text"], [0, 6, 100], [0, 30, 1000], [-1, 30, 1000], ["onchange", ""], ["custom_id", "<>", ""], ["style", ""], [None],# Needs to be a function or none ) for args in vals: self.assertNotEqual(html_f.textarea(*args), "")