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 delCameData(form): #удаление id=int(form.getfirst("id", "")) name = form.getfirst("name", "") prot=bck.getProtocolFromDatabase(id)[0] # Возвращает объект испытания try: del prot.dictOfReportFormParameters[name] except KeyError: pass return bck.writeProtocolToDatabase(prot, id)
def saveCameData(form): id=int(form.getfirst("id", "")) name = form.getfirst("name", "") prot=bck.getProtocolFromDatabase(id)[0] # Возвращает объект испытания rfp = ReportFormParameters() rfp.dictOfProceduresParameters=dict() if prot==None: return 1 if name.strip()=='': return 2 for key in form.keys(): if "chn" in key or "com" in key: ls=key.split('_') number = int(ls[0]) var = key[key.rfind('_')+1::] if number in rfp.dictOfProceduresParameters: #если есть такой ключ процедуры, что может получиться в том случае, если для такой процедуры параметры мы уже находили #тогда просто добавляем в нужный список название пеерменной if "chn" in key: rfp.dictOfProceduresParameters[number].listOfHiddenPerchannelParameters.append(var) if "com" in key: rfp.dictOfProceduresParameters[number].listOfHiddenCommonParameters.append(var) else: #иначе придётся сперва создать объект параметров процедуры procparam=ProcedureReportFormParameters() procparam.listOfHiddenPerchannelParameters=list() procparam.listOfHiddenCommonParameters=list() if "chn" in key: procparam.listOfHiddenPerchannelParameters.append(var) if "com" in key: procparam.listOfHiddenCommonParameters.append(var) rfp.dictOfProceduresParameters[number]=procparam #добавляем параметры процедуры if not prot.dictOfReportFormParameters: #на кой этот сиране костыль, но Питоний не понимает, что поле является словарём, пока ему не скажешь об этом prot.dictOfReportFormParameters=dict() prot.dictOfReportFormParameters[name]=rfp #либо создаёт, либо перезаписывает параметры процедуры под таким названием return bck.writeProtocolToDatabase(prot, id)
def upload_to_protocol(filedescriptor): """ Загружает протокол из файла в базу данных. Пока через Pickle """ bck.writeProtocolToDatabase(parseToAProtocol(filedescriptor))
def process(): global watchfolder, putfolder #получить список файлов files = os.listdir(watchfolder) textfilter = lambda x: x.endswith('.TXT') or x.endswith('.txt') xmlfilter=lambda x: x.endswith('.XML') or x.endswith('.xml') #textfiles = list(filter(lambda x: x.endswith('.TXT') or x.endswith('.txt'), files)) report="[INFO] Process {0} {1}\n".format(watchfolder, putfolder) for name in files: #print (prs.parseToResult (watchfolder+name)) #отсылка к бакенду - добавление результата в базу данных report+=name + "\n" st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') rs=None,'Invalid file extension' if textfilter(name): rs=prs.basicParserTextFormFilename (watchfolder+name) elif xmlfilter (name): rs = xprs.parceXml(watchfolder+name) if rs[0]==None: report+="[ERROR] "+st+" Не удалось распарсить результат имя файла="+name+"\n"+"Потому что "+rs[1] continue #сперва попробуем перенести файл #Из теперь неизвестных соображений, сначала пытаемся перенести в другую папку, а потом записать в базу данных mvs=1 try: shutil.move(watchfolder+name, putfolder) except BaseException: log ("[ERROR]"+st+"Проблема при перемещении файла, возможно дублирование отчёта") print ("[ERROR]"+st+"Проблема при перемещении файла, возможно дублирование отчёта") mvs=0 if mvs: wr=bmr.writeResultToDatabase(rs[0]); if wr: report+="[ERROR] "+st+" При записи в БД произошла ошибка код="+str(wr)+"\n" else: report+="\t"+st+"Запись в БД произошла успешно "+name+"\n" #код поиска подходящего протокола, если не найдёт - то запишет и в протокол if bck.getProtocolFromDatabaseParams (rs[0].model, rs[0].typeOfTest)[0]==None: #если нет протокола такого в базе данных if textfilter (name): ap = prs.basicParserTextFormFilename (putfolder+name, type='protocol') elif xmlfilter (name): with open(putfolder+name, 'rt') as file: ap = xprs.parceXml(file,'prc') #распарсили протокол if ap[0] is not None: err=bck.writeProtocolToDatabase(ap[0], idprotocol=None) if err: log ("[ERROR]"+st+"Проблема при добавлении протокола в базу данных на этапе включения в БД {0}".format(err)) else: log ("[ERROR]"+st+"Проблема при добавлении протокола в базу данных на этапе парсинга {0}".format(ap[1])) log (report) print (report)