83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
import os
|
|
import sys
|
|
try:
|
|
import ujson as json
|
|
except:
|
|
import json
|
|
from jinja2 import Environment,FileSystemLoader, BaseLoader
|
|
import codecs
|
|
from appPublic.argsConvert import ArgsConvert
|
|
from appPublic.dictObject import DictObject
|
|
def isNone(obj):
|
|
return obj is None
|
|
|
|
|
|
def string_template_render(tmp_string, data):
|
|
rtemplate = Environment(loader=BaseLoader()).from_string(tmp_string)
|
|
return rtemplate.render(**data)
|
|
|
|
class MyTemplateEngine:
|
|
def __init__(self,pathList,file_coding='utf-8',out_coding='utf-8'):
|
|
self.file_coding = file_coding
|
|
self.out_coding = out_coding
|
|
loader = FileSystemLoader(pathList, encoding=self.file_coding)
|
|
self.env = Environment(loader=loader, enable_async=False)
|
|
denv={
|
|
'json':json,
|
|
'hasattr':hasattr,
|
|
'int':int,
|
|
'float':float,
|
|
'str':str,
|
|
'type':type,
|
|
'isNone':isNone,
|
|
'len':len,
|
|
'render':self.render,
|
|
'renders':self.renders,
|
|
'ArgsConvert':ArgsConvert,
|
|
'renderJsonFile':self.renderJsonFile,
|
|
'ospath':lambda x:os.path.sep.join(x.split(os.altsep)),
|
|
'basename':lambda x:os.path.basename(x),
|
|
'basenameWithoutExt':lambda x:os.path.splitext(os.path.basename(x))[0],
|
|
'extname':lambda x:os.path.splitext(x)[-1],
|
|
}
|
|
self.env.globals.update(denv)
|
|
|
|
def set(self,k,v):
|
|
self.env.globals.update({k:v})
|
|
|
|
def _render(self,template,data):
|
|
# print('**********template=',template,'**data=',data,'type_data=',type(data),'************')
|
|
uRet = template.render(**data)
|
|
return uRet
|
|
|
|
def renders(self,tmplstring,data):
|
|
def getGlobal():
|
|
return data
|
|
self.set('global',getGlobal)
|
|
template = self.env.from_string(tmplstring)
|
|
return self._render(template,data)
|
|
|
|
def render(self,tmplfile,data):
|
|
def getGlobal():
|
|
return data
|
|
self.set('global',getGlobal)
|
|
template = self.env.get_template(tmplfile)
|
|
return self._render(template,data)
|
|
|
|
def renderJsonFile(self,tmplfile,jsonfile):
|
|
with codecs.open(jsonfile,"r",self.file_coding) as f:
|
|
data = json.load(f)
|
|
return self.render(tmplfile,data)
|
|
|
|
def tmpTml(f, ns):
|
|
te = MyTemplateEngine('.')
|
|
with codecs.open(f, 'r', 'utf-8') as fd:
|
|
d = fd.read()
|
|
b = te.renders(d, ns)
|
|
filename = os.path.basename(f)
|
|
p = f'/tmp/{filename}'
|
|
with codecs.open(p, 'w', 'utf-8') as wf:
|
|
wf.write(b)
|
|
return p
|
|
|