blob: e63bcc38aa8838f9a7d6ea0a9b18abaf5772d05c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
"""JSON RPC parser.
Contains parser for JSON RPC XML format.
"""
from parsers.parse_error import ParseError
from parsers.rpc_base import RPCBase
class Parser(RPCBase):
"""JSON RPC parser."""
@property
def get_version(self):
return '1.0.0'
def __init__(self):
"""Constructor."""
super(Parser, self).__init__()
self._interface_name = None
def _parse_root(self, root):
"""Parse root XML element.
This implementation parses root as interfaces element with multiple
interfaces in it.
Keyword arguments:
root -- root element.
"""
self._params = root.attrib
self._interface_name = None
for element in root:
if element.tag != "interface":
raise ParseError("Subelement '" + element.tag +
"' is unexpected in interfaces")
if "name" not in element.attrib:
raise ParseError(
"Name is not specified for interface")
self._interface_name = element.attrib["name"]
self._parse_interface(element, self._interface_name + "_")
def _check_enum_name(self, enum):
"""Check enum name.
This method is called to check whether the newly parsed enum's name
conflicts with some predefined enum.
As SDLRPCV2 has no predefined enums this implementation does nothing.
"""
pass
def _provide_enum_element_for_function(self, enum_name, element_name):
"""Provide enum element for functions.
This implementation replaces the underscore separating interface and
function name with dot and sets it as name of enum element leaving
the name with underscore as internal_name. For enums other than
FunctionID the base implementation is called.
Returns EnumElement.
"""
name = element_name
internal_name = None
if "FunctionID" == enum_name:
prefix_length = len(self._interface_name) + 1
if element_name[:prefix_length] != self._interface_name + '_':
raise ParseError(
"Unexpected prefix for function id '" +
element_name + "'")
name = self._interface_name + "." + element_name[prefix_length:]
internal_name = element_name
element = super(Parser, self)._provide_enum_element_for_function(
enum_name,
name)
if internal_name is not None:
element.internal_name = internal_name
return element
def _check_function_param_name(self, function_param_name):
"""Check function param name.
This method is called to check whether the newly parsed function
parameter name conflicts with some predefined name.
"""
if function_param_name in ['method', 'code']:
raise ParseError(
"'" + function_param_name +
"' is a predefined name and can't be used" +
" as a function parameter name")
|