|
|
|
@ -17,6 +17,7 @@ from pprint import pprint
|
|
|
|
|
import copy
|
|
|
|
|
import re
|
|
|
|
|
import os
|
|
|
|
|
import stat
|
|
|
|
|
|
|
|
|
|
from ..utils.package import (
|
|
|
|
|
PackageAtomParser,
|
|
|
|
@ -971,6 +972,7 @@ class CalculateExtension(Extension):
|
|
|
|
|
|
|
|
|
|
self.environment.globals.update({'pkg': self.pkg})
|
|
|
|
|
self.environment.globals.update({'grep': self.grep})
|
|
|
|
|
self.environment.globals.update({'exists': self.exists})
|
|
|
|
|
|
|
|
|
|
self._datavars = datavars_module
|
|
|
|
|
self.parameters_processor = parameters_processor
|
|
|
|
@ -1472,15 +1474,7 @@ class CalculateExtension(Extension):
|
|
|
|
|
return Version()
|
|
|
|
|
return package.version
|
|
|
|
|
|
|
|
|
|
@contextfunction
|
|
|
|
|
def grep(self, context, fname, regpattern) -> str:
|
|
|
|
|
'''
|
|
|
|
|
Метод реализующий функция grep
|
|
|
|
|
'''
|
|
|
|
|
try:
|
|
|
|
|
reg = re.compile(regpattern)
|
|
|
|
|
except re.error:
|
|
|
|
|
raise TemplateSyntaxError(_("Wrong regular expression"))
|
|
|
|
|
def get_full_filepath(self, fname):
|
|
|
|
|
# TODO: добавить получение домашней директории пользователя
|
|
|
|
|
#if fname[0] == "~":
|
|
|
|
|
# # Получаем директорию пользователя
|
|
|
|
@ -1490,6 +1484,18 @@ class CalculateExtension(Extension):
|
|
|
|
|
fname = os.path.join(
|
|
|
|
|
self.parameters_processor.chroot_path,
|
|
|
|
|
fname.lstrip("/"))
|
|
|
|
|
return fname
|
|
|
|
|
|
|
|
|
|
@contextfunction
|
|
|
|
|
def grep(self, context, fname, regpattern) -> str:
|
|
|
|
|
'''
|
|
|
|
|
Метод реализующий функцию grep
|
|
|
|
|
'''
|
|
|
|
|
fname = self.get_full_filepath(fname)
|
|
|
|
|
try:
|
|
|
|
|
reg = re.compile(regpattern)
|
|
|
|
|
except re.error:
|
|
|
|
|
raise TemplateSyntaxError(_("Wrong regular expression"))
|
|
|
|
|
fileContent = readFile(fname)
|
|
|
|
|
if not fileContent:
|
|
|
|
|
return ""
|
|
|
|
@ -1503,6 +1509,31 @@ class CalculateExtension(Extension):
|
|
|
|
|
else:
|
|
|
|
|
return ""
|
|
|
|
|
|
|
|
|
|
@contextfunction
|
|
|
|
|
def exists(self, context, fname) -> str:
|
|
|
|
|
'''
|
|
|
|
|
Метод реализующий функцию exists
|
|
|
|
|
'''
|
|
|
|
|
fname = self.get_full_filepath(fname)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
check_map = (
|
|
|
|
|
('f', stat.S_ISREG),
|
|
|
|
|
('d', stat.S_ISDIR),
|
|
|
|
|
('l', stat.S_ISLNK),
|
|
|
|
|
('b', stat.S_ISBLK),
|
|
|
|
|
('c', stat.S_ISCHR),
|
|
|
|
|
('p', stat.S_ISFIFO),
|
|
|
|
|
('s', stat.S_ISSOCK))
|
|
|
|
|
fmode = os.lstat(fname)
|
|
|
|
|
for t, func in check_map:
|
|
|
|
|
if func(fmode.st_mode):
|
|
|
|
|
return t
|
|
|
|
|
else:
|
|
|
|
|
return 'f'
|
|
|
|
|
except OSError:
|
|
|
|
|
return ""
|
|
|
|
|
|
|
|
|
|
class TemplateEngine:
|
|
|
|
|
def __init__(self, directory_path=None,
|
|
|
|
|
datavars_module=Variables(),
|
|
|
|
|