blob: affd94410b2a890376818c0187bc6f32edaec182 [file] [log] [blame]
#
# -*- coding: utf-8 -*-
#
# This file is part of reclass
#
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from .parser import Parser
from .dictitem import DictItem
from .listitem import ListItem
from .scaitem import ScaItem
from reclass.errors import InterpolationError
from six import string_types
class Value(object):
_parser = Parser()
def __init__(self, value, settings, uri, parse_string=True):
self._settings = settings
self._uri = uri
self.overwrite = False
self._constant = False
if isinstance(value, string_types):
if parse_string:
try:
self._item = self._parser.parse(value, self._settings)
except InterpolationError as e:
e.uri = self._uri
raise
else:
self._item = ScaItem(value, self._settings)
elif isinstance(value, list):
self._item = ListItem(value, self._settings)
elif isinstance(value, dict):
self._item = DictItem(value, self._settings)
else:
self._item = ScaItem(value, self._settings)
@property
def uri(self):
return self._uri
@property
def constant(self):
return self._constant
@constant.setter
def constant(self, constant):
self._constant = constant
def item_type(self):
return self._item.type
def item_type_str(self):
return self._item.type_str()
def is_container(self):
return self._item.is_container()
@property
def allRefs(self):
return self._item.allRefs
@property
def has_references(self):
return self._item.has_references
@property
def has_inv_query(self):
return self._item.has_inv_query
@property
def needs_all_envs(self):
if self._item.has_inv_query:
return self._item.needs_all_envs
else:
return False
def ignore_failed_render(self):
return self._item.ignore_failed_render
@property
def is_complex(self):
return self._item.is_complex
def get_references(self):
return self._item.get_references()
def get_inv_references(self):
return self._item.get_inv_references()
def assembleRefs(self, context):
if self._item.has_references:
self._item.assembleRefs(context)
def render(self, context, inventory):
try:
return self._item.render(context, inventory)
except InterpolationError as e:
e.uri = self._uri
raise
@property
def contents(self):
return self._item.contents
def merge_over(self, value):
self._item = self._item.merge_over(value._item)
return self
def __repr__(self):
return 'Value(%r)' % self._item
def __str__(self):
return str(self._item)