mirror of
https://github.com/correl/openapi-core.git
synced 2024-12-01 11:09:57 +00:00
32 lines
895 B
Python
32 lines
895 B
Python
"""OpenAPI core schemas registries module"""
|
|
import logging
|
|
|
|
from lazy_object_proxy import Proxy
|
|
|
|
from openapi_core.schema.schemas.factories import SchemaFactory
|
|
from openapi_core.schema.schemas.util import dicthash
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class SchemaRegistry(SchemaFactory):
|
|
|
|
def __init__(self, dereferencer):
|
|
super(SchemaRegistry, self).__init__(dereferencer)
|
|
self._schemas = {}
|
|
|
|
def get_or_create(self, schema_spec):
|
|
schema_hash = dicthash(schema_spec)
|
|
schema_deref = self.dereferencer.dereference(schema_spec)
|
|
|
|
if schema_hash in self._schemas:
|
|
return self._schemas[schema_hash], False
|
|
|
|
if '$ref' in schema_spec:
|
|
schema = Proxy(lambda: self.create(schema_deref))
|
|
else:
|
|
schema = self.create(schema_deref)
|
|
|
|
self._schemas[schema_hash] = schema
|
|
|
|
return schema, True
|