Пример #1
0
        def run(format, newpath):
            global flag
            if remove_old and os.path.exists(newpath):
                remove_file(newpath)

            if not os.path.exists(newpath):
                if unoconv(self, format, oldpath, newpath, remove_log):
                    flag = True
                    return True

            return False
Пример #2
0
def unoconv(document, format, oldpath, newpath, remove_log=True):
    if not unoconv_exe:
        raise RuntimeError('Please install unoconv into your system.')

    newname = os.path.basename(newpath)

    dwd = os.path.dirname(newpath)
    cwd = os.getcwd()
    os.chdir(dwd)

    proc = [unoconv_exe]
    proc.extend(random_unoconv_con(document=document))
    proc.extend(['-f', format, os.path.basename(oldpath)])

    out = os.path.join(dwd, 'convert.out.%s.log' % (format if format == 'pdf' else 'odf',))
    err = os.path.join(dwd, 'convert.error.%s.log' % (format if format == 'pdf' else 'odf',))

    p = subprocess.Popen(proc, shell=False,
            stdout=open(out, 'w+b'), 
            stderr=open(err, 'w+b'),
            cwd=dwd)
    p.wait()

    ready = os.path.exists(newpath)

    f = open(err, 'r')
    err_txt = f.read().decode('utf-8')
    f.close()

    # Когда LO создаёт файл, то может несколько раз попытаться
    # создать временный каталог. Такие ошибки тоже попадают в лог
    # Поэтому единственно верным признаком успеха является
    # наличие конечного файла
    if err_txt and not ready:
        deep_to_dict(document.details, err.replace('.log', ''), err_txt)

    f = open(out, 'r')
    out_txt = f.read().decode('utf-8')
    f.close()

    if out_txt:
        deep_to_dict(document.details, out.replace('.log', ''), out_txt)

    os.chdir(cwd)

    if ready:
        if remove_log:
            remove_file(err)
            remove_file(out)
        return True
    else:
        return False
Пример #3
0
    def save(self):
        if self.id:
            old = Document.objects.get(id=self.id)
            try:
                old.report_file.path
            except:
                pass
            else:
                if self.report_file != old.report_file:
                    remove_file(old.report_file.path)

        if not self.title:
            self.title = force_text(self)

        super(Document, self).save()