def upload_protocol(): fileitem = form["file"] if fileitem.file: # It's an uploaded file; count lines #strfile = "" #for line in fileitem.file: # strfile+=line.decode("cp1251") #собрали файл в строку ap = prs.parseToAProtocolCP1251(fileitem.file) #распарсили протокол if ap[0]==None: #ошибка при парсинге протокола ap=xprs.parceXml(fileitem.file, type='prc') #только теперь передаём не имя файла, а его объект, что делает функцию parseXML полиморфной if ap[0]==None: htmg.out("<script> alert(\"Произошла ошибка при загрузке протокола на этапе парсинга err="+ap[1] + "\"); </script>") htmg.out("Произошла ошибка при загрузке протокола на этапе парсинга err={0}".format(ap[1])) show_form() return #если не удалось распарсить протокол как текст (что, скорее всего, произойдёт при парсинге xml, что, правда, не факт, и это печалит, надо бы филтр по mime) #то пытаемся распарсить как xml. Если всё равно не получается, то выбрасываем error err=bck.writeProtocolToDatabase(ap[0], idprotocol=None) if not err: htmg.out("<script> alert(\"Загрузка протокола произошла успешно\"); document.location.replace(\"../MiramisPHP/protocols.php\"); </script> ") return htmg.out("<script> alert(\"Произошла ошибка при загрузке протокола err="+str(err) + "\"); </script>") htmg.out("Произошла ошибка при загрузке протокола err="+str(err)) show_form()
def show_form(): outs= """ <form action='FRprotocolAdd.py?upl=1' method='post' enctype='multipart/form-data'> <label for="file">Имя файла:</label> <input type='file'" name='file' id='file'><br> <input type='submit' name='submit' value='Загрузить'> </form> """ htmg.out(outs)
def outGeneral(id): pass def writeTestFromInputParameters(form): pass #у этой страницы могут быть три параметра - id, то есть айди протокола, есть всегда и может быть idtest - айди испытания #ещё параметр saveid - тогда значит надо сохранить (т. е. добавить или перезаписать) введённое испытание form = cgi.FieldStorage() if "saveid" in form: htmg.out ("Content-Type: text/html;charset=utf-8\n\n") htmg.out(writeTestFromInputParameters(form)) exit(0) #вызвать сохраение данных и выйти из скрипта! if "id" not in form: htmg.out(htmg.generateHTMLMetaHeader()) htmg.out(htmg.throwError("FR_oneresultedit.py", "Не получен ID результата")) htmg.out(htmg.generateHTMLFooter()) exit(0) #а можно ли вообще так выходить из cgi? id=int(form.getfirst("id", "")) htmg.out(outGeneral(id)) if "testedit" in form:
<input type='file'" name='file' id='file'><br> <input type='submit' name='submit' value='Загрузить'> </form> """ htmg.out(outs) #debugging #ap = prs.parseToAProtocolCP1251(open("sandbox/protocolCP1251.txt", "rb")) #распарсили протокол #Если видим какие-нибудь данные, то запускаем добавление протокола #если нет - то запускаем отображение формы htmg.out (htmg.generateHTMLMetaHeader("Добавление протокола")) form = cgi.FieldStorage() if "upl" in form: upload_protocol() else: show_form() htmg.out(htmg.generateHTMLFooter())
if isdebug: htmg.out (errmsg) htmg.out(list().__str__()) exit(0) #начинаем создавать хытымыль-страницу #хытымыль страница состоит из шапки и главной части по одной классификации #и из программы испытаний и протокола испытаний по другой классификации #главная часть состоит из процедур, каждая из которых генерируется отдельно #каждая процедура состоит из левой и правой части. Левая часть заполняется из программы испытаний, правая часть заполняется из протокола испытаний htmg.out (htmg.generateSimpleMetaHeader()) #получение списка результатов для построения отчётов form = cgi.FieldStorage() residlist=list() #making results list: errlog = "" if "debug" in form: isdebug=1 htmg.out ("Hello, debug mode!") for key in form:
def closeAsError (errmsg): global isdebug if isdebug: htmg.out (errmsg) htmg.out(list().__str__()) exit(0)
if not prot.dictOfReportFormParameters: #на кой этот сиране костыль, но Питоний не понимает, что поле является словарём, пока ему не скажешь об этом prot.dictOfReportFormParameters=dict() prot.dictOfReportFormParameters[name]=rfp #либо создаёт, либо перезаписывает параметры процедуры под таким названием return bck.writeProtocolToDatabase(prot, id) form = cgi.FieldStorage() htmg.out(htmg.generateHTMLMetaHeader()) if "id" not in form: htmg.out(htmg.throwError("FR_ReportParametersEdit.py", "Не получен ID протокола")) else: id=int(form.getfirst("id", "")) if "save" in form: #запрос на сохранение errcode=saveCameData(form) #сохранение if errcode: #если ошибка
for i in range (0, len(reslist), step): outr=outreport(reslist[i:i+step], form, protocol, name) res+=outr[0]#+"<br style='page-break-after: always'> " res+=generateOneReportFooter (form, reslist) return res + err htmg.out (htmg.generateHTMLMetaHeader("Вывод отчётной формы", 0)) #получение списка результатов для построения отчётов form = cgi.FieldStorage() name="" if "name" in form: name=form.getfirst("name", "") residlist=list() #making results list: for key in form: #htmg.out(key+" "+ form.getfirst(key, "") +"</br>") if "checkbox" in key: residlist.append(int(key.split("_")[1]))
#out("Content-Type: text/html;charset=utf-8\n\n") #out("<html><head>\n\n") #out("</head><body>\n\n") #узнаём, есть ли айди в параметрах form = cgi.FieldStorage() #TODO: вызов добавления результата по протоколу htmg.out (htmg.generateHTMLMetaHeader("Обзор протокола")) if "id" not in form: htmg.out (htmg.throwError("FRprotocolViewEdit.py", "Ошибка: не предоставлен id протокола", errortype=None)) else: id=int(form.getfirst("id", "")) if ("delid") in form: delid=int(form.getfirst("delid", "")) bck.delTestFromProtocol(id, delid) htmg.out("Испытание удалено успешно!"+str(id)+" "+str(delid)) htmg.out("<script> document.location.replace('FRprotocolViewEdit.py?id="+str(id)+"');</script>") htmg.out (view_protocol_by_id(id)) htmg.out(htmg.generateHTMLFooter())
def outEditFormForResult(result: AResult, id): """ Выводит форму отображения и редакции результата. в этой версии выводит вместе с данными из протокола, такими, как название и такое прочее """ protocolt = bck.getProtocolFromDatabaseParams(result.model, result.typeOfTest) if protocolt[0] == None: htmg.out( htmg.throwError( "FR_resultedit.py", "Ошибка при поиске протокола, соответствующего данному результату " + protocolt[1] ) ) return outEditFormForResultOld(result, id) protocol = protocolt[0] res = str() res += "<h1>Правка результата</h1>" # вывод справочной части st = "<b>{0}<b>: {1}<br/>\n" res += st.format("Модель", result.model) res += st.format("Вид теста", result.typeOfTest) res += st.format("Оператор", result.operator) res += st.format("Дата и время теста", result.testDateTime) res += st.format("Номер изделия", str(result.numOfProduct)) res += st.format("Номер партии", str(result.numOfBatch)) res += st.format("Прошёл ли тест", str(result.hasPassedTest)) # вывод таблицы результатов res += "<br/><br/>" res += "<form action='FR_resultedit.py?id={0}&saveid={1}' method='post'> <table border=1>\n".format( str(id), str(id) ) res += """ <tr> <th>Название испытания</th> <th>Режим испытания</th> <th>Нормы на испытание</th> <th>Пройдено ли испытание</th> <th>Результаты испытания</th> <th>Удаление</th> </tr>""" klist = list(result.proceduresResults.keys()) klist.sort() for key in klist: # for key, val in result.proceduresResults.items(): val = result.proceduresResults[key] res += "<tr>\n" interactive_form = outResultsOfProcedureForm(val, key) delbtn = ( " <input type='button' onclick=\"destroy('Вы уверенно хотите удалить данный результат?', 'FR_resultedit.py?id=" + str(id) + "&delid=" + str(key) + "' ) \" value='Удаление' >" ) res += """{0} <td> {1} </td> <td> {2} </td> <td> {3} </td> """.format( protocol.procedures[key].toHTML(0), outfilledformforpassed(key, val.hasPassedProcedure), interactive_form, delbtn, ) # {True: "Пройдено", False: "Не пройдено"}[val.hasPassedProcedure] res += "</tr>\n" res += "</table> <br/> <input type='submit' value='Сохранить'> </form>" res += "<a href='FR_resultedit.py?id={0}&magic={1}'> Добавить надостающие испытания в результат из протокола </a>".format( id, id ) return res
except BaseException: return 4, "ошибка при записи значения (общего)" else: return 5, "ошибка при записи значения (общего), возможно значение не задано" wrtdb = bmr.writeResultToDatabase(result, idresult=saveid) if wrtdb: return 4, "Ошибка записи р. в БД " + str(wrtdb) # inpstr="<input type='text' name='{0}' value='{1}' >".format(str(prefix)+"_"+channel+"_"+parameter, str(rop.values1[channel][parameter])) return 0, "" # признак успешности операции htmg.out(htmg.generateHTMLMetaHeader("Правка результата") + "<br/><br/>") form = cgi.FieldStorage() if "id" not in form: htmg.out(htmg.throwError("FR_resultedit.py", "Ошибка: не предоставлен id результата", errortype=None)) else: id = int(form.getfirst("id", "")) if "magic" in form: magicres = insertTestsAccToProtocol(id) if magicres: htmg.out( htmg.throwError( "FR_resultedit.py", "Ошибка при добавлении недостающих испытаний " + magicres, errortype=None ) )