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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
|
"""Interface model.
Interface model is represented by Interface class.
Parser must provide an instance of this model as a result of parsing
interface definition file.
Generator must take an instance of this model as input for generating
output files.
"""
# In this module there are classes that are used as data container
# pylint: disable=R0903
import collections
class Boolean(object):
"""Boolean type.
default_value -- default value
"""
def __init__(self, default_value=None):
self.default_value = default_value
class Integer(object):
"""Integer type.
Instance variables:
min_value -- minimum allowed value
max_value -- maximum allowed value
default_value -- default value
"""
def __init__(self, min_value=None, max_value=None, default_value=None):
self.min_value = min_value
self.max_value = max_value
self.default_value = default_value
class Double(object):
"""Floating-point type.
Instance variables:
min_value -- minimum allowed value
max_value -- maximum allowed value
default_value -- default value
"""
def __init__(self, min_value=None, max_value=None, default_value=None):
self.min_value = min_value
self.max_value = max_value
self.default_value = default_value
class String(object):
"""String type.
Instance variables:
min_length -- minimum string length
max_length -- maximum string length
default_value -- default value
"""
def __init__(self, min_length=None, max_length=None, default_value=None):
self.min_length = min_length
self.max_length = max_length
self.default_value = default_value
class Array(object):
"""Array type.
Instance variables:
min_size -- minimum array size
max_size -- maximum array size
element_type -- type of array element
"""
def __init__(self, min_size=None, max_size=None, element_type=None):
self.min_size = min_size
self.max_size = max_size
self.element_type = element_type
class Issue(object):
"""Issue.
Instance variables:
creator -- issue creator
value -- issue text
"""
def __init__(self, creator=None, value=None):
self.creator = creator
self.value = value
class InterfaceItemBase(object):
"""Base class for interface item.
Instance variables:
name -- item name
description -- list of string description elements
design_description -- list of string design description elements
issues -- list of issues
todos -- list of string todo elements
platform -- optional platform (string or None)
default_value -- default value
scope -- optional scope: internal, partner or none (none by defaul, means public)
"""
def __init__(self, name, description=None, design_description=None,
issues=None, todos=None, platform=None, default_value=None, scope=None,
since=None, until=None, deprecated=None, removed=None, history=None):
self.name = name
self.description = description if description is not None else []
self.design_description = \
design_description if design_description is not None else []
self.issues = issues if issues is not None else []
self.todos = todos if todos is not None else []
self.platform = platform
self.default_value = default_value
self.scope = scope
self.since = since
self.until = until
self.deprecated = deprecated
self.removed = removed
self.history = history
class EnumElement(InterfaceItemBase):
"""Element of enumeration.
Instance variables:
internal_name -- internal name of an element must be used by a
generator if it is provided (not None)
value -- optional element value
"""
def __init__(self, name, description=None, design_description=None,
issues=None, todos=None, platform=None, internal_name=None,
value=None, since=None, until=None, deprecated=None, removed=None, history=None):
super(EnumElement, self).__init__(
name, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, history=history)
self.internal_name = internal_name
self.value = value
self.since = since
self.until = until
self.deprecated = deprecated
self.removed = removed
@property
def primary_name(self):
"""Primary name of the EnumElement.
Return the 'internal_name' property if presented or 'name' property
otherwise.
"""
return self.name if self.internal_name is None else self.internal_name
class Enum(InterfaceItemBase):
"""Enumeration.
Instance variables:
internal_scope -- optional internal scope
elements -- enumeration elements
"""
def __init__(self, name, description=None, design_description=None,
issues=None, todos=None, platform=None, internal_scope=None,
elements=None, scope=None, since=None, until=None, deprecated=None, removed=None, history=None):
super(Enum, self).__init__(
name, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, scope=scope, history=history)
self.internal_scope = internal_scope
self.elements = \
elements if elements is not None else collections.OrderedDict()
self.since = since
self.until = until
self.deprecated = deprecated
self.removed = removed
class EnumSubset(InterfaceItemBase):
"""Enumeration subset.
Instance variables:
enum -- enumeration
allowed_elements -- dictionary of elements of enumeration
which are allowed in this subset
"""
def __init__(self, name, enum, description=None, design_description=None,
issues=None, todos=None, platform=None,
allowed_elements=None, since=None, until=None, deprecated=None, removed=None, history=None):
super(EnumSubset, self).__init__(
name, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, history=history)
self.enum = enum
self.allowed_elements = \
allowed_elements if allowed_elements is not None else {}
self.since = since
self.until = until
self.deprecated = deprecated
self.removed = removed
class Param(InterfaceItemBase):
"""Parameter.
Instance variables:
is_mandatory -- boolean value indicating whether
this parameter is mandatory
param_type -- parameter type
default_value -- default value
"""
def __init__(self, name, param_type, description=None,
design_description=None, issues=None, todos=None,
platform=None, is_mandatory=True, default_value=None, scope=None,
since=None, until=None, deprecated=None, removed=None, history=None):
super(Param, self).__init__(
name, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, default_value=default_value, scope=scope, history=history)
self.is_mandatory = is_mandatory
self.param_type = param_type
self.default_value = default_value
self.since = since
self.until = until
self.deprecated = deprecated
self.removed=removed
class FunctionParam(Param):
"""Function parameter.
Instance variables:
default_value -- optional default value of this parameter
"""
def __init__(self, name, param_type, description=None,
design_description=None, issues=None, todos=None,
platform=None, is_mandatory=True, default_value=None, scope=None,
since=None, until=None, deprecated=None, removed=None, history=None):
super(FunctionParam, self).__init__(
name, param_type=param_type, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, is_mandatory=is_mandatory, default_value=default_value,
scope=scope, since=since, until=until, deprecated=deprecated, removed=removed, history=history)
self.default_value = default_value
class Struct(InterfaceItemBase):
"""Structure.
Instance variables:
members -- dictionary of structure members (instances of Param class)
"""
def __init__(self, name, description=None, design_description=None,
issues=None, todos=None, platform=None, members=None, scope=None,
since=None, until=None, deprecated=None, removed=None, history=None):
super(Struct, self).__init__(
name, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, scope=scope, since=since, until=until,
deprecated=deprecated, removed=removed, history=history)
self.members = \
members if members is not None else collections.OrderedDict()
class Function(InterfaceItemBase):
"""Function.
Instance variables:
function_id -- function identifier (EnumElement from Enum "FunctionID")
message_type -- message type (EnumElement from Enum "messageType")
params -- function parameters
"""
def __init__(self, name, function_id, message_type, description=None,
design_description=None, issues=None, todos=None,
platform=None, params=None, scope=None, since=None, until=None, deprecated=None, removed=None, history=None):
super(Function, self).__init__(
name, description=description,
design_description=design_description, issues=issues, todos=todos,
platform=platform, scope=scope, since=since, until=until, deprecated=deprecated, removed=removed, history=history)
self.function_id = function_id
self.message_type = message_type
self.params = \
params if params is not None else collections.OrderedDict()
class Interface(object):
"""Interface.
Instance variables:
enums -- dictionary of enumerations
structs -- dictionary of structures
functions -- dictionary of functions
params -- dictionary of interface parameters (name, version, etc.)
"""
def __init__(self, enums=None, structs=None, functions=None, params=None):
self.enums = enums if enums is not None else collections.OrderedDict()
self.structs = \
structs if structs is not None else collections.OrderedDict()
self.functions = \
functions if functions is not None else collections.OrderedDict()
self.params = params if params is not None else {}
|