Ejemplo n.º 1
0
def session_draft_pdf(request, num, session):
    drafts = session_draft_list(num, session);
    curr_page = 1
    pmh, pmn = mkstemp()
    os.close(pmh)
    pdfmarks = open(pmn, "w")
    pdf_list = ""

    for draft in drafts:
        pdf_path = os.path.join(settings.INTERNET_DRAFT_PDF_PATH, draft + ".pdf")
        if not os.path.exists(pdf_path):
            convert_draft_to_pdf(draft)

        if os.path.exists(pdf_path):
            pages = pdf_pages(pdf_path)
            pdfmarks.write("[/Page "+str(curr_page)+" /View [/XYZ 0 792 1.0] /Title (" + draft + ") /OUT pdfmark\n")
            pdf_list = pdf_list + " " + pdf_path
            curr_page = curr_page + pages

    pdfmarks.close()
    pdfh, pdfn = mkstemp()
    os.close(pdfh)
    pipe("gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=" + pdfn + " " + pdf_list + " " + pmn)

    pdf = open(pdfn,"r")
    pdf_contents = pdf.read()
    pdf.close()

    os.unlink(pmn)
    os.unlink(pdfn)
    return HttpResponse(pdf_contents, content_type="application/pdf")
Ejemplo n.º 2
0
def session_draft_pdf(request, num, session):
    drafts = session_draft_list(num, session)
    curr_page = 1
    pmh, pmn = mkstemp()
    pdfmarks = open(pmn, "w")
    pdf_list = ""

    for draft in drafts:
        pdf_path = os.path.join(settings.INTERNET_DRAFT_PDF_PATH,
                                draft + ".pdf")
        if (not os.path.exists(pdf_path)):
            convert_to_pdf(draft)

        if (os.path.exists(pdf_path)):
            pages = pdf_pages(pdf_path)
            pdfmarks.write("[/Page " + str(curr_page) +
                           " /View [/XYZ 0 792 1.0] /Title (" + draft +
                           ") /OUT pdfmark\n")
            pdf_list = pdf_list + " " + pdf_path
            curr_page = curr_page + pages

    pdfmarks.close()
    pdfh, pdfn = mkstemp()
    pipe("gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=" + pdfn +
         " " + pdf_list + " " + pmn)

    pdf = open(pdfn, "r")
    pdf_contents = pdf.read()
    pdf.close()

    os.unlink(pmn)
    os.unlink(pdfn)
    return HttpResponse(pdf_contents, mimetype="application/pdf")
Ejemplo n.º 3
0
def check_idnits(path):
    #p = subprocess.Popen([self.idnits, '--submitcheck', '--nitcount', path], stdout=subprocess.PIPE)
    cmd = "%s --submitcheck --nitcount %s" % (settings.IDSUBMIT_IDNITS_BINARY, path)
    code, out, err = pipe(cmd)
    if code != 0:
        log("idnits error: %s:\n  Error %s: %s" %( cmd, code, err))
    return out
Ejemplo n.º 4
0
def convert_to_pdf(doc_name):
    inpath = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, doc_name + ".txt")
    outpath = os.path.join(settings.INTERNET_DRAFT_PDF_PATH, doc_name + ".pdf")

    try:
        infile = open(inpath, "r")
    except IOError:
        return

    t, tempname = mkstemp()
    tempfile = open(tempname, "w")

    pageend = 0
    newpage = 0
    formfeed = 0
    for line in infile:
        line = re.sub("\r", "", line)
        line = re.sub("[ \t]+$", "", line)
        if re.search("\[?[Pp]age [0-9ivx]+\]?[ \t]*$", line):
            pageend = 1
            tempfile.write(line)
            continue
        if re.search("^[ \t]*\f", line):
            formfeed = 1
            tempfile.write(line)
            continue
        if re.search("^ *INTERNET.DRAFT.+[0-9]+ *$", line) or re.search(
                "^ *Internet.Draft.+[0-9]+ *$", line) or re.search(
                    "^draft-[-a-z0-9_.]+.*[0-9][0-9][0-9][0-9]$",
                    line) or re.search("^RFC.+[0-9]+$", line):
            newpage = 1
        if re.search("^[ \t]*$", line) and pageend and not newpage:
            continue
        if pageend and newpage and not formfeed:
            tempfile.write("\f")
        pageend = 0
        formfeed = 0
        newpage = 0
        tempfile.write(line)

    infile.close()
    tempfile.close()
    t, psname = mkstemp()
    pipe("enscript --margins 76::76: -B -q -p " + psname + " " + tempname)
    os.unlink(tempname)
    pipe("ps2pdf " + psname + " " + outpath)
    os.unlink(psname)
Ejemplo n.º 5
0
    def check_file_txt(self, path):
        """
        Run an idnits check, and return a passed/failed indication, a message,
        and error and warning messages.

        Error and warning list items are tuples:
            (line_number, line_text, message)
        """
        filename = os.path.basename(path)
        result = {}
        items = []
        errors = 0
        warnings = 0
        errstart = ['  ** ', '  ~~ ']
        warnstart = ['  == ', '  -- ']
        

        cmd = "%s %s %s" % (settings.IDSUBMIT_IDNITS_BINARY, self.options, path)
        code, out, err = pipe(cmd)
        if code != 0 or out == "":
            message = "idnits error: %s:\n  Error %s: %s" %( cmd, code, err)
            log(message)
            passed = False
            
        else:
            message = out
            if re.search("\s+Summary:\s+0\s+|No nits found", out):
                passed  = True
            else:
                passed  = False

        item = ""
        for line in message.splitlines():
            if   line[:5] in (errstart + warnstart):
                item = line.rstrip()
            elif line.strip() == "" and item:
                tuple = (None, None, item)
                items.append(tuple)
                if item[:5] in errstart:
                    errors += 1
                elif item[:5] in warnstart:
                    warnings += 1
                else:
                    raise RuntimeError("Unexpected state in idnits checker: item: %s, line: %s" % (item, line))
                item = ""
            elif item and line.strip() != "":
                item += " " + line.strip()
            else:
                pass
            result[filename] = {
                    "passed":  passed,
                    "message": message,
                    "errors":  errors,
                    "warnings":warnings,
                    "items": items,
                }


        return passed, message, errors, warnings, result
Ejemplo n.º 6
0
Archivo: forms.py Proyecto: mcr/ietfdb
 def check_idnits(self):
     filepath = os.path.join(self.staging_path, '%s-%s.txt' % (self.draft.filename, self.draft.revision))
     #p = subprocess.Popen([self.idnits, '--submitcheck', '--nitcount', filepath], stdout=subprocess.PIPE)
     cmd = "%s --submitcheck --nitcount %s" % (self.idnits, filepath)
     code, out, err = pipe(cmd)
     if code != 0:
         log("idnits error: %s:\n  Error %s: %s" %(cmd, code, err))
     self.idnits_message = out
Ejemplo n.º 7
0
def convert_to_pdf(doc_name):
    inpath = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, doc_name + ".txt")
    outpath = os.path.join(settings.INTERNET_DRAFT_PDF_PATH, doc_name + ".pdf")

    try:
        infile = open(inpath, "r")
    except IOError:
        return

    t,tempname = mkstemp()
    os.close(t)
    tempfile = open(tempname, "w")

    pageend = 0;
    newpage = 0;
    formfeed = 0;
    for line in infile:
        line = re.sub("\r","",line)
        line = re.sub("[ \t]+$","",line)
        if re.search("\[?[Pp]age [0-9ivx]+\]?[ \t]*$",line):
            pageend=1
            tempfile.write(line)
            continue
        if re.search("^[ \t]*\f",line):
            formfeed=1
            tempfile.write(line)
            continue
        if re.search("^ *INTERNET.DRAFT.+[0-9]+ *$",line) or re.search("^ *Internet.Draft.+[0-9]+ *$",line) or re.search("^draft-[-a-z0-9_.]+.*[0-9][0-9][0-9][0-9]$",line) or re.search("^RFC.+[0-9]+$",line):
            newpage=1
        if re.search("^[ \t]*$",line) and pageend and not newpage:
            continue
        if pageend and newpage and not formfeed:
            tempfile.write("\f")
        pageend=0
        formfeed=0
        newpage=0
        tempfile.write(line)

    infile.close()
    tempfile.close()
    t,psname = mkstemp()
    os.close(t)
    pipe("enscript --margins 76::76: -B -q -p "+psname + " " +tempname)
    os.unlink(tempname)
    pipe("ps2pdf "+psname+" "+outpath)
    os.unlink(psname)
Ejemplo n.º 8
0
 def check_idnits(self):
     filepath = os.path.join(
         self.staging_path,
         '%s-%s.txt' % (self.draft.filename, self.draft.revision))
     #p = subprocess.Popen([self.idnits, '--submitcheck', '--nitcount', filepath], stdout=subprocess.PIPE)
     cmd = "%s --submitcheck --nitcount %s" % (self.idnits, filepath)
     code, out, err = pipe(cmd)
     if code != 0:
         log("idnits error: %s:\n  Error %s: %s" % (cmd, code, err))
     self.idnits_message = out
Ejemplo n.º 9
0
Archivo: utils.py Proyecto: mcr/ietfdb
def store_nomcom_private_key(request, year, private_key):
    if not private_key:
        request.session['NOMCOM_PRIVATE_KEY_%s' % year] = ''
    else:
        command = "%s bf -e -in /dev/stdin -k \"%s\" -a"
        code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                           settings.SECRET_KEY), private_key)
        if code != 0:
            log("openssl error: %s:\n  Error %s: %s" %(command, code, error))        
        if error:
            out = ''
        request.session['NOMCOM_PRIVATE_KEY_%s' % year] = out
Ejemplo n.º 10
0
Archivo: utils.py Proyecto: mcr/ietfdb
def retrieve_nomcom_private_key(request, year):
    private_key = request.session.get('NOMCOM_PRIVATE_KEY_%s' % year, None)

    if not private_key:
        return private_key

    command = "%s bf -d -in /dev/stdin -k \"%s\" -a"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                       settings.SECRET_KEY), private_key)
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" %(command, code, error))        
    return out
Ejemplo n.º 11
0
def retrieve_nomcom_private_key(request, year):
    private_key = request.session.get('NOMCOM_PRIVATE_KEY_%s' % year, None)

    if not private_key:
        return private_key

    command = "%s bf -d -in /dev/stdin -k \"%s\" -a"
    code, out, error = pipe(
        command % (settings.OPENSSL_COMMAND, settings.SECRET_KEY), private_key)
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" % (command, code, error))
    return out
Ejemplo n.º 12
0
Archivo: info.py Proyecto: algby/ietfdb
def dependencies_pdf(request, acronym, group_type=None):
    group = get_group_or_404(acronym, group_type)
    if not group.features.has_documents:
        raise Http404

    dothandle,dotname = mkstemp()  
    os.close(dothandle)
    dotfile = open(dotname,"w")
    dotfile.write(make_dot(group))
    dotfile.close()

    unflathandle,unflatname = mkstemp()
    os.close(unflathandle)

    pshandle,psname = mkstemp()
    os.close(pshandle)

    pdfhandle,pdfname = mkstemp()
    os.close(pdfhandle)

    pipe("%s -f -l 10 -o %s %s" % (settings.UNFLATTEN_BINARY,unflatname,dotname))
    pipe("%s -Tps -Gsize=10.5,8.0 -Gmargin=0.25 -Gratio=auto -Grotate=90 -o %s %s" % (settings.DOT_BINARY,psname,unflatname))
    pipe("%s %s %s" % (settings.PS2PDF_BINARY,psname,pdfname))
    
    pdfhandle = open(pdfname,"r")
    pdf = pdfhandle.read()
    pdfhandle.close()

    os.unlink(pdfname)
    os.unlink(psname)
    os.unlink(unflatname)
    os.unlink(dotname)

    return HttpResponse(pdf, content_type='application/pdf')
Ejemplo n.º 13
0
def store_nomcom_private_key(request, year, private_key):
    if not private_key:
        request.session['NOMCOM_PRIVATE_KEY_%s' % year] = ''
    else:
        command = "%s bf -e -in /dev/stdin -k \"%s\" -a"
        code, out, error = pipe(
            command % (settings.OPENSSL_COMMAND, settings.SECRET_KEY),
            private_key)
        if code != 0:
            log("openssl error: %s:\n  Error %s: %s" % (command, code, error))
        if error:
            out = ''
        request.session['NOMCOM_PRIVATE_KEY_%s' % year] = out
Ejemplo n.º 14
0
Archivo: utils.py Proyecto: mcr/ietfdb
def validate_private_key(key):
    key_file = tempfile.NamedTemporaryFile(delete=False)
    key_file.write(key)
    key_file.close()

    command = "%s rsa -in %s -check -noout"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                       key_file.name))
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" %(command, code, error))        

    os.unlink(key_file.name)
    return (not error, error)
Ejemplo n.º 15
0
 def handle(self, *filenames, **options):
     for c in VersionInfo.objects.filter(used=True):
         cmd = "%s %s" % (c.command, c.switch)
         code, out, err = pipe(cmd)
         if code != 0:
             sys.stderr.write("Command '%s' retuned %s: \n%s\n%s\n" %
                              (cmd, code, out, err))
         else:
             c.version = (out.strip() + '\n' + err.strip()).strip()
             if options.get('verbosity', 1) > 1:
                 sys.stdout.write("Command: %s\n"
                                  "  Version: %s\n" % (cmd, c.version))
             c.save()
Ejemplo n.º 16
0
def validate_private_key(key):
    key_file = tempfile.NamedTemporaryFile(delete=False)
    key_file.write(key)
    key_file.close()

    command = "%s rsa -in %s -check -noout"
    code, out, error = pipe(command %
                            (settings.OPENSSL_COMMAND, key_file.name))
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" % (command, code, error))

    os.unlink(key_file.name)
    return (not error, error)
Ejemplo n.º 17
0
Archivo: utils.py Proyecto: mcr/ietfdb
def validate_public_key(public_key):
    key_file = tempfile.NamedTemporaryFile(delete=False)
    for chunk in public_key.chunks():
        key_file.write(chunk)
    key_file.close()

    command = "%s x509 -in %s -noout"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                       key_file.name))
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" %(command, code, error))        

    os.unlink(key_file.name)
    return (not error, error)
Ejemplo n.º 18
0
def validate_public_key(public_key):
    key_file = tempfile.NamedTemporaryFile(delete=False)
    for chunk in public_key.chunks():
        key_file.write(chunk)
    key_file.close()

    command = "%s x509 -in %s -noout"
    code, out, error = pipe(command %
                            (settings.OPENSSL_COMMAND, key_file.name))
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" % (command, code, error))

    os.unlink(key_file.name)
    return (not error, error)
Ejemplo n.º 19
0
def dependencies(request, acronym, group_type=None, output_type="pdf"):
    group = get_group_or_404(acronym, group_type)
    if not group.features.has_documents:
        raise Http404

    dothandle, dotname = mkstemp()
    os.close(dothandle)
    dotfile = open(dotname, "w")
    dotfile.write(make_dot(group))
    dotfile.close()

    if (output_type == "dot"):
        return HttpResponse(make_dot(group),
                            content_type='text/plain; charset=UTF-8'
                            )

    unflathandle, unflatname = mkstemp()
    os.close(unflathandle)
    outhandle, outname = mkstemp()
    os.close(outhandle)

    pipe("%s -f -l 10 -o %s %s" % (settings.UNFLATTEN_BINARY, unflatname, dotname))
    pipe("%s -T%s -o %s %s" % (settings.DOT_BINARY, output_type, outname, unflatname))

    outhandle = open(outname, "r")
    out = outhandle.read()
    outhandle.close()

    os.unlink(outname)
    os.unlink(unflatname)
    os.unlink(dotname)

    if (output_type == "pdf"):
        output_type = "application/pdf"
    elif (output_type == "svg"):
        output_type = "image/svg+xml"
    return HttpResponse(out, content_type=output_type)
Ejemplo n.º 20
0
 def do_cmd(self, cmd, *args):
     quoted_args = ['"%s"' % a if ' ' in a else a for a in args]
     if self.dummy_run:
         self.note("Would run %s %s ..." %
                   (os.path.basename(cmd), " ".join(quoted_args)))
     else:
         self.note("Running %s %s ..." %
                   (os.path.basename(cmd), " ".join(quoted_args)))
         command = [
             cmd,
         ] + list(args)
         code, out, err = pipe(command)
         msg = None
         if code != 0:
             msg = "Error %s: %s when executing '%s'" % (code, err,
                                                         " ".join(command))
             self.log(msg)
         return msg, out
Ejemplo n.º 21
0
def check_comments(encryped, plain, privatekey_file):
    encrypted_file = tempfile.NamedTemporaryFile(delete=False)
    encrypted_file.write(encryped)
    encrypted_file.close()

    # to decrypt comments was encryped and check they are equal to the plain comments
    decrypted_file = tempfile.NamedTemporaryFile(delete=False)
    command = "%s smime -decrypt -in %s -out %s -inkey %s"
    code, out, error = pipe(command %
                            (settings.OPENSSL_COMMAND, encrypted_file.name,
                             decrypted_file.name, privatekey_file.name))

    decrypted_file.close()
    encrypted_file.close()
    decrypted_comments = open(decrypted_file.name, 'r').read().decode('utf8')
    os.unlink(encrypted_file.name)
    os.unlink(decrypted_file.name)

    return decrypted_comments == plain
Ejemplo n.º 22
0
    def pre_save(self, instance, add):
        if add:
            comments = smart_str(getattr(instance, 'comments'))
            nomcom = getattr(instance, 'nomcom')
            cert_file = nomcom.public_key.path

            code, out, error = pipe(
                "%s smime -encrypt -in /dev/stdin %s" %
                (settings.OPENSSL_COMMAND, cert_file), comments)
            if code != 0:
                log("openssl error: %s:\n  Error %s: %s" %
                    (command, code, error))
            if not error:
                instance.comments = out
                return out
            else:
                raise EncryptedException(error)
        else:
            return instance.comments
Ejemplo n.º 23
0
    def pre_save(self, instance, add):
        if add:
            comments = smart_str(getattr(instance, 'comments'))
            nomcom = getattr(instance, 'nomcom')
            try:
                cert_file = nomcom.public_key.path
            except ValueError as e:
                raise ValueError("Trying to read the NomCom public key: " + str(e))

            command = "%s smime -encrypt -in /dev/stdin %s" % (settings.OPENSSL_COMMAND, cert_file)
            code, out, error = pipe(command, comments)
            if code != 0:
                log("openssl error: %s:\n  Error %s: %s" %(command, code, error))
            if not error:
                instance.comments = out
                return out
            else:
                raise EncryptedException(error)
        else:
            return instance.comments
Ejemplo n.º 24
0
def check_comments(encryped, plain, privatekey_file):
    encrypted_file = tempfile.NamedTemporaryFile(delete=False)
    encrypted_file.write(encryped)
    encrypted_file.close()

    # to decrypt comments was encryped and check they are equal to the plain comments
    decrypted_file = tempfile.NamedTemporaryFile(delete=False)
    command = "%s smime -decrypt -in %s -out %s -inkey %s"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                        encrypted_file.name,
                                        decrypted_file.name,
                                        privatekey_file.name))

    decrypted_file.close()
    encrypted_file.close()
    decrypted_comments = open(decrypted_file.name, 'r').read().decode('utf8')
    os.unlink(encrypted_file.name)
    os.unlink(decrypted_file.name)

    return decrypted_comments == plain
Ejemplo n.º 25
0
def decrypt(string, request, year, plain=False):
    key = retrieve_nomcom_private_key(request, year)

    if not key:
        return '-*- Encrypted text [No private key provided] -*-'

    encrypted_file = tempfile.NamedTemporaryFile(delete=False)
    encrypted_file.write(string)
    encrypted_file.close()

    command = "%s smime -decrypt -in %s -inkey /dev/stdin"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                            encrypted_file.name), key)
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" %(command, code, error))

    os.unlink(encrypted_file.name)

    if error:
        return '-*- Encrypted text [Your private key is invalid] -*-'

    if not plain:
        return force_escape(linebreaksbr(out))
    return wrap_text(force_escape(out))
Ejemplo n.º 26
0
def decrypt(string, request, year, plain=False):
    key = retrieve_nomcom_private_key(request, year)

    if not key:
        return '-*- Encrypted text [No private key provided] -*-'

    encrypted_file = tempfile.NamedTemporaryFile(delete=False)
    encrypted_file.write(string)
    encrypted_file.close()

    command = "%s smime -decrypt -in %s -inkey /dev/stdin"
    code, out, error = pipe(
        command % (settings.OPENSSL_COMMAND, encrypted_file.name), key)
    if code != 0:
        log("openssl error: %s:\n  Error %s: %s" % (command, code, error))

    os.unlink(encrypted_file.name)

    if error:
        return '-*- Encrypted text [Your private key is invalid] -*-'

    if not plain:
        return force_escape(linebreaksbr(out))
    return mark_safe(wordwrap(force_escape(out)))
Ejemplo n.º 27
0
def generate_cert():
    """Function to generate cert"""
    config = """
            [ req ]
            distinguished_name = req_distinguished_name
            string_mask        = utf8only
            x509_extensions    = ss_v3_ca

            [ req_distinguished_name ]
            commonName           = Common Name (e.g., NomComYY)
            commonName_default  = NomCom12

            [ ss_v3_ca ]

            subjectKeyIdentifier = hash
            keyUsage = critical, digitalSignature, keyEncipherment, dataEncipherment
            basicConstraints = critical, CA:true
            subjectAltName = email:[email protected]
            extendedKeyUsage= emailProtection"""

    config_file = tempfile.NamedTemporaryFile(delete=False)
    privatekey_file = tempfile.NamedTemporaryFile(delete=False)
    cert_file = tempfile.NamedTemporaryFile(delete=False)

    config_file.write(config)
    config_file.close()

    command = "%s req -config %s -x509 -new -newkey rsa:2048 -sha256 -days 730 -nodes \
                -keyout %s -out %s -batch"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                       config_file.name,
                                       privatekey_file.name,
                                       cert_file.name))
    privatekey_file.close()
    cert_file.close()
    return cert_file, privatekey_file
Ejemplo n.º 28
0
def generate_cert():
    """Function to generate cert"""
    config = """
            [ req ]
            distinguished_name = req_distinguished_name
            string_mask        = utf8only
            x509_extensions    = ss_v3_ca

            [ req_distinguished_name ]
            commonName           = Common Name (e.g., NomComYY)
            commonName_default  = NomCom12

            [ ss_v3_ca ]

            subjectKeyIdentifier = hash
            keyUsage = critical, digitalSignature, keyEncipherment, dataEncipherment
            basicConstraints = critical, CA:true
            subjectAltName = email:[email protected]
            extendedKeyUsage= emailProtection"""

    config_file = tempfile.NamedTemporaryFile(delete=False)
    privatekey_file = tempfile.NamedTemporaryFile(delete=False)
    cert_file = tempfile.NamedTemporaryFile(delete=False)

    config_file.write(config)
    config_file.close()

    command = "%s req -config %s -x509 -new -newkey rsa:2048 -sha256 -days 730 -nodes \
                -keyout %s -out %s -batch"
    code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
                                       config_file.name,
                                       privatekey_file.name,
                                       cert_file.name))
    privatekey_file.close()
    cert_file.close()
    return cert_file, privatekey_file
Ejemplo n.º 29
0
from ietf.utils.test_runner import set_coverage_checking
from ietf.utils.pipe import pipe
from ietf import settings

skip_selenium = getattr(settings, 'SKIP_SELENIUM', None)
skip_message = ""
if skip_selenium:
    skip_message = "settings.SKIP_SELENIUM = %s" % skip_selenium
else:
    try:
        from selenium import webdriver
        from selenium.webdriver.common.action_chains import ActionChains
    except ImportError as e:
        skip_selenium = True
        skip_message = "Skipping selenium tests: %s" % e
    code, out, err = pipe('phantomjs -v')
    if not code == 0:
        skip_selenium = True
        skip_message = "Skipping selenium tests: 'phantomjs' executable not found."
    if skip_selenium:
        sys.stderr.write("     " + skip_message + '\n')


def condition_data():
    make_meeting_test_data()
    colors.fg_group_colors['FARFUT'] = 'blue'
    colors.bg_group_colors['FARFUT'] = 'white'


@skipIf(skip_selenium, skip_message)
class ScheduleEditTests(StaticLiveServerTestCase):
Ejemplo n.º 30
0
    def check_file_txt(self, path):
        name = os.path.basename(path)
        workdir = tempfile.mkdtemp()
        model_name_re = r'^[A-Za-z_][A-Za-z0-9_.-]*(@\d\d\d\d-\d\d-\d\d)?\.yang$'
        errors = 0
        warnings = 0
        message = ""
        results = []
        passed = True                   # Used by the submission tool.  Yang checks always pass.
        model_list = []

        extractor = xym.YangModuleExtractor(path, workdir, strict=True, strict_examples=False, debug_level=0)
        if not os.path.exists(path):
            return None, "%s: No such file or directory: '%s'"%(name.capitalize(), path), errors, warnings, results
        with open(path) as file:
            out = ""
            err = ""
            code = 0
            try:
                # This places the yang models as files in workdir
                saved_stdout = sys.stdout
                saved_stderr = sys.stderr
                sys.stdout = StringIO.StringIO()
                sys.stderr = StringIO.StringIO()
                extractor.extract_yang_model(file.readlines())
                out = sys.stdout.getvalue()
                err = sys.stderr.getvalue()
                sys.stdout = saved_stdout
                sys.stderr = saved_stderr
                # signature change in xym:
                model_list = extractor.get_extracted_models(False, True)
            except Exception as exc:
                msg = "Exception when running xym on %s: %s" % (name, exc)
                log(msg)
                return None, msg, 0, 0, []

        if not model_list:
            # Found no yang modules, don't deliver any YangChecker result
            return None, "", 0, 0, []

        for m in model_list:
            if not re.search(model_name_re, m):
                code += 1
                err += "Error: Bad extracted model name: '%s'\n" % m
        if len(set(model_list)) != len(model_list):
            code += 1
            err += "Error: Multiple models with the same name:\n  %s\n" % ("\n  ".join(model_list))

        command = "xym"
        cmd_version = VersionInfo.objects.get(command=command).version
        message = "%s:\n%s\n\n" % (cmd_version, out.replace('\n\n','\n').strip() if code == 0 else err)

        results.append({
            "name": name,
            "passed":  passed,
            "message": message,
            "warnings": 0,
            "errors":  code,
            "items": [],
        })

        for model in set(model_list):
            path = os.path.join(workdir, model)
            message = ""
            modpath = ':'.join([
                                workdir,
                                settings.SUBMIT_YANG_RFC_MODEL_DIR,
                                settings.SUBMIT_YANG_DRAFT_MODEL_DIR,
                                settings.SUBMIT_YANG_INVAL_MODEL_DIR,
                            ])
            if os.path.exists(path):
                with open(path) as file:
                    text = file.readlines()
                # pyang
                cmd_template = settings.SUBMIT_PYANG_COMMAND
                command = [ w for w in cmd_template.split() if not '=' in w ][0]
                cmd_version = VersionInfo.objects.get(command=command).version
                cmd = cmd_template.format(libs=modpath, model=path)
                code, out, err = pipe(cmd)
                items = []
                if code > 0 or len(err.strip()) > 0 :
                    error_lines = err.splitlines()
                    for line in error_lines:
                        if line.strip():
                            try:
                                fn, lnum, msg = line.split(':', 2)
                                lnum = int(lnum)
                                if fn == model and (lnum-1) in range(len(text)):
                                    line = text[lnum-1].rstrip()
                                else:
                                    line = None
                                items.append((lnum, line, msg))
                                if 'error: ' in msg:
                                    errors += 1
                                if 'warning: ' in msg:
                                    warnings += 1
                            except ValueError:
                                pass
                #passed = passed and code == 0 # For the submission tool.  Yang checks always pass
                message += "%s: %s:\n%s\n" % (cmd_version, cmd_template, out+"No validation errors\n" if (code == 0 and len(err) == 0) else out+err)

                # yanglint
                if settings.SUBMIT_YANGLINT_COMMAND:
                    cmd_template = settings.SUBMIT_YANGLINT_COMMAND
                    command = [ w for w in cmd_template.split() if not '=' in w ][0]
                    cmd_version = VersionInfo.objects.get(command=command).version
                    cmd = cmd_template.format(model=path, rfclib=settings.SUBMIT_YANG_RFC_MODEL_DIR, draftlib=settings.SUBMIT_YANG_DRAFT_MODEL_DIR, tmplib=workdir)
                    code, out, err = pipe(cmd)
                    if code > 0 or len(err.strip()) > 0:
                        error_lines = err.splitlines()
                        for line in error_lines:
                            if line.strip():
                                try:
                                    if 'err : ' in line:
                                        errors += 1
                                    if 'warn: ' in line:
                                        warnings += 1
                                except ValueError:
                                    pass
                    #passed = passed and code == 0 # For the submission tool.  Yang checks always pass
                    message += "%s: %s:\n%s\n" % (cmd_version, cmd_template, out+"No validation errors\n" if (code == 0 and len(err) == 0) else out+err)
            else:
                errors += 1
                message += "No such file: %s\nPossible mismatch between extracted xym file name and returned module name?\n" % (path)
                    

            if errors==0 and warnings==0:
                dest = os.path.join(settings.SUBMIT_YANG_DRAFT_MODEL_DIR, model)
                shutil.move(path, dest)
            else:
                dest = os.path.join(settings.SUBMIT_YANG_INVAL_MODEL_DIR, model)
                shutil.move(path, dest)

            # summary result
            results.append({
                "name": model,
                "passed":  passed,
                "message": message,
                "warnings": warnings,
                "errors":  errors,
                "items": items,
            })

        shutil.rmtree(workdir)

        passed  = all( res["passed"] for res in results )
        message = "\n".join([ "\n".join([res['name']+':', res["message"]]) for res in results ])
        errors  = sum(res["errors"] for res in results )
        warnings  = sum(res["warnings"] for res in results )
        items  = [ e for res in results for e in res["items"] ]

        return passed, message, errors, warnings, items