# coding: utf-8 from argparse import ArgumentParser, FileType from contextlib import closing from codecs import open as copen from json import dumps from math import ceil from os.path import basename, dirname, exists, join from struct import unpack from subprocess import Popen from sys import platform, prefix, stderr from tempfile import NamedTemporaryFile from jinja2 import FileSystemLoader, Template from jinja2.environment import Environment from jumpserver.api import BASE_DIR DEFAULT_TEMPLATE = join(BASE_DIR, 'templates', 'jlog', 'static.jinja2') def escapeString(string): string = string.encode('unicode_escape').decode('utf-8') string = string.replace("'", "\\'") string = '\'' + string + '\'' return string def getTiming(timef): timing = None with closing(timef): timing = [l.strip().split(' ') for l in timef] timing = [(int(ceil(float(r[0]) * 1000)), int(r[1])) for r in timing] return timing def scriptToJSON(scriptf, timing=None): ret = [] with closing(scriptf): scriptf.readline() # ignore first header line from script file offset = 0 for t in timing: data = escapeString(scriptf.read(t[1])) offset += t[0] ret.append((data, offset)) return dumps(ret) def renderTemplate(script_path, time_file_path, dimensions=(24, 80), templatename=DEFAULT_TEMPLATE): with copen(script_path, encoding='utf-8', errors='replace') as scriptf: with open(time_file_path) as timef: timing = getTiming(timef) json = scriptToJSON(scriptf, timing) fsl = FileSystemLoader(dirname(templatename), 'utf-8') e = Environment() e.loader = fsl templatename = basename(templatename) rendered = e.get_template(templatename).render(json=json, dimensions=dimensions) return rendered