openapi: better handle nested schemas

there is a 2 levels schemas in profile.notifications.

The code previously assumed we could only have one level, and so was not
producing the correct UsersProfileNotifications.

Fix that by being more generic in the way we retrieve the nested
subschemas.
This commit is contained in:
Benjamin Tissoires 2021-04-27 10:44:27 +02:00
parent 8ec1e4f3fa
commit ae30b1220a
2 changed files with 37 additions and 27 deletions

View file

@ -607,6 +607,9 @@ class SchemaProperty(object):
# deal with subschemas
if '.' in name:
subschema = name.split('.')[0]
subschema = subschema.capitalize()
if name.endswith('$'):
# reference in reference
subschema = ''.join([n.capitalize() for n in self.name.split('.')[:-1]])
@ -621,9 +624,12 @@ class SchemaProperty(object):
print(''' {}:
type: object'''.format(subschema))
return current_schema
elif '$' in name:
# In the form of 'profile.notifications.$.activity'
subschema = name[:name.index('$') - 1] # 'profile.notifications'
subschema = ''.join([s.capitalize() for s in subschema.split('.')])
subschema = name.split('.')[0]
schema_name = self.schema.name + subschema.capitalize()
schema_name = self.schema.name + subschema
name = name.split('.')[-1]
if current_schema != schema_name:
@ -755,7 +761,7 @@ class Schemas(object):
# then print the references
current = None
required_properties = []
properties = [f for f in self.fields if '.' in f.name and not f.name.endswith('$')]
properties = [f for f in self.fields if '.' in f.name and not '$' in f.name]
for prop in properties:
current = prop.print_openapi(6, current, required_properties)
@ -766,7 +772,7 @@ class Schemas(object):
required_properties = []
# then print the references in the references
for prop in [f for f in self.fields if '.' in f.name and f.name.endswith('$')]:
for prop in [f for f in self.fields if '.' in f.name and '$' in f.name]:
current = prop.print_openapi(6, current, required_properties)
if required_properties: