view website/issues/detectors/patches.py @ 5988:39b8bc511ed7

Fix html generation errors for boolean options. Code was generating xhtml form for html4 output. In xhtml, Boolean attributes like 'disabled', 'required' are represented with a value that is the same as the attribute name. E.G. <input required="required" ...>. Html 5 (and 4) represents the same as <input required ...> . Recognize booleans in one of two ways: value is None value is the same as the attribute name Make html4 and xhtml variants of cgi_escape_attrs. Have input_htmlp4 and input_xhtml call the proper variant. Also set HTMLInputMixin property cgi_escape_atrs to select proper one similar to self.input definition. Then replace calls to cgi_escape_attr with self.cgi_escape_attrs to get correct output.
author John Rouillard <rouilj@ieee.org>
date Sat, 14 Dec 2019 16:18:15 -0500
parents 0942fe89e82e
children
line wrap: on
line source

# Auditor for patch files
# Patches should be declared as text/plain (also .py files),
# independent of what the browser says, and
# the "patch" keyword should get set automatically.

import posixpath

patchtypes = ('.diff', '.patch')
sourcetypes = ('.diff', '.patch', '.py')

def ispatch(file, types):
    return posixpath.splitext(file)[1] in types

def patches_text_plain(db, cl, nodeid, newvalues):
    if ispatch(newvalues['name'], sourcetypes):
        newvalues['type'] = 'text/plain'

def patches_keyword(db, cl, nodeid, newvalues):
    # Check whether there are any new files
    newfiles = set(newvalues.get('files',()))
    if nodeid:
        newfiles -= set(db.issue.get(nodeid, 'files'))
    # Check whether any of these is a patch
    newpatch = False
    for fileid in newfiles:
        if ispatch(db.file.get(fileid, 'name'), patchtypes):
            newpatch = True
            break
    if newpatch:
        # Add the patch keyword if its not already there
        patchid = db.keyword.lookup("patch")
        oldkeywords = []
        if nodeid:
            oldkeywords = db.issue.get(nodeid, 'keywords')
            if patchid in oldkeywords:
                # This is already marked as a patch
                return
        if 'keywords' not in newvalues:
            newvalues['keywords'] = oldkeywords
        newvalues['keywords'].append(patchid)

def init(db):
    db.file.audit('create', patches_text_plain)
    db.issue.audit('create', patches_keyword)
    db.issue.audit('set', patches_keyword)

Roundup Issue Tracker: http://roundup-tracker.org/