Skip to content

Commit d559a4c

Browse files
authored
Merge pull request #159 from giuseppe/support-net-devices
ocispec: Add string-to-object map support and refactor helper classes
2 parents 75de779 + 9937df4 commit d559a4c

File tree

4 files changed

+76
-53
lines changed

4 files changed

+76
-53
lines changed

src/ocispec/generate.py

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
Interface: rootpaths
5454
History: 2019-06-17
5555
'''
56-
class MyRoot(object):
56+
class MyRoot:
5757
'''
5858
Description: Store schema information
5959
Interface: None
@@ -275,7 +275,7 @@ def get_type_pattern_incur(cur, schema_info, src, curfile):
275275
return typ
276276

277277

278-
class GenerateNodeInfo(object):
278+
class GenerateNodeInfo:
279279
'''
280280
Description: Store schema information
281281
Interface: None
@@ -321,7 +321,7 @@ def gen_all_arr_typnode(node_info, src, typ, refname):
321321
children = merge(resolve_list(schema_info, name, src, cur["items"]['allOf'], curfile))
322322
subtyp = children[0].typ
323323
subtypobj = children
324-
return helpers.Unite(name,
324+
return helpers.SchemaNode(name,
325325
typ,
326326
children,
327327
subtyp=subtyp,
@@ -348,7 +348,7 @@ def gen_any_arr_typnode(node_info, src, typ, refname):
348348
children = anychildren[0].children
349349
subtypobj = children
350350
refname = anychildren[0].subtypname
351-
return helpers.Unite(name,
351+
return helpers.SchemaNode(name,
352352
typ,
353353
children,
354354
subtyp=subtyp,
@@ -375,7 +375,7 @@ def gen_ref_arr_typnode(node_info, src, typ, refname):
375375
refname = make_ref_name(subrefname, curfile)
376376
else:
377377
refname = item_type.subtypname
378-
return helpers.Unite(name,
378+
return helpers.SchemaNode(name,
379379
typ,
380380
None,
381381
subtyp=item_type.typ,
@@ -398,15 +398,15 @@ def gen_type_arr_typnode(node_info, src, typ, refname):
398398
item_type, src = resolve_type(schema_info, name, src, cur["items"], curfile)
399399

400400
if typ == 'array' and typ == item_type.typ and not helpers.valid_basic_map_name(item_type.subtyp):
401-
return helpers.Unite(name,
401+
return helpers.SchemaNode(name,
402402
typ,
403403
None,
404404
subtyp=item_type.subtyp,
405405
subtypobj=item_type.subtypobj,
406406
subtypname=item_type.subtypname,
407407
required=item_type.required, doublearray=True), src
408408
else:
409-
return helpers.Unite(name,
409+
return helpers.SchemaNode(name,
410410
typ,
411411
None,
412412
subtyp=item_type.typ,
@@ -450,7 +450,11 @@ def gen_obj_typnode(node_info, src, typ, refname):
450450
subtypobj = None
451451
required = None
452452

453-
if 'allOf' in cur:
453+
if 'additionalProperties' in cur and isinstance(cur['additionalProperties'], dict):
454+
child, src_child = resolve_type(schema_info, name, src, cur['additionalProperties'], curfile)
455+
child.fixname = "values"
456+
return helpers.SchemaNode(name, 'mapStringObject', [child], None, None, None), src
457+
elif 'allOf' in cur:
454458
children = merge(resolve_list(schema_info, name, src, cur['allOf'], curfile))
455459
elif 'anyOf' in cur:
456460
children = resolve_list(schema_info, name, src, cur['anyOf'], curfile)
@@ -466,7 +470,7 @@ def gen_obj_typnode(node_info, src, typ, refname):
466470
if 'properties' in cur else None
467471
if 'required' in cur:
468472
required = cur['required']
469-
return helpers.Unite(name,\
473+
return helpers.SchemaNode(name,\
470474
typ,\
471475
children,\
472476
subtyp=subtyp,\
@@ -532,7 +536,7 @@ def resolve_type(schema_info, name, src, cur, curfile):
532536
raise RuntimeError("Invalid schema type: %s" % typ)
533537
children = None
534538

535-
return helpers.Unite(name,
539+
return helpers.SchemaNode(name,
536540
typ,
537541
children,
538542
subtyp=subtyp,
@@ -550,9 +554,9 @@ def resolve_list(schema_info, name, schema, objs, curfile):
550554
obj = []
551555
index = 0
552556
for i in objs:
553-
generated_name = helpers.CombinateName( \
557+
generated_name = helpers.HierarchicalName( \
554558
i['$ref'].split("/")[-1]) if '$ref' in i \
555-
else helpers.CombinateName(name.name + str(index))
559+
else helpers.HierarchicalName(name.name + str(index))
556560
node, _ = resolve_type(schema_info, generated_name, schema, i, curfile)
557561
if node:
558562
obj.append(node)
@@ -599,9 +603,9 @@ def handle_type_not_in_schema(schema_info, schema, prefix):
599603
"""
600604
required = None
601605
if 'definitions' in schema:
602-
return helpers.Unite( \
603-
helpers.CombinateName("definitions"), 'definitions', \
604-
parse_properties(schema_info, helpers.CombinateName(""), schema, schema, \
606+
return helpers.SchemaNode( \
607+
helpers.HierarchicalName("definitions"), 'definitions', \
608+
parse_properties(schema_info, helpers.HierarchicalName(""), schema, schema, \
605609
schema_info.name.name), None, None, None, None)
606610
else:
607611
if len(schema) > 1:
@@ -611,14 +615,14 @@ def handle_type_not_in_schema(schema_info, schema, prefix):
611615
for value in schema:
612616
if 'required' in schema[value]:
613617
required = schema[value]['required']
614-
childrens = parse_properties(schema_info, helpers.CombinateName(""), \
618+
childrens = parse_properties(schema_info, helpers.HierarchicalName(""), \
615619
schema[value], schema[value], \
616620
schema_info.name.name)
617-
value_node = helpers.Unite(helpers.CombinateName(prefix), \
621+
value_node = helpers.SchemaNode(helpers.HierarchicalName(prefix), \
618622
'object', childrens, None, None, \
619623
None, required)
620624
value_nodes.append(value_node)
621-
return helpers.Unite(helpers.CombinateName("definitions"), \
625+
return helpers.SchemaNode(helpers.HierarchicalName("definitions"), \
622626
'definitions', value_nodes, None, None, \
623627
None, None)
624628

@@ -636,20 +640,20 @@ def parse_schema(schema_info, schema, prefix):
636640
if 'object' in schema['type']:
637641
if 'required' in schema:
638642
required = schema['required']
639-
return helpers.Unite(
640-
helpers.CombinateName(prefix), 'object',
643+
return helpers.SchemaNode(
644+
helpers.HierarchicalName(prefix), 'object',
641645
parse_properties(schema_info, \
642-
helpers.CombinateName(""), \
646+
helpers.HierarchicalName(""), \
643647
schema, schema, schema_info.name.name), \
644648
None, None, None, required)
645649
elif 'array' in schema['type']:
646-
item_type, _ = resolve_type(schema_info, helpers.CombinateName(""), \
650+
item_type, _ = resolve_type(schema_info, helpers.HierarchicalName(""), \
647651
schema['items'], schema['items'], schema_info.name.name)
648652
if item_type.typ == 'array' and not helpers.valid_basic_map_name(item_type.subtyp):
649653
item_type.doublearray = True
650654
return item_type
651655
else:
652-
return helpers.Unite(helpers.CombinateName(prefix), 'array', None, item_type.typ, \
656+
return helpers.SchemaNode(helpers.HierarchicalName(prefix), 'array', None, item_type.typ, \
653657
item_type.children, None, item_type.required)
654658

655659
else:
@@ -673,8 +677,8 @@ def expand(tree, structs, visited):
673677
expand(i, structs, visited=visited)
674678

675679
if tree.typ == 'array' and helpers.valid_basic_map_name(tree.subtyp):
676-
name = helpers.CombinateName(tree.name + "_element")
677-
node = helpers.Unite(name, tree.subtyp, None)
680+
name = helpers.HierarchicalName(tree.name + "_element")
681+
node = helpers.SchemaNode(name, tree.subtyp, None)
678682
expand(node, structs, visited)
679683

680684
id_ = "%s:%s" % (tree.name, tree.typ)

src/ocispec/headers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def append_header_arr(obj, header, prefix):
4545
if i.subtypobj is not None:
4646
c_typ = helpers.get_name_substr(i.name, prefix)
4747

48-
if not helpers.judge_complex(i.subtyp):
48+
if not helpers.is_compound_type(i.subtyp):
4949
header.append(f" {c_typ}{' ' if '*' not in c_typ else ''}*{i.fixname};\n")
5050
else:
5151
header.append(f" {c_typ} **{i.fixname};\n")
@@ -75,7 +75,7 @@ def append_header_map_str_obj(obj, header, prefix):
7575
if helpers.valid_basic_map_name(child.typ):
7676
c_typ = helpers.get_prefixed_pointer("", child.typ, "")
7777
elif child.subtypname:
78-
c_typ = child.subtypname
78+
c_typ = child.subtypname + " *"
7979
else:
8080
c_typ = helpers.get_prefixed_pointer(child.name, child.typ, prefix)
8181
header.append(f" {c_typ}{' ' if '*' not in c_typ else ''}*{child.fixname};\n")
@@ -105,7 +105,7 @@ def append_header_child_arr(child, header, prefix):
105105

106106
if helpers.valid_basic_map_name(child.subtyp):
107107
header.append(f" {helpers.make_basic_map_name(child.subtyp)} **{child.fixname};\n")
108-
elif not helpers.judge_complex(child.subtyp):
108+
elif not helpers.is_compound_type(child.subtyp):
109109
header.append(f" {c_typ}{' ' if '*' not in c_typ else ''}*{dflag}{child.fixname};\n")
110110
else:
111111
header.append(f" {c_typ}{' ' if '*' not in c_typ else ''}**{dflag}{child.fixname};\n")
@@ -138,7 +138,7 @@ def append_type_c_header(obj, header, prefix):
138138
Interface: None
139139
History: 2019-06-17
140140
'''
141-
if not helpers.judge_complex(obj.typ):
141+
if not helpers.is_compound_type(obj.typ):
142142
return
143143

144144
if obj.typ == 'array':

src/ocispec/helpers.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,13 @@ def get_prefixed_pointer(name, typ, prefix):
178178
Interface: None
179179
History: 2019-06-17
180180
'''
181-
if typ != 'object' and typ != 'mapStringObject' and \
181+
if typ != 'array' and typ != 'object' and typ != 'mapStringObject' and \
182182
not valid_basic_map_name(typ):
183183
return ""
184184
return '%s *' % make_basic_map_name(typ) if valid_basic_map_name(typ) \
185185
else "%s *" % get_prefixed_name(name, prefix)
186186

187-
def judge_complex(typ):
187+
def is_compound_type(typ):
188188
'''
189189
Description: Check compound object
190190
Interface: None
@@ -235,9 +235,9 @@ def obtain_pointer(name, typ, prefix):
235235
return "char *" if typ == "string" else \
236236
("%s *" % typ if typ == "ArrayOfStrings" else "")
237237

238-
class CombinateName(object):
238+
class HierarchicalName:
239239
'''
240-
Description: Store CombinateName information
240+
Description: Store HierarchicalName information
241241
Interface: None
242242
History: 2019-06-17
243243
'''
@@ -256,12 +256,12 @@ def append(self, leaf):
256256
History: 2019-06-17
257257
'''
258258
prefix_name = self.name + '_' if self.name != "" else ""
259-
return CombinateName(prefix_name + leaf, leaf)
259+
return HierarchicalName(prefix_name + leaf, leaf)
260260

261261

262-
class Unite(object):
262+
class SchemaNode:
263263
'''
264-
Description: Store Unite information
264+
Description: Store SchemaNode information
265265
Interface: None
266266
History: 2019-06-17
267267
'''
@@ -287,7 +287,7 @@ def __repr__(self):
287287
return "name:(%s) type:(%s)" % (self.name, self.typ)
288288

289289

290-
class FilePath(object):
290+
class FilePath:
291291
'''
292292
Description: Store filepath information
293293
Interface: None
@@ -303,7 +303,7 @@ def __repr__(self):
303303
% (self.name, self.dirname, self.basename)
304304

305305

306-
class SchemaInfo(object):
306+
class SchemaInfo:
307307
'''
308308
Description: Store schema information
309309
Interface: None

0 commit comments

Comments
 (0)