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 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)