def _produce_input_message(f, params, kparams, _in_message_name, _in_variable_names, no_ctx, no_self, args): _body_style = _validate_body_style(kparams) arg_start = 0 if no_ctx is False: arg_start += 1 if no_self is False: arg_start += 1 if args is None: try: argcount = f.__code__.co_argcount args = f.__code__.co_varnames[arg_start:argcount] except AttributeError: raise TypeError( "It's not possible to instrospect builtins. You must pass a " "sequence of argument names as the '_args' argument to the " "rpc decorator to manually denote the arguments that this " "function accepts." ) if len(params) != len(args): raise Exception("%r function has %d argument(s) but its decorator " "has %d." % (f.__name__, len(args), len(params))) else: args = copy(args) if len(params) != len(args): raise Exception("%r function has %d argument(s) but the _args " "argument has %d." % (f.__name__, len(args), len(params))) in_params = TypeInfo() for k, v in zip(args, params): k = _in_variable_names.get(k, k) in_params[k] = v ns = spyne.const.xml_ns.DEFAULT_NS if _in_message_name.startswith("{"): ns, _, _in_message_name = _in_message_name[1:].partition("}") if _body_style == 'bare': if len(in_params) > 1: raise Exception("body_style='bare' can handle at most one function " "argument.") if len(in_params) == 0: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) else: message, = in_params.values() message = message.customize(sub_name=_in_message_name, sub_ns=ns) assert message.Attributes.sub_name is not None else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message
def _produce_input_message(f, params, kparams, in_message_name, in_variable_names, no_ctx, no_self, args): _body_style = _validate_body_style(kparams) arg_start = 0 if no_ctx is False: arg_start += 1 if no_self is False: arg_start += 1 if args is None: try: argcount = f.__code__.co_argcount args = f.__code__.co_varnames[arg_start:argcount] except AttributeError: raise TypeError( "It's not possible to instrospect builtins. You must pass a " "sequence of argument names as the '_args' argument to the " "rpc decorator to manually denote the arguments that this " "function accepts.") if len(params) != len(args): raise Exception("%r function has %d argument(s) but its decorator " "has %d." % (f.__name__, len(args), len(params))) else: args = copy(args) if len(params) != len(args): raise Exception("%r function has %d argument(s) but the _args " "argument has %d." % (f.__name__, len(args), len(params))) in_params = TypeInfo() for k, v in zip(args, params): k = in_variable_names.get(k, k) in_params[k] = v ns = spyne.const.xml_ns.DEFAULT_NS if in_message_name.startswith("{"): ns, _, in_message_name = in_message_name[1:].partition("}") message = None if _body_style == 'bare': if len(in_params) > 1: raise Exception( "body_style='bare' can handle at most one function " "argument.") if len(in_params) == 0: message = ComplexModel.produce(type_name=in_message_name, namespace=ns, members=in_params) else: message, = in_params.values() message = message.customize(sub_name=in_message_name, sub_ns=ns) from spyne.model import ComplexModelBase if issubclass(message, ComplexModelBase) and not message._type_info: raise Exception("body_style='bare' does not allow empty " "model as param") else: message = ComplexModel.produce(type_name=in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message
def _produce_input_message(f, params, in_message_name, in_variable_names, no_ctx, no_self, argnames, body_style_str, self_ref_cls, in_wsdl_part_name): arg_start = 0 if no_ctx is False: arg_start += 1 if no_self is False: arg_start += 1 if argnames is None: try: argcount = f.__code__.co_argcount argnames = f.__code__.co_varnames[arg_start:argcount] except AttributeError: raise TypeError( "It's not possible to instrospect builtins. You must pass a " "sequence of argument names as the '_args' argument to the " "rpc decorator to manually denote the arguments that this " "function accepts." ) if no_self is False: params = [self_ref_cls.novalidate_freq()] + params argnames = ('self',) + argnames if len(params) != len(argnames): raise LogicError("%r function has %d argument(s) but its decorator " "has %d." % (f.__name__, len(argnames), len(params))) else: argnames = copy(argnames) if len(params) != len(argnames): raise LogicError("%r function has %d argument(s) but the _args " "argument has %d." % ( f.__name__, len(argnames), len(params))) in_params = TypeInfo() from spyne import SelfReference for k, v in zip(argnames, params): try: is_self_ref = issubclass(v, SelfReference) except TypeError: is_self_ref = False if is_self_ref: if no_self is False: raise LogicError("SelfReference can't be used in @rpc") v = recust_selfref(v, self_ref_cls) k = in_variable_names.get(k, k) in_params[k] = v ns = spyne.const.xml.DEFAULT_NS if in_message_name.startswith("{"): ns, _, in_message_name = in_message_name[1:].partition("}") message = None if body_style_str == 'bare': if len(in_params) > 1: raise LogicError("body_style='bare' can handle at most one " "function argument.") if len(in_params) == 0: message = ComplexModel.produce(type_name=in_message_name, namespace=ns, members=in_params) else: message, = in_params.values() message = message.customize(sub_name=in_message_name, sub_ns=ns) if issubclass(message, ComplexModelBase) and not message._type_info: raise LogicError("body_style='bare' does not allow empty " "model as param") # there can't be multiple arguments here. if message.__type_name__ is ModelBase.Empty: message._fill_empty_type_name(ns, in_message_name, "%s_arg0" % in_message_name) else: message = ComplexModel.produce(type_name=in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns if in_wsdl_part_name: message = message.customize(wsdl_part_name=in_wsdl_part_name) return message
raise Exception("The parameter numbers of the %r function and its " "decorator mismatch." % f.func_name) ns = DEFAULT_NS if _in_message_name.startswith("{"): ns, _, in_message_name = _in_message_name[1:].partition("}") message = None if _body_style == 'bare': if len(in_params) > 1: raise Exception("body_style='bare' can handle at most one function " "argument.") in_param = None if len(in_params) == 1: message, = in_params.values() message = message.customize(sub_name=_in_message_name, sub_ns=ns) assert message.Attributes.sub_name is not None # This dates from a time when body_style='bare' could support more # than one parameter. Maybe one day someone will bring that back. else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message
except IndexError, e: raise Exception("The parameter numbers of the %r function and its " "decorator mismatch." % f.func_name) ns = DEFAULT_NS if _in_message_name.startswith("{"): ns = _in_message_name[1:].partition("}")[0] if _body_style == 'bare': if len(in_params) > 1: raise Exception("body_style='bare' can handle at most one function " "argument.") in_param = None if len(in_params) == 1: in_param, = in_params.values() message = ComplexModel.alias(_in_message_name, ns, in_param) else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message def _validate_body_style(kparams): _body_style = kparams.get('_body_style') _soap_body_style = kparams.get('_soap_body_style') if _body_style is None:
def _produce_input_message(f, params, in_message_name, in_variable_names, no_ctx, no_self, argnames, body_style_str, self_ref_cls): arg_start = 0 if no_ctx is False: arg_start += 1 if no_self is False: arg_start += 1 if argnames is None: try: argcount = f.__code__.co_argcount argnames = f.__code__.co_varnames[arg_start:argcount] except AttributeError: raise TypeError( "It's not possible to instrospect builtins. You must pass a " "sequence of argument names as the '_args' argument to the " "rpc decorator to manually denote the arguments that this " "function accepts.") if no_self is False: params = [self_ref_cls.novalidate_freq()] + params argnames = ('self', ) + argnames if len(params) != len(argnames): raise LogicError( "%r function has %d argument(s) but its decorator " "has %d." % (f.__name__, len(argnames), len(params))) else: argnames = copy(argnames) if len(params) != len(argnames): raise LogicError("%r function has %d argument(s) but the _args " "argument has %d." % (f.__name__, len(argnames), len(params))) in_params = TypeInfo() from spyne import SelfReference for k, v in zip(argnames, params): try: is_self_ref = issubclass(v, SelfReference) except TypeError: is_self_ref = False if is_self_ref: if no_self is False: raise LogicError("SelfReference can't be used in @rpc") v = recust_selfref(v, self_ref_cls) k = in_variable_names.get(k, k) in_params[k] = v ns = spyne.const.xml.DEFAULT_NS if in_message_name.startswith("{"): ns, _, in_message_name = in_message_name[1:].partition("}") message = None if body_style_str == 'bare': if len(in_params) > 1: raise LogicError("body_style='bare' can handle at most one " "function argument.") if len(in_params) == 0: message = ComplexModel.produce(type_name=in_message_name, namespace=ns, members=in_params) else: message, = in_params.values() message = message.customize(sub_name=in_message_name, sub_ns=ns) if issubclass(message, ComplexModelBase) and not message._type_info: raise LogicError("body_style='bare' does not allow empty " "model as param") # there can't be multiple arguments here. if message.__type_name__ is ModelBase.Empty: message._fill_empty_type_name(ns, in_message_name, "%s_arg0" % in_message_name) else: message = ComplexModel.produce(type_name=in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message
except IndexError, e: raise Exception("The parameter numbers of the %r function and its " "decorator mismatch." % f.func_name) ns = DEFAULT_NS if _in_message_name.startswith("{"): ns = _in_message_name[1:].partition("}")[0] if _body_style == 'bare': if len(in_params) > 1: raise Exception( "body_style='bare' can handle at most one function " "argument.") in_param = None if len(in_params) == 1: in_param, = in_params.values() message = ComplexModel.alias(_in_message_name, ns, in_param) else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message def _validate_body_style(kparams): _body_style = kparams.get('_body_style') _soap_body_style = kparams.get('_soap_body_style')
raise Exception("The parameter numbers of the %r function and its " "decorator mismatch." % f.func_name) ns = DEFAULT_NS if _in_message_name.startswith("{"): ns, _, _in_message_name = _in_message_name[1:].partition("}") message = None if _body_style == 'bare': if len(in_params) > 1: raise Exception("body_style='bare' can handle at most one function " "argument.") in_param = None if len(in_params) == 1: message, = in_params.values() message = message.customize(sub_name=_in_message_name, sub_ns=ns) assert message.Attributes.sub_name is not None # This dates from a time when body_style='bare' could support more # than one parameter. Maybe one day someone will bring that back. else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) else: message = ComplexModel.produce(type_name=_in_message_name, namespace=ns, members=in_params) message.__namespace__ = ns return message