Example #1
0
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)
Example #4
0
def upload_to_protocol(filedescriptor):
    """
    Загружает протокол из файла в базу данных. Пока через Pickle
    """

    bck.writeProtocolToDatabase(parseToAProtocol(filedescriptor))
Example #5
0
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)