def view_stderr(): key = request.values.get("_id") job = db.queue.find_one({"_id":ObjectId(key)}) if job is None: return 'None' else: contents = job.get('stderr','No stderr') return Ansi2HTMLConverter().convert(contents)
def convertHTML(text): """Replaces ANSI color codes with HTML""" try: from ansi2html import Ansi2HTMLConverter conv = Ansi2HTMLConverter(dark_bg=False, inline=True) return conv.convert(text).replace('AAAAAA', 'FFFFFF') except ImportError: return ansi_re.sub('', text)
def format_log(log): conv = Ansi2HTMLConverter(dark_bg=False, scheme="solarized", markup_lines=True) headers = conv.produce_headers() content = conv.convert(log, full=False) content = f'<pre class="ansi2html-content">{content}</pre>' return headers + content
def restart_service(): service = request.get_json().get('service') service_path = os.path.join(os.getenv('ROBOTFXDIR'), 'etc', 'init', service) output = subprocess.run([service_path, 'restart'], stdout=subprocess.PIPE) conv = Ansi2HTMLConverter() html = conv.convert(output.stdout.decode("utf-8"), full=False) return jsonify({'output': html})
def read(cls, queue, f_name): instance = cls() instance.queue = queue instance.f_name = f_name instance.conv = Ansi2HTMLConverter() instance.daemon = True instance.start() return instance
def inl_ansi_html(s): # TODO fix the style, looks terrible s = Ansi2HTMLConverter().convert(s) pre, s = s.split('<style', 1) style, body = s.split('</style>', 1) pre, body = s.split('<body', 1) body = body.split('</body>', 1)[0] return '\n```\n\n<style %s</style><div %s</div>\n\n```' % (style, body)
def __init__(self, filename="tmp.html", mode="a", buff=0): self.stdout = sys.stdout # self.file = open(filename, mode, buff) self.lines = [] self.transcript = open(filename, mode="w") self.conv = Ansi2HTMLConverter() sys.stdout = self
def test_hidden_text(self): sample = '\x1b[%dmHIDDEN\x1b[%dmVISIBLE\x1b[0m' % (ANSI_VISIBILITY_OFF, ANSI_VISIBILITY_ON) html = Ansi2HTMLConverter(inline=True).convert(sample, full=False) expected = six.u( '<span style="visibility: hidden">HIDDEN</span>VISIBLE') self.assertEqual(expected, html)
def view_stdout(): # See https://pypi.org/project/ansi2html/ for colored ansi -> HTML conversions key = request.values.get("_id") job = db.queue.find_one({"_id":ObjectId(key)}) if job is None: return 'None' else: contents = job.get('stdout','No stdout') return Ansi2HTMLConverter().convert(contents)
def test_produce_headers(self): conv = Ansi2HTMLConverter() headers = conv.produce_headers() inputfile = join(_here, "produce_headers.txt") with open(inputfile, "rb") as produce_headers: expected_data = read_to_unicode(produce_headers) self.assertMultiLineEqual(headers, "".join(expected_data))
def convert_ansi_to_html(text, full=False): converted = '' try: conv = Ansi2HTMLConverter(markup_lines=True, linkify=False, escaped=False) converted = conv.convert(text.replace('\n', ' <br/>'), full=full) except Exception, e: converted = text
def update_result(curr_id): try: base_path = BASE_DIR + 'results/' + curr_id conv = Ansi2HTMLConverter() return jsonify(result=conv.convert(open(base_path).read().strip()), done=os.path.exists(base_path + '.done'), submittable=os.path.exists(base_path + '.report')) except: return jsonify(result='No jobs pending.', done=False)
def __init__(self): self.conv = Ansi2HTMLConverter(inline=True) self.ws = cr.ws self.r_log = cr.r_log self.r_user = cr.r_user self.r_ip = cr.r_ip self.r_port = cr.r_port # 配置远程服务器的IP,帐号,密码,端口等,因我做了SSH免密登陆,所以不需要密码 self.cmd = cr.cmd
def runit(): variable_manager = VariableManager() loader = DataLoader() inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list='/home/myhostlist') playbook_path = './myplaybook.yml' if not os.path.exists(playbook_path): print '[INFO] The playbook does not exist' sys.exit() Options = namedtuple('Options', [ 'listtags', 'listtasks', 'listhosts', 'syntax', 'connection', 'module_path', 'forks', 'remote_user', 'private_key_file', 'ssh_common_args', 'ssh_extra_args', 'sftp_extra_args', 'scp_extra_args', 'become', 'become_method', 'become_user', 'verbosity', 'check' ]) options = Options(listtags=False, listtasks=False, listhosts=False, syntax=False, connection='ssh', module_path=None, forks=100, remote_user='******', private_key_file=None, ssh_common_args=None, ssh_extra_args=None, sftp_extra_args=None, scp_extra_args=None, become=True, become_method=None, become_user='******', verbosity=1, check=False) passwords = {} conv = Ansi2HTMLConverter() old_stdout = sys.stdout sys.stdout = mystdout = StringIO() mystdout.reset() PlaybookExecutor(playbooks=[playbook_path], inventory=inventory, variable_manager=variable_manager, loader=loader, options=options, passwords=passwords).run() sys.stdout = old_stdout mystdout.seek(0) if mystdout.readline(): for line in mystdout: yield conv.convert(line.rstrip()) mystdout.close()
def convert_file_contents_to_html2(normalized_output_file): #conv = Ansi2HTMLConverter() with open(normalized_output_file, "rb") as scan_file: test_data = "".join(read_to_unicode(scan_file)) #expected_data = [e.rstrip('\n') for e in read_to_unicode(scan_file)] html = Ansi2HTMLConverter().convert(test_data, ensure_trailing_newline=True) return html
def _convert_log_to_html(self, log_string): def strip_enclosing_html(html): ret = html.split('<pre id="content">')[1] ret = ret.split('</pre>')[0] ret = ret.rstrip() return ret conv = Ansi2HTMLConverter(inline=True) html = unicode(conv.convert(log_string)) return strip_enclosing_html(html)
def test_partial(self): rainbow = '\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m\n' html = Ansi2HTMLConverter().convert(rainbow, full=False).strip() expected = (u'<span class="ansi1"><span class="ansi40">' + u'<span class="ansi31">r<span class="ansi32">a' + u'<span class="ansi33">i<span class="ansi34">n' + u'<span class="ansi35">b<span class="ansi36">o' + u'<span class="ansi37">w</span>') self.assertEqual(expected, html)
def tohtml(filename): """Produce HTML file with highlighted matches.""" conv = Ansi2HTMLConverter(dark_bg=False) with io.open(filename, 'r', encoding='utf8') as inp: ansi = inp.read() with open('%s.html' % filename.rsplit('.', 1)[0], 'w', encoding='utf8') as out: out.write( conv.convert(ansi).replace('#AAAAAA', '#FFFFFF', 1).replace('.tok', ''))
def test_unicode(self): """ Ensure that the converter returns unicode(py2)/str(py3) objs. """ with open(join(_here, "ansicolor.txt"), "rb") as input: test_data = "".join(read_to_unicode(input)) html = Ansi2HTMLConverter().convert(test_data).split("\n") for chunk in html: assert isinstance(chunk, str)
def generateHTML(inhaleOut, webdirpath, fqdn): conv = Ansi2HTMLConverter() ansi = "".join(inhaleOut) html = conv.convert(ansi) timeStamp = datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S") fName = webdirpath + timeStamp + ".html" with open(fName, 'w') as outfile: outfile.write(html) webPath = fqdn + webdirpath + timeStamp + ".html" return webPath
def ansi2html(ansi, **kwargs): r""" >>> from hosh import Hosh >>> Hosh(b"asd").idc '\x1b[38;5;71m\x1b[1m\x1b[48;5;0mL\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0ms\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mx\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mC\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0ma\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mj\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0ml\x1b[0m\x1b[38;5;78m\x1b[1m\x1b[48;5;0mK\x1b[0m\x1b[38;5;119m\x1b[1m\x1b[48;5;0m8\x1b[0m\x1b[38;5;113m\x1b[1m\x1b[48;5;0m3\x1b[0m\x1b[38;5;113m\x1b[1m\x1b[48;5;0m0\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mA\x1b[0m\x1b[38;5;72m\x1b[1m\x1b[48;5;0mK\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mq\x1b[0m\x1b[38;5;149m\x1b[1m\x1b[48;5;0mt\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mU\x1b[0m\x1b[38;5;71m\x1b[1m\x1b[48;5;0m5\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mv\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0m0\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mC\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0m9\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mY\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mV\x1b[0m\x1b[38;5;78m\x1b[1m\x1b[48;5;0m9\x1b[0m\x1b[38;5;119m\x1b[1m\x1b[48;5;0mb\x1b[0m\x1b[38;5;113m\x1b[1m\x1b[48;5;0mQ\x1b[0m\x1b[38;5;113m\x1b[1m\x1b[48;5;0mn\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mZ\x1b[0m\x1b[38;5;72m\x1b[1m\x1b[48;5;0mJ\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0m1\x1b[0m\x1b[38;5;149m\x1b[1m\x1b[48;5;0mw\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mG\x1b[0m\x1b[38;5;71m\x1b[1m\x1b[48;5;0m3\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0mq\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0ms\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0ml\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mW\x1b[0m\x1b[38;5;83m\x1b[1m\x1b[48;5;0m9\x1b[0m\x1b[38;5;107m\x1b[1m\x1b[48;5;0mZ\x1b[0m\x1b[38;5;78m\x1b[1m\x1b[48;5;0m6\x1b[0m' >>> Hosh(b"asd").html '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n<title></title>\n<style type="text/css">\n.ansi2html-content { display: inline; white-space: pre-wrap; word-wrap: break-word; }\n.body_foreground { color: #AAAAAA; }\n.body_background { background-color: #000000; }\n.body_foreground > .bold,.bold > .body_foreground, body.body_foreground > pre > .bold { color: #FFFFFF; font-weight: normal; }\n.inv_foreground { color: #000000; }\n.inv_background { background-color: #AAAAAA; }\n.ansi1 { font-weight: bold; }\n.ansi48-0 { background-color: #000316; }\n.ansi38-71 { color: #5faf5f; }\n.ansi38-72 { color: #5faf87; }\n.ansi38-107 { color: #87af5f; }\n.ansi38-78 { color: #5fd787; }\n.ansi38-113 { color: #87d75f; }\n.ansi38-149 { color: #afd75f; }\n.ansi38-83 { color: #5fff5f; }\n.ansi38-119 { color: #87ff5f; }\n</style>\n</head>\n<body class="body_foreground body_background" style="font-size: normal;" >\n<pre class="ansi2html-content">\n<span class="ansi38-71"></span><span class="ansi1 ansi38-71"></span><span class="ansi1 ansi38-71 ansi48-0">L</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">s</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">x</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">C</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">a</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">j</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">l</span><span class="ansi38-78"></span><span class="ansi1 ansi38-78"></span><span class="ansi1 ansi38-78 ansi48-0">K</span><span class="ansi38-119"></span><span class="ansi1 ansi38-119"></span><span class="ansi1 ansi38-119 ansi48-0">8</span><span class="ansi38-113"></span><span class="ansi1 ansi38-113"></span><span class="ansi1 ansi38-113 ansi48-0">3</span><span class="ansi38-113"></span><span class="ansi1 ansi38-113"></span><span class="ansi1 ansi38-113 ansi48-0">0</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">A</span><span class="ansi38-72"></span><span class="ansi1 ansi38-72"></span><span class="ansi1 ansi38-72 ansi48-0">K</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">q</span><span class="ansi38-149"></span><span class="ansi1 ansi38-149"></span><span class="ansi1 ansi38-149 ansi48-0">t</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">U</span><span class="ansi38-71"></span><span class="ansi1 ansi38-71"></span><span class="ansi1 ansi38-71 ansi48-0">5</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">v</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">0</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">C</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">9</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">Y</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">V</span><span class="ansi38-78"></span><span class="ansi1 ansi38-78"></span><span class="ansi1 ansi38-78 ansi48-0">9</span><span class="ansi38-119"></span><span class="ansi1 ansi38-119"></span><span class="ansi1 ansi38-119 ansi48-0">b</span><span class="ansi38-113"></span><span class="ansi1 ansi38-113"></span><span class="ansi1 ansi38-113 ansi48-0">Q</span><span class="ansi38-113"></span><span class="ansi1 ansi38-113"></span><span class="ansi1 ansi38-113 ansi48-0">n</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">Z</span><span class="ansi38-72"></span><span class="ansi1 ansi38-72"></span><span class="ansi1 ansi38-72 ansi48-0">J</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">1</span><span class="ansi38-149"></span><span class="ansi1 ansi38-149"></span><span class="ansi1 ansi38-149 ansi48-0">w</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">G</span><span class="ansi38-71"></span><span class="ansi1 ansi38-71"></span><span class="ansi1 ansi38-71 ansi48-0">3</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">q</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">s</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">l</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">W</span><span class="ansi38-83"></span><span class="ansi1 ansi38-83"></span><span class="ansi1 ansi38-83 ansi48-0">9</span><span class="ansi38-107"></span><span class="ansi1 ansi38-107"></span><span class="ansi1 ansi38-107 ansi48-0">Z</span><span class="ansi38-78"></span><span class="ansi1 ansi38-78"></span><span class="ansi1 ansi38-78 ansi48-0">6</span>\n</pre>\n</body>\n\n</html>\n' """ conv = Ansi2HTMLConverter(dark_bg=GLOBAL["dark_theme"], **kwargs) return conv.convert(ansi)
def _wrap_errors(_): """Install traceback handling for callbacks""" self._traceback = sys.exc_info()[2] # Compute number of stack frames to skip to get down to callback tb_werkzeug = get_current_traceback() skip = 0 if dev_tools_prune_errors: for i, line in enumerate(tb_werkzeug.plaintext.splitlines()): if "%% callback invoked %%" in line: skip = int((i + 1) / 2) break # Customized formatargvalues function so we can place function parameters # on separate lines original_formatargvalues = inspect.formatargvalues inspect.formatargvalues = _custom_formatargvalues try: # Use IPython traceback formatting to build colored ANSI traceback # string ostream = io.StringIO() ipytb = FormattedTB( tb_offset=skip, mode="Verbose", color_scheme="Linux", include_vars=True, ostream=ostream ) ipytb() finally: # Restore formatargvalues inspect.formatargvalues = original_formatargvalues # Print colored ANSI representation if requested ansi_stacktrace = ostream.getvalue() if inline_exceptions: print(ansi_stacktrace) # Use ansi2html to convert the colored ANSI string to HTML conv = Ansi2HTMLConverter(scheme="ansi2html", dark_bg=False) html_str = conv.convert(ansi_stacktrace) # Set width to fit 75-character wide stack trace and font to a size the # won't require a horizontal scroll bar html_str = html_str.replace( '<html>', '<html style="width: 75ch; font-size: 0.86em">' ) # Remove explicit background color so Dash dev-tools can set background # color html_str = re.sub("background-color:[^;]+;", "", html_str) return html_str, 500
def process(self): conv = Ansi2HTMLConverter(inline=True, font_size=self.setting('font-size')) if self.setting('pre'): s = "<pre>\n%s</pre>\n" else: s = "%s\n" for k, v in self.input_data.items(): self.output_data[k] = s % conv.convert(str(v), full=False) self.output_data.save()
def builder(): form = BuilderForm() user_secrets = Secret.query.filter_by(user_id=current_user.id) print(current_user.id) print(user_secrets) if form.validate_on_submit(): conv = Ansi2HTMLConverter() plan = get_terraform_plan() plan = conv.convert(plan.stdout) return render_template("plan.html", plan=plan) return render_template("builder.html", form=form, secrets=user_secrets)
def script_to_html(filename, output_filename): conv = Ansi2HTMLConverter(dark_bg=True, font_size=18) with open(filename, 'r') as f: ansi = f.read() ansi = ansi.decode('utf-8', errors='ignore') ansi = removebells(ansi) ansi = removebackspaces(ansi) html = conv.convert(ansi) with open(output_filename, 'w') as f: f.write(html.encode('utf8'))
def format_log(log): conv = Ansi2HTMLConverter(dark_bg=False, scheme='solarized', markup_lines=True) headers = conv.produce_headers() content = conv.convert(log, full=False) content = '<pre class="ansi2html-content">{}</pre>'.format( content.encode('utf8')) # content = '<div class="body_foreground body_background">{}</div>'.format( # content) return headers + content
def test_lighter_text(self): sample = "NORMAL\x1b[%dmLIGHTER\x1b[%dmBOLD\x1b[%dmNORMAL" % ( ANSI_INTENSITY_REDUCED, ANSI_INTENSITY_INCREASED, ANSI_INTENSITY_NORMAL, ) html = Ansi2HTMLConverter(inline=True).convert(sample, full=False) expected = 'NORMAL<span style="font-weight: lighter">LIGHTER</span><span style="font-weight: bold">BOLD</span>NORMAL' self.assertEqual(expected, html)
def stop_logging(outfile, old_stdout): """ Stops logging to a file and returns the output to screen only """ outfile.close() sys.stdout = old_stdout with open(outfile.name, 'r') as f: ansi = f.read() html = Ansi2HTMLConverter().convert(ansi) with open('{}.html'.format(outfile.name.split('.')[0]), 'w+') as f: f.write(html)
def gen_ansi_output(): conv = Ansi2HTMLConverter() input_file = EXAMPLES_DIR / 'devtools_main.py' os.environ['PY_DEVTOOLS_HIGHLIGHT'] = 'true' p = subprocess.run((sys.executable, str(input_file)), stdout=subprocess.PIPE, check=True, encoding='utf8') html = conv.convert(p.stdout, full=False).strip('\r\n') full_html = f'<div class="terminal">\n<pre class="terminal-content">\n{html}\n</pre>\n</div>' path = TMP_EXAMPLES_DIR / f'{input_file.stem}.html' path.write_text(full_html) print(f'generated ansi output to {path}')
def test_produce_headers(self): conv = Ansi2HTMLConverter() headers = conv.produce_headers().split("\n") inputfile = join(_here, "produce_headers.txt") with open(inputfile, "rb") as produce_headers: expected_data = produce_headers.readlines() for idx in xrange(len(expected_data)): expected = expected_data[idx].strip() actual = headers[idx].strip() self.assertEqual(expected, actual)