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)