X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=wsdl%2Fgw2wsdl.py;h=4ee12570cb250552bc548f5f5fd700e80b6d1d18;hb=2e1daee2a776ab85304900653ecaf754f2e91fa4;hp=9d3a175eb7226ef842c68abab84b7f6d3b2e0c77;hpb=c5ad44f828150e176116f94220f874abc793fcc3;p=sfa.git diff --git a/wsdl/gw2wsdl.py b/wsdl/gw2wsdl.py index 9d3a175e..4ee12570 100755 --- a/wsdl/gw2wsdl.py +++ b/wsdl/gw2wsdl.py @@ -37,13 +37,25 @@ except NameError: from sets import Set set = Set +def filter_argname(argname): + global interface_options + if (not interface_options.lite or (argname!="cred")): + if (argname.find('(') != -1): + # The name has documentation in it :-/ + brackright = argname.split('(')[1] + if (brackright.find(')') == -1): + raise Exception("Please fix the argument %s to be well-formed.\n"%argname) + inbrack = brackright.split(')')[0] + argname = inbrack + return argname + def fold_complex_type_names(acc, arg): name = arg.doc if (type(acc)==list): acc.append(name) else: - python_is_braindead = acc.doc - acc = [python_is_braindead,name] + p_i_b = acc.doc + acc = [p_i_b,name] return acc def fold_complex_type(acc, arg): @@ -53,8 +65,8 @@ def fold_complex_type(acc, arg): if (type(acc)==list): acc.append(name) else: - python_is_braindead = name_complex_type(acc) - acc = [python_is_braindead,name] + p_i_b = name_complex_type(acc) + acc = [p_i_b,name] return acc def name_complex_type(arg): @@ -81,6 +93,7 @@ def name_complex_type(arg): choice = complex_type.appendChild(types.createElement("xsd:choice")) for n,t in zip(inner_names,inner_types): element = choice.appendChild(types.createElement("element")) + n = filter_argname(n) element.setAttribute("name", n) element.setAttribute("type", "%s"%t) element.setAttribute("minOccurs","%d"%min_args) @@ -91,15 +104,23 @@ def name_complex_type(arg): inner_type = name_complex_type(arg[0]) num_types=num_types+1 type_name = "Type%d"%num_types - complex_type = types_section.appendChild(types.createElement("xsd:simpleType")) + complex_type = types_section.appendChild(types.createElement("xsd:complexType")) + type_name = filter_argname(type_name) complex_type.setAttribute("name", type_name) - complex_content = complex_type.appendChild(types.createElement("xsd:list")) - complex_content.setAttribute("itemType",inner_type) + complex_content = complex_type.appendChild(types.createElement("xsd:complexContent")) + restriction = complex_content.appendChild(types.createElement("xsd:restriction")) + restriction.setAttribute("base","soapenc:Array") + attribute = restriction.appendChild(types.createElement("xsd:attribute")) + attribute.setAttribute("ref","soapenc:arrayType") + attribute.setAttribute("wsdl:arrayType","%s[]"%inner_type) + return "xsdl:%s"%type_name + elif type(arg) == DictType or arg == DictType or (inspect.isclass(arg) and issubclass(arg, dict)): num_types=num_types+1 type_name = "Type%d"%num_types complex_type = types_section.appendChild(types.createElement("xsd:complexType")) + type_name = filter_argname(type_name) complex_type.setAttribute("name", type_name) complex_content = complex_type.appendChild(types.createElement("xsd:sequence")) @@ -164,18 +185,17 @@ def add_wsdl_ports_and_bindings (wsdl): if (function.accepts): (min_args, max_args, defaults) = function.args() for (argname,argtype) in zip(max_args,function.accepts): - global interface_options - if (not interface_options.lite or (argname!="cred")): - arg_part = in_el.appendChild(wsdl.createElement("part")) - arg_part.setAttribute("name", argname) - arg_part.setAttribute("type", param_type(argtype)) + argname = filter_argname(argname) + arg_part = in_el.appendChild(wsdl.createElement("part")) + arg_part.setAttribute("name", argname) + arg_part.setAttribute("type", param_type(argtype)) # Return type return_type = function.returns out_el = wsdl.firstChild.appendChild(wsdl.createElement("message")) out_el.setAttribute("name", method + "_out") ret_part = out_el.appendChild(wsdl.createElement("part")) - ret_part.setAttribute("name", "returnvalue") + ret_part.setAttribute("name", "Result") ret_part.setAttribute("type", param_type(return_type)) # Port connecting arguments with return type @@ -252,7 +272,7 @@ def get_wsdl_definitions(): xmlns:xsdl="%s/2009/07/schema" xmlns:tns="%s/2009/07/sfa.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:soapenc="http://schemas.xmlsoap.org/wsdl/soap/encoding" + xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> """ % (globals.plc_ns,globals.plc_ns,globals.plc_ns) @@ -270,7 +290,7 @@ def get_wsdl_definitions_and_types(): xmlns:xsdl="%s/2009/07/schema" xmlns:tns="%s/2009/07/sfa.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:soapenc="http://schemas.xmlsoap.org/wsdl/soap/encoding" + xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">