@@ -32,7 +32,22 @@ def lookup_header_list(self, title_header_list):
32
32
else :
33
33
return self [first_title ].property_name
34
34
else :
35
- return '/' .join (title_header_list )
35
+ # If we can't look up the title, treat it and any children as
36
+ # field names directly.
37
+ # Strip spaces off these.
38
+ return '/' .join (x .strip (' ' ) for x in title_header_list )
39
+
40
+ def __setitem__ (self , key , value ):
41
+ self .data [key .replace (' ' , '' ).lower ()] = value
42
+
43
+ def __getitem__ (self , key ):
44
+ if key is None :
45
+ raise KeyError
46
+ else :
47
+ return self .data [key .replace (' ' , '' ).lower ()]
48
+
49
+ def __contains__ (self , key ):
50
+ return key .replace (' ' , '' ).lower () in self .data
36
51
37
52
38
53
class SchemaParser (object ):
@@ -87,15 +102,16 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
87
102
property_type_set = get_property_type_set (property_schema_dict )
88
103
89
104
title = property_schema_dict .get ('title' )
90
- title_lookup [title ] = TitleLookup ()
91
- title_lookup [title ].property_name = property_name
105
+ if title :
106
+ title_lookup [title ] = TitleLookup ()
107
+ title_lookup [title ].property_name = property_name
92
108
93
109
if 'object' in property_type_set :
94
110
for field , child_title in self .parse_schema_dict (
95
111
parent_name + '/' + property_name ,
96
112
property_schema_dict ,
97
113
parent_id_fields = id_fields ,
98
- title_lookup = title_lookup [ title ] ):
114
+ title_lookup = title_lookup . get ( title ) ):
99
115
yield (
100
116
property_name + '/' + field ,
101
117
# TODO ambiguous use of "title"
@@ -112,7 +128,8 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
112
128
else :
113
129
raise ValueError
114
130
elif 'object' in type_set :
115
- title_lookup [title ].property_name = property_name + '[]'
131
+ if title :
132
+ title_lookup [title ].property_name = property_name + '[]'
116
133
if hasattr (property_schema_dict ['items' ], '__reference__' ):
117
134
sub_sheet_name = property_schema_dict ['items' ].__reference__ ['$ref' ].split ('/' )[- 1 ]
118
135
else :
@@ -129,7 +146,7 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
129
146
fields = self .parse_schema_dict (parent_name + '/' + property_name + '[]' ,
130
147
property_schema_dict ['items' ],
131
148
parent_id_fields = id_fields ,
132
- title_lookup = title_lookup [ title ] )
149
+ title_lookup = title_lookup . get ( title ) )
133
150
134
151
rolledUp = set ()
135
152
0 commit comments