TemplatesDict does not return objected templates with 'templates' attribute

This commit is contained in:
Jakub Trllo 2022-02-24 15:36:15 +01:00
parent 899e59b059
commit 43839e63f1
3 changed files with 46 additions and 27 deletions

View file

@ -402,7 +402,9 @@ class AnatomyTemplates(TemplatesDict):
return self.templates.get(key, default) return self.templates.get(key, default)
def reset(self): def reset(self):
self._raw_templates = None
self._templates = None self._templates = None
self._objected_templates = None
@property @property
def project_name(self): def project_name(self):
@ -414,13 +416,21 @@ class AnatomyTemplates(TemplatesDict):
@property @property
def templates(self): def templates(self):
self._validate_discovery()
return self._templates
@property
def objected_templates(self):
self._validate_discovery()
return self._objected_templates
def _validate_discovery(self):
if self.project_name != self.loaded_project: if self.project_name != self.loaded_project:
self._templates = None self.reset()
if self._templates is None: if self._templates is None:
self._discover() self._discover()
self.loaded_project = self.project_name self.loaded_project = self.project_name
return self._templates
def _format_value(self, value, data): def _format_value(self, value, data):
if isinstance(value, RootItem): if isinstance(value, RootItem):
@ -434,31 +444,34 @@ class AnatomyTemplates(TemplatesDict):
def set_templates(self, templates): def set_templates(self, templates):
if not templates: if not templates:
self._raw_templates = None self.reset()
self._templates = None return
else:
self._raw_templates = copy.deepcopy(templates)
templates = copy.deepcopy(templates)
v_queue = collections.deque()
v_queue.append(templates)
while v_queue:
item = v_queue.popleft()
if not isinstance(item, dict):
continue
for key in tuple(item.keys()): self._raw_templates = copy.deepcopy(templates)
value = item[key] templates = copy.deepcopy(templates)
if isinstance(value, dict): v_queue = collections.deque()
v_queue.append(value) v_queue.append(templates)
while v_queue:
item = v_queue.popleft()
if not isinstance(item, dict):
continue
elif ( for key in tuple(item.keys()):
isinstance(value, StringType) value = item[key]
and "{task}" in value if isinstance(value, dict):
): v_queue.append(value)
item[key] = value.replace("{task}", "{task[name]}")
solved_templates = self.solve_template_inner_links(templates) elif (
self._templates = self.create_ojected_templates(solved_templates) isinstance(value, StringType)
and "{task}" in value
):
item[key] = value.replace("{task}", "{task[name]}")
solved_templates = self.solve_template_inner_links(templates)
self._templates = solved_templates
self._objected_templates = self.create_ojected_templates(
solved_templates
)
def default_templates(self): def default_templates(self):
"""Return default templates data with solved inner keys.""" """Return default templates data with solved inner keys."""

View file

@ -227,15 +227,18 @@ class TemplatesDict(object):
def __init__(self, templates=None): def __init__(self, templates=None):
self._raw_templates = None self._raw_templates = None
self._templates = None self._templates = None
self._objected_templates = None
self.set_templates(templates) self.set_templates(templates)
def set_templates(self, templates): def set_templates(self, templates):
if templates is None: if templates is None:
self._raw_templates = None self._raw_templates = None
self._templates = None self._templates = None
self._objected_templates = None
elif isinstance(templates, dict): elif isinstance(templates, dict):
self._raw_templates = copy.deepcopy(templates) self._raw_templates = copy.deepcopy(templates)
self._templates = self.create_ojected_templates(templates) self._templates = templates
self._objected_templates = self.create_ojected_templates(templates)
else: else:
raise TypeError("<{}> argument must be a dict, not {}.".format( raise TypeError("<{}> argument must be a dict, not {}.".format(
self.__class__.__name__, str(type(templates)) self.__class__.__name__, str(type(templates))
@ -255,6 +258,10 @@ class TemplatesDict(object):
def templates(self): def templates(self):
return self._templates return self._templates
@property
def objected_templates(self):
return self._objected_templates
@classmethod @classmethod
def create_ojected_templates(cls, templates): def create_ojected_templates(cls, templates):
if not isinstance(templates, dict): if not isinstance(templates, dict):
@ -325,7 +332,7 @@ class TemplatesDict(object):
if env_key not in data: if env_key not in data:
data[env_key] = val data[env_key] = val
solved = self._solve_dict(self.templates, data) solved = self._solve_dict(self.objected_templates, data)
output = TemplatesResultDict(solved) output = TemplatesResultDict(solved)
output.strict = strict output.strict = strict

View file

@ -97,7 +97,6 @@ class CreateFolders(BaseAction):
all_entities = self.get_notask_children(entity) all_entities = self.get_notask_children(entity)
anatomy = Anatomy(project_name) anatomy = Anatomy(project_name)
project_settings = get_project_settings(project_name)
work_keys = ["work", "folder"] work_keys = ["work", "folder"]
work_template = anatomy.templates work_template = anatomy.templates