示例#1
0
文件: value.py 项目: dvandok/reclass
 def __init__(self, value, delimiter=PARAMETER_INTERPOLATION_DELIMITER):
     self._delimiter = delimiter
     if isinstance(value, str):
         self._item = self._parser.parse(value, delimiter)
     elif isinstance(value, list):
         self._item = ListItem(value)
     elif isinstance(value, dict):
         self._item = DictItem(value)
     else:
         self._item = ScaItem(value)
示例#2
0
 def __init__(self, value, settings, uri):
     self._settings = settings
     self._uri = uri
     if isinstance(value, str):
         try:
             self._item = self._parser.parse(value, self._settings)
         except InterpolationError as e:
             e.uri = self._uri
             raise
     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)
示例#3
0
文件: parser.py 项目: dvandok/reclass
    def parse(self, value, delimiter):
        self._delimiter = delimiter
        dollars = value.count('$')
        if dollars == 0:
            # speed up: only use pyparsing if there is a $ in the string
            return ScaItem(value)
        elif dollars == 1:
            # speed up: try a simple reference
            try:
                tokens = self._simple_ref_parser.leaveWhitespace().parseString(value).asList()
            except pp.ParseException as e:
                # fall back on the full parser
                try:
                    tokens = self._parser.leaveWhitespace().parseString(value).asList()
                except pp.ParseException as e:
                    raise ParseError(e.msg, e.line, e.col, e.lineno)
        else:
            # use the full parser
            try:
                tokens = self._parser.leaveWhitespace().parseString(value).asList()
            except pp.ParseException as e:
                raise ParseError(e.msg, e.line, e.col, e.lineno)

        items = self._create_items(tokens)
        if len(items) == 1:
            return items[0]
        else:
            return CompItem(items)
示例#4
0
文件: parser.py 项目: dvandok/reclass
class Parser(object):

    _parser = _get_parser()
    _simple_ref_parser = _get_simple_ref_parser()

    def parse(self, value, delimiter):
        self._delimiter = delimiter
        dollars = value.count('$')
        if dollars == 0:
            # speed up: only use pyparsing if there is a $ in the string
            return ScaItem(value)
        elif dollars == 1:
            # speed up: try a simple reference
            try:
                tokens = self._simple_ref_parser.leaveWhitespace().parseString(value).asList()
            except pp.ParseException as e:
                # fall back on the full parser
                try:
                    tokens = self._parser.leaveWhitespace().parseString(value).asList()
                except pp.ParseException as e:
                    raise ParseError(e.msg, e.line, e.col, e.lineno)
        else:
            # use the full parser
            try:
                tokens = self._parser.leaveWhitespace().parseString(value).asList()
            except pp.ParseException as e:
                raise ParseError(e.msg, e.line, e.col, e.lineno)

        items = self._create_items(tokens)
        if len(items) == 1:
            return items[0]
        else:
            return CompItem(items)

    _create_dict = { _STR: (lambda s, v: ScaItem(v)),
                     _REF: (lambda s, v: s._create_ref(v)),
                     _INV: (lambda s, v: s._create_inv(v)) }

    def _create_items(self, tokens):
        return [ self._create_dict[t](self, v) for t, v in tokens ]

    def _create_ref(self, tokens):
        items = [ self._create_dict[t](self, v) for t, v in tokens ]
        return RefItem(items, self._delimiter)

    def _create_inv(self, tokens):
        items = [ ScaItem(v) for t, v in tokens ]
        if len(items) == 1:
            return InvItem(items[0], self._delimiter)
        else:
            return InvItem(CompItem(items), self._delimiter)
示例#5
0
文件: parser.py 项目: dvandok/reclass
 def _create_inv(self, tokens):
     items = [ ScaItem(v) for t, v in tokens ]
     if len(items) == 1:
         return InvItem(items[0], self._delimiter)
     else:
         return InvItem(CompItem(items), self._delimiter)
示例#6
0
class Value(object):

    _parser = Parser()

    def __init__(self, value, settings, uri):
        self._settings = settings
        self._uri = uri
        if isinstance(value, str):
            try:
                self._item = self._parser.parse(value, self._settings)
            except InterpolationError as e:
                e.uri = self._uri
                raise
        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)

    def uri(self):
        return self._uri

    def is_container(self):
        return self._item.is_container()

    def allRefs(self):
        return self._item.allRefs()

    def has_references(self):
        return self._item.has_references()

    def has_inv_query(self):
        return self._item.has_inv_query()

    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()

    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

    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
示例#7
0
 def _create_inv(self, tokens):
     items = [ ScaItem(v, self._settings) for t, v in tokens ]
     if len(items) == 1:
         return InvItem(items[0], self._settings)
     else:
         return InvItem(CompItem(items), self._settings)
示例#8
0
文件: value.py 项目: dvandok/reclass
class Value(object):

    _parser = Parser()

    def __init__(self, value, delimiter=PARAMETER_INTERPOLATION_DELIMITER):
        self._delimiter = delimiter
        if isinstance(value, str):
            self._item = self._parser.parse(value, delimiter)
        elif isinstance(value, list):
            self._item = ListItem(value)
        elif isinstance(value, dict):
            self._item = DictItem(value)
        else:
            self._item = ScaItem(value)

    def is_container(self):
        return self._item.is_container()

    def allRefs(self):
        return self._item.allRefs()

    def has_references(self):
        return self._item.has_references()

    def has_inv_query(self):
        return self._item.has_inv_query()

    def is_complex(self):
        return self._item.is_complex()

    def get_references(self):
        return self._item.get_references()

    def assembleRefs(self, context):
        if self._item.has_references():
            self._item.assembleRefs(context)

    def render(self, context, inventory, options=None):
        return self._item.render(context, inventory)

    def contents(self):
        return self._item.contents()

    def merge_over(self, value, options):
        self._item = self._item.merge_over(value._item, options)
        return self

    def __repr__(self):
        return 'Value(%r)' % self._item