mirror of
https://github.com/correl/openapi-core.git
synced 2024-11-25 11:09:53 +00:00
Small change to Schema model to allow generated specs to be picklable
- overriding __dict__ is death for pickling. I renamed it to __newdict__ and tweaked the one user of it, and now this part of the structure is working fine for pickling - there are also upstream changes in jsonschema that need to be in for the overall success - this allows me to create the API spec from a swagger file once (which takes 2-20s for the files I'm working with), and cache the result as a pickle file for loading on the next startup (assuming the swagger file hasn't been updated). The load from pickle files takes 2-5ms. This is an improvement of load time by 3 orders of magnitude.
This commit is contained in:
parent
1270d5a6b9
commit
7993de894e
2 changed files with 6 additions and 2 deletions
|
@ -67,8 +67,12 @@ class Schema(object):
|
||||||
|
|
||||||
self._source = _source
|
self._source = _source
|
||||||
|
|
||||||
|
# Overriding object.__dict__ is a VERY bad idea as it totally breaks any
|
||||||
|
# possibility of pickling this object. Pickling marshalls via object.__dict__
|
||||||
|
# via default __getstate__ and __setstate__ methods. This is now renamed to
|
||||||
|
# keep the functionality for the validators, but keep pickling operational.
|
||||||
@property
|
@property
|
||||||
def __dict__(self):
|
def __newdict__(self):
|
||||||
return self._source or self.to_dict()
|
return self._source or self.to_dict()
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
|
|
|
@ -86,7 +86,7 @@ class SchemaUnmarshallersFactory(object):
|
||||||
}
|
}
|
||||||
if self.context is not None:
|
if self.context is not None:
|
||||||
kwargs[self.CONTEXT_VALIDATION[self.context]] = True
|
kwargs[self.CONTEXT_VALIDATION[self.context]] = True
|
||||||
return OAS30Validator(schema.__dict__, **kwargs)
|
return OAS30Validator(schema.__newdict__, **kwargs)
|
||||||
|
|
||||||
def _get_format_checker(self):
|
def _get_format_checker(self):
|
||||||
fc = deepcopy(oas30_format_checker)
|
fc = deepcopy(oas30_format_checker)
|
||||||
|
|
Loading…
Reference in a new issue