11"""OpenAPI core schemas module"""
22import logging
3- from distutils .util import strtobool
43from collections import defaultdict
4+ from distutils .util import strtobool
5+ from functools import lru_cache
56
67from json import loads
78from six import iteritems
@@ -114,7 +115,7 @@ def create(self, schema_spec):
114115
115116 properties = None
116117 if properties_spec :
117- properties = self ._generate_properties (properties_spec )
118+ properties = self .properties_generator . generate (properties_spec )
118119
119120 items = None
120121 if items_spec :
@@ -125,8 +126,10 @@ def create(self, schema_spec):
125126 required = required ,
126127 )
127128
128- def _generate_properties (self , properties_spec ):
129- return PropertiesGenerator (self .dereferencer ).generate (properties_spec )
129+ @property
130+ @lru_cache ()
131+ def properties_generator (self ):
132+ return PropertiesGenerator (self .dereferencer )
130133
131134 def _create_items (self , items_spec ):
132135 return self .create (items_spec )
@@ -147,24 +150,16 @@ def get_or_create(self, schema_spec):
147150
148151 return self .create (schema_deref ), True
149152
150- def _create_items (self , items_spec ):
151- schema , _ = self .get_or_create (items_spec )
152- return schema
153-
154153
155154class SchemasGenerator (object ):
156155
157- def __init__ (self , dereferencer ):
156+ def __init__ (self , dereferencer , schemas_registry ):
158157 self .dereferencer = dereferencer
158+ self .schemas_registry = schemas_registry
159159
160160 def generate (self , schemas_spec ):
161161 schemas_deref = self .dereferencer .dereference (schemas_spec )
162162
163163 for schema_name , schema_spec in iteritems (schemas_deref ):
164- schema = self ._create_schema (schema_spec )
164+ schema , _ = self .schemas_registry . get_or_create (schema_spec )
165165 yield schema_name , schema
166-
167- def _create_schema (self , schema_spec ):
168- schema , _ = SchemaRegistry (self .dereferencer ).get_or_create (
169- schema_spec )
170- return schema
0 commit comments