Merge "Handling of ephemeral methods was fixed"

This commit is contained in:
Jenkins
2016-04-04 13:05:39 +00:00
committed by Gerrit Code Review
3 changed files with 18 additions and 14 deletions

View File

@@ -36,20 +36,22 @@ virtual_exceptions.register()
class MuranoMethod(dsl_types.MuranoMethod, meta.MetaProvider): class MuranoMethod(dsl_types.MuranoMethod, meta.MetaProvider):
def __init__(self, declaring_type, name, payload, original_name=None): def __init__(self, declaring_type, name, payload, original_name=None,
ephemeral=False):
self._name = name self._name = name
original_name = original_name or name original_name = original_name or name
self._declaring_type = weakref.ref(declaring_type) self._declaring_type = weakref.ref(declaring_type)
self._meta_values = None self._meta_values = None
self_ref = self if ephemeral else weakref.proxy(self)
if callable(payload): if callable(payload):
if isinstance(payload, specs.FunctionDefinition): if isinstance(payload, specs.FunctionDefinition):
self._body = payload self._body = payload
else: else:
self._body = yaql_integration.get_function_definition( self._body = yaql_integration.get_function_definition(
payload, weakref.proxy(self), original_name) payload, self_ref, original_name)
self._arguments_scheme = None self._arguments_scheme = None
if any(( if declaring_type.extension_class and any((
helpers.inspect_is_static( helpers.inspect_is_static(
declaring_type.extension_class, original_name), declaring_type.extension_class, original_name),
helpers.inspect_is_classmethod( helpers.inspect_is_classmethod(
@@ -96,8 +98,7 @@ class MuranoMethod(dsl_types.MuranoMethod, meta.MetaProvider):
declaring_type) declaring_type)
self._instance_stub, self._static_stub = \ self._instance_stub, self._static_stub = \
yaql_integration.build_stub_function_definitions( yaql_integration.build_stub_function_definitions(self_ref)
weakref.proxy(self))
@property @property
def name(self): def name(self):

View File

@@ -250,7 +250,8 @@ class MuranoClass(dsl_types.MuranoClass, MuranoType, dslmeta.MetaProvider):
except exceptions.AmbiguousMethodName as e: except exceptions.AmbiguousMethodName as e:
def func(*args, **kwargs): def func(*args, **kwargs):
raise e raise e
yield murano_method.MuranoMethod(self, name, func) yield murano_method.MuranoMethod(
self, name, func, ephemeral=True)
def find_single_property(self, name): def find_single_property(self, name):
result = self.find_property(name) result = self.find_property(name)

View File

@@ -152,11 +152,12 @@ def _infer_parameter_type(name, class_name):
def get_function_definition(func, murano_method, original_name): def get_function_definition(func, murano_method, original_name):
param_type_func = lambda name: _infer_parameter_type(
name, cls.__name__)
body = func
cls = murano_method.declaring_type.extension_class cls = murano_method.declaring_type.extension_class
if (helpers.inspect_is_method(cls, original_name) or param_type_func = \
lambda name: None if not cls else _infer_parameter_type(
name, cls.__name__)
body = func
if (cls is None or helpers.inspect_is_method(cls, original_name) or
helpers.inspect_is_classmethod(cls, original_name)): helpers.inspect_is_classmethod(cls, original_name)):
body = helpers.function(func) body = helpers.function(func)
fd = specs.get_function_definition( fd = specs.get_function_definition(
@@ -164,12 +165,12 @@ def get_function_definition(func, murano_method, original_name):
parameter_type_func=param_type_func) parameter_type_func=param_type_func)
fd.is_method = True fd.is_method = True
fd.is_function = False fd.is_function = False
if helpers.inspect_is_method(cls, original_name): if not cls or helpers.inspect_is_method(cls, original_name):
fd.set_parameter( fd.set_parameter(
0, 0,
dsl.MuranoObjectParameter(murano_method.declaring_type), dsl.MuranoObjectParameter(murano_method.declaring_type),
overwrite=True) overwrite=True)
if helpers.inspect_is_classmethod(cls, original_name): if cls and helpers.inspect_is_classmethod(cls, original_name):
_remove_first_parameter(fd) _remove_first_parameter(fd)
body = func body = func
name = getattr(func, '__murano_name', None) name = getattr(func, '__murano_name', None)
@@ -177,8 +178,9 @@ def get_function_definition(func, murano_method, original_name):
fd.name = name fd.name = name
fd.insert_parameter(specs.ParameterDefinition( fd.insert_parameter(specs.ParameterDefinition(
'?1', yaqltypes.Context(), 0)) '?1', yaqltypes.Context(), 0))
is_static = (helpers.inspect_is_static(cls, original_name) or is_static = cls and (
helpers.inspect_is_classmethod(cls, original_name)) helpers.inspect_is_static(cls, original_name) or
helpers.inspect_is_classmethod(cls, original_name))
if is_static: if is_static:
fd.insert_parameter(specs.ParameterDefinition( fd.insert_parameter(specs.ParameterDefinition(
'?2', yaqltypes.PythonType(object), 1)) '?2', yaqltypes.PythonType(object), 1))