def format(self, record): keywords = { 'create': green, 'update': yellow, 'skip': black, 'identical': black, 're-initialized': yellow, 'remove': black, 'notice': black, 'execute': black } if record.levelno in (SKIP, INFO): for item in keywords: if record.msg.startswith(item): record.msg = record.msg.replace(item, ' '*2 + \ keywords[item](bold(item.rjust(9)))) elif record.levelno >= logging.WARN: record.levelname = record.levelname.replace('WARNING', 'WARN') record.msg = ''.join([ ' ' * 2, u"" + red(bold(record.levelname.lower().rjust(9))), ' ', record.msg ]) return logging.Formatter.format(self, record)
def breaks(env, firstrun): """Return whether the new version may break current configuration and print all changes between the current and new version.""" version = memoize('version') or (0, 4) if version >= (env.version.major, env.version.minor): return False memoize('version', (env.version.major, env.version.minor, env.version.patch)) if firstrun: return False broken = False print for major in range(version[0], env.version.major or 1): for minor in range(version[1], env.version.minor): rv, hints = changesfor('%i.%i' % (major, minor + 1)) broken = broken or rv print (blue('Acrylamid') + ' %i.%s' % (major, minor+1) + u' – changes').encode('utf-8'), if broken: print (u'– ' + red('may break something.')).encode('utf-8') else: print print print colorize(hints).encode('utf-8') print return broken
def w3c(paths, conf, warn=False, sleep=0.2): """Validate HTML by using the validator.w3.org API. :param paths: a list of HTML files we map to our actual domain :param conf: configuration :param warn: don't handle warnings as success when set :param sleep: sleep between requests (be nice to their API)""" for path in paths: url = path[len(conf['output_dir']) - 1:] resp = head("http://validator.w3.org/check?uri=" + \ helpers.joinurl(conf['www_root'], quote(url))) print(helpers.rchop(url, 'index.html'), end=' ') if resp.code != 200: print(red('not 200 Ok!')) continue headers = resp.info() if headers['x-w3c-validator-status'] == "Abort": print(red("Abort")) elif headers['x-w3c-validator-status'] == 'Valid': if int(headers['x-w3c-validator-warnings']) == 0: print(green('Ok')) else: if warn: print( yellow(headers['x-w3c-validator-warnings'] + ' warns')) else: print(green('Ok')) else: res = headers['x-w3c-validator-errors'] + ' errors, ' + \ headers['x-w3c-validator-warnings'] + ' warns' print(red(res)) time.sleep(sleep)
def w3c(paths, conf, warn=False, sleep=0.2): """Validate HTML by using the validator.w3.org API. :param paths: a list of HTML files we map to our actual domain :param conf: configuration :param warn: don't handle warnings as success when set :param sleep: sleep between requests (be nice to their API)""" for path in paths: url = path[len(conf['output_dir'])-1:] resp = head("http://validator.w3.org/check?uri=" + \ helpers.joinurl(conf['www_root'], quote(url))) print(helpers.rchop(url, 'index.html'), end=' ') if resp.code != 200: print(red('not 200 Ok!')) continue headers = resp.info() if headers['x-w3c-validator-status'] == "Abort": print(red("Abort")) elif headers['x-w3c-validator-status'] == 'Valid': if int(headers['x-w3c-validator-warnings']) == 0: print(green('Ok')) else: if warn: print(yellow(headers['x-w3c-validator-warnings'] + ' warns')) else: print(green('Ok')) else: res = headers['x-w3c-validator-errors'] + ' errors, ' + \ headers['x-w3c-validator-warnings'] + ' warns' print(red(res)) time.sleep(sleep)
def format(self, record): keywords = {'create': green, 'update': yellow, 'skip': black, 'identical': black, 're-initialized': yellow, 'remove': black, 'notice': black, 'execute': black} if record.levelno in (SKIP, INFO): for item in keywords: if record.msg.startswith(item): record.msg = record.msg.replace(item, ' '*2 + \ keywords[item](bold(item.rjust(9)))) elif record.levelno >= logging.WARN: record.levelname = record.levelname.replace('WARNING', 'WARN') record.msg = ''.join([' '*2, u"" + red(bold(record.levelname.lower().rjust(9))), ' ', record.msg]) return logging.Formatter.format(self, record)
def check(url, path): """A HEAD request to URL. If HEAD is not allowed, we try GET.""" try: get(url, timeout=10) except HTTPError as e: if e.code == 405: try: get(url, path, 'GET', True) except URLError as e: print(' ' + yellow(e.reason), url) print(white(' -- ' + path)) else: print(' ' + red(e.code), url) print(white(' -- ' + path)) except URLError as e: print(' ' + yellow(e.reason), url) print(white(' -- ' + path))
def check(url, path): """A HEAD request to URL. If HEAD is not allowed, we try GET.""" try: get(url, timeout=10) except HTTPError as e: if e.code == 405: try: get(url, path, 'GET', True) except URLError as e: print ' ' + yellow(e.reason), url print white(' -- ' + path) else: print ' ' + red(e.code), url print white(' -- ' + path) except URLError as e: print ' ' + yellow(e.reason), url print white(' -- ' + path)
def format(self, record): keywords = { "create": green, "update": yellow, "skip": black, "identical": black, "re-initialized": yellow, "remove": black, "notice": black, "execute": black, } if record.levelno in (SKIP, INFO): for item in keywords: if record.msg.startswith(item): record.msg = record.msg.replace(item, " " * 2 + keywords[item](bold(item.rjust(9)))) elif record.levelno >= logging.WARN: record.levelname = record.levelname.replace("WARNING", "WARN") record.msg = "".join([" " * 2, u"" + red(bold(record.levelname.lower().rjust(9))), " ", record.msg]) return logging.Formatter.format(self, record)
def breaks(env, firstrun): """Return whether the new version may break current configuration and print all changes between the current and new version.""" version = memoize("version") or (0, 4) if version >= (env.version.major, env.version.minor): return False memoize("version", (env.version.major, env.version.minor)) if firstrun: return False broken = False for major in range(version[0], env.version.major or 1): for minor in range(version[1], env.version.minor): rv, hints = changesfor("%i.%i" % (major, minor + 1)) broken = broken or rv if not hints: continue print() print((blue("Acrylamid") + " %i.%s" % (major, minor + 1) + u" – changes").encode("utf-8"), end="") if broken: print((u"– " + red("may break something.")).encode("utf-8")) else: print() print() print(colorize(hints).encode("utf-8")) print() return broken
def breaks(env, firstrun): """Return whether the new version may break current configuration and print all changes between the current and new version.""" version = memoize('version') or (0, 4) if version >= (env.version.major, env.version.minor): return False memoize('version', (env.version.major, env.version.minor)) if firstrun: return False broken = False for major in range(version[0], env.version.major or 1): for minor in range(version[1], env.version.minor): rv, hints = changesfor('%i.%i' % (major, minor + 1)) broken = broken or rv if not hints: continue print() print((blue('Acrylamid') + ' %i.%s' % (major, minor+1) + u' – changes').encode('utf-8'), end="") if broken: print((u'– ' + red('may break something.')).encode('utf-8')) else: print() print() print(colorize(hints).encode('utf-8')) print() return broken
if "break" in line: safe = False return not safe, "\n".join(rv) colorize = lambda text: re.sub( "`([^`]+)`", lambda m: bold(blue(m.group(1))).encode("utf-8"), re.sub( "`([A-Z_*]+)`", lambda m: bold(m.group(1)).encode("utf-8"), re.sub( "(#\d+)", lambda m: underline(m.group(1)).encode("utf-8"), re.sub("(breaks?)", lambda m: red(bold(m.group(1))).encode("utf-8"), text), ), ), ) def breaks(env, firstrun): """Return whether the new version may break current configuration and print all changes between the current and new version.""" version = memoize("version") or (0, 4) if version >= (env.version.major, env.version.minor): return False memoize("version", (env.version.major, env.version.minor))
paragraph = 'changes' in line continue if section and paragraph: rv.append(line) if 'break' in line: safe = False return not safe, '\n'.join(rv) colorize = lambda text: \ re.sub('`([^`]+)`', lambda m: bold(blue(m.group(1))).encode('utf-8'), re.sub('`([A-Z_*]+)`', lambda m: bold(m.group(1)).encode('utf-8'), re.sub('(#\d+)', lambda m: underline(m.group(1)).encode('utf-8'), re.sub('(breaks?)', lambda m: red(bold(m.group(1))).encode('utf-8'), text)))) def breaks(env, firstrun): """Return whether the new version may break current configuration and print all changes between the current and new version.""" version = memoize('version') or (0, 4) if version >= (env.version.major, env.version.minor): return False memoize('version', (env.version.major, env.version.minor)) if firstrun: return False