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)
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
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]))
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)
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)
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(''))
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))
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
def test_expression(self): yaql_expr = yaql_expression.YaqlExpression('string') self.assertEqual('string', yaql_expr.expression)
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
def yaql_constructor(loader, node): value = loader.construct_scalar(node) return yaql_expression.YaqlExpression(value)
def _get_environment(self, _context): return yaql_expression.YaqlExpression( "$host.find('io.murano.Environment').require()").evaluate(_context)
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)
def test_unicode_expression(self): yaql_expr = yaql_expression.YaqlExpression(u"'yaql ♥ unicode'") self.assertEqual(u"'yaql ♥ unicode'".encode('utf-8'), yaql_expr.expression)