Exemple #1
0
    def test_unicode_expression_expression(self):
        yaql_expr = yaql_expression.YaqlExpression(u"'yaql ♥ unicode'",
                                                   self._version)
        yaql_expr2 = yaql_expression.YaqlExpression(yaql_expr, self._version)

        self.assertEqual(u"'yaql ♥ unicode'".encode('utf-8'),
                         yaql_expr2.expression)
Exemple #2
0
def evaluate(value, context, max_depth=sys.maxint):
    if isinstance(value, yaql.expressions.Expression):
        value = yaql_expression.YaqlExpression(value)

    if isinstance(value, yaql_expression.YaqlExpression):
        func = lambda: evaluate(value.evaluate(context), context, 1)
        if max_depth <= 0:
            return func
        else:
            return execute_instruction(value, func, context)

    elif isinstance(value, types.DictionaryType):
        result = {}
        for d_key, d_value in value.iteritems():
            result[evaluate(d_key, context, max_depth - 1)] = \
                evaluate(d_value, context, max_depth - 1)
        return result
    elif isinstance(value, types.ListType):
        return [evaluate(t, context, max_depth - 1) for t in value]
    elif isinstance(value, types.TupleType):
        return tuple(evaluate(list(value), context, max_depth - 1))
    elif callable(value):
        return value()
    elif isinstance(value, types.StringTypes):
        return value
    elif isinstance(value, collections.Iterable):
        return list(value)
    else:
        return value
Exemple #3
0
    def test_needs_evaluation(self):
        testee = helpers.needs_evaluation
        parsed_expr = yaql.parse("string")
        yaql_expr = yaql_expression.YaqlExpression("string")

        self.assertTrue(testee(parsed_expr))
        self.assertTrue(testee(yaql_expr))
        self.assertTrue(testee({yaql_expr: 1}))
        self.assertTrue(testee({'label': yaql_expr}))
        self.assertTrue(testee([yaql_expr]))
Exemple #4
0
    def test_evaluate_calls(self):
        string = 'string'
        expected_calls = [mock.call(string, self._version),
                          mock.call().evaluate(context=None)]

        with mock.patch('murano.dsl.yaql_integration.parse') as mock_parse:
            yaql_expr = yaql_expression.YaqlExpression(string, self._version)
            yaql_expr(None)

        self.assertEqual(expected_calls, mock_parse.mock_calls)
    def test_property(self):
        self.assertRaises(TypeError, yaql_expression.YaqlExpression, None,
                          self._version)

        expr = yaql_expression.YaqlExpression('string', self._version)
        self.assertEqual(expr._version, expr.version)
        self.assertIsNone(expr._file_position)

        yaql_rep = expr.__repr__()
        self.assertEqual('YAQL(%s)' % expr._expression, yaql_rep)
Exemple #6
0
    def test_evaluate_calls(self):
        string = 'string'
        expected_calls = [
            mock.call(string),
            mock.call().evaluate(context=None)
        ]

        with mock.patch('yaql.parse') as mock_parse:
            yaql_expr = yaql_expression.YaqlExpression(string)
            yaql_expr.evaluate()

        self.assertEqual(expected_calls, mock_parse.mock_calls)
Exemple #7
0
    def test_match_returns(self):
        expr = yaql_expression.YaqlExpression('string')

        with mock.patch('yaql.parse'):
            self.assertTrue(expr.match('$some'))
            self.assertTrue(expr.match('$.someMore'))

        with mock.patch('yaql.parse') as parse_mock:
            parse_mock.side_effect = yaql.exceptions.YaqlGrammarException
            self.assertFalse(expr.match(''))

        with mock.patch('yaql.parse') as parse_mock:
            parse_mock.side_effect = yaql.exceptions.YaqlLexicalException
            self.assertFalse(expr.match(''))
Exemple #8
0
    def test_is_expression_returns(self):
        expr = yaql_expression.YaqlExpression('string', self._version)

        with mock.patch('murano.dsl.yaql_integration.parse'):
            self.assertTrue(expr.is_expression('$some', self._version))
            self.assertTrue(expr.is_expression('$.someMore', self._version))

        with mock.patch('murano.dsl.yaql_integration.parse') as parse_mock:
            parse_mock.side_effect = exceptions.YaqlGrammarException
            self.assertFalse(expr.is_expression('', self._version))

        with mock.patch('murano.dsl.yaql_integration.parse') as parse_mock:
            parse_mock.side_effect = exceptions.YaqlLexicalException
            self.assertFalse(expr.is_expression('', self._version))
Exemple #9
0
 def _generate_arguments_scheme(self, func):
     func_info = inspect.getargspec(func)
     data = [(name, {
         'Contract': yaql_expression.YaqlExpression('$')
     }) for name in func_info.args]
     if inspect.ismethod(func):
         data = data[1:]
     defaults = func_info.defaults or tuple()
     for i in xrange(len(defaults)):
         data[i + len(data) - len(defaults)][1]['Default'] = defaults[i]
     result = collections.OrderedDict([
         (name, typespec.ArgumentSpec(declaration, self.murano_class))
         for name, declaration in data
     ])
     if '_context' in result:
         del result['_context']
     return result
Exemple #10
0
    def test_expression(self):
        yaql_expr = yaql_expression.YaqlExpression('string')

        self.assertEqual('string', yaql_expr.expression)
Exemple #11
0
 def yaql_constructor(loader, node):
     value = loader.construct_scalar(node)
     result = yaql_expression.YaqlExpression(value, version)
     result.source_file_position = build_position(node)
     return result
Exemple #12
0
def yaql_constructor(loader, node):
    value = loader.construct_scalar(node)
    return yaql_expression.YaqlExpression(value)
Exemple #13
0
 def _get_environment(self, _context):
     return yaql_expression.YaqlExpression(
         "$host.find('io.murano.Environment').require()").evaluate(_context)
Exemple #14
0
 def __init__(self, Parallel, Limit=None):
     super(ParallelMacro, self).__init__(Parallel)
     if Limit:
         self._limit = yaql_expression.YaqlExpression(str(Limit))
     else:
         self._limit = len(self.code_block)
Exemple #15
0
    def test_unicode_expression(self):
        yaql_expr = yaql_expression.YaqlExpression(u"'yaql ♥ unicode'")

        self.assertEqual(u"'yaql ♥ unicode'".encode('utf-8'),
                         yaql_expr.expression)