def load_obj(self, jref, getter=None, parser=None): """ load a object(those in spec._version_.objects) from a JSON reference. """ obj = self.__resolver.resolve(jref, getter) # get root document to check its swagger version. tmp = {'_tmp_': {}} version = utils.get_swagger_version(obj) if version == '1.2': # swagger 1.2 with ResourceListContext(tmp, '_tmp_') as ctx: ctx.parse(obj, jref, self.__resolver, getter) elif version == '2.0': # swagger 2.0 with SwaggerContext(tmp, '_tmp_') as ctx: ctx.parse(obj) elif version == None and parser: with parser(tmp, '_tmp_') as ctx: ctx.parse(obj) version = tmp['_tmp_'].__swagger_version__ if hasattr(tmp['_tmp_'], '__swagger_version__') else version else: raise NotImplementedError('Unsupported Swagger Version: {0} from {1}'.format(version, jref)) if not tmp['_tmp_']: raise Exception('Unable to parse object from {0}'.format(jref)) logger.info('version: {0}'.format(version)) return tmp['_tmp_'], version
def _load_obj(self, url, getter=None, parser=None): """ """ if url in self.__app_cache: logger.info('{0} hit cache'.format(url)) # look into cache first return # apply hook when use this url to load # note that we didn't cache SwaggerApp with this local_url local_url = url if not self.__url_load_hook else self.__url_load_hook( url) logger.info('{0} patch to {1}'.format(url, local_url)) if not getter: getter = UrlGetter p = six.moves.urllib.parse.urlparse(local_url) if p.scheme == 'file' and p.path: getter = LocalGetter(os.path.join(p.netloc, p.path)) if inspect.isclass(getter): # default initialization is passing the url # you can override this behavior by passing an # initialized getter object. getter = getter(local_url) # get root document to check its swagger version. obj, _ = six.advance_iterator(getter) tmp = {'_tmp_': {}} version = utils.get_swagger_version(obj) if version == '1.2': # swagger 1.2 with ResourceListContext(tmp, '_tmp_') as ctx: ctx.parse(getter, obj) elif version == '2.0': # swagger 2.0 with SwaggerContext(tmp, '_tmp_') as ctx: ctx.parse(obj) elif version == None and parser: with parser(tmp, '_tmp_') as ctx: ctx.parse(obj) version = tmp['_tmp_'].__swagger_version__ if hasattr( tmp['_tmp_'], '__swagger_version__') else version else: raise NotImplementedError( 'Unsupported Swagger Version: {0} from {1}'.format( version, url)) logger.info('version: {0}'.format(version)) self.__app_cache[url] = weakref.proxy(self) # avoid circular reference self.__version = version self.__raw = tmp['_tmp_']
def test_get_swagger_version(self): self.assertEqual(utils.get_swagger_version({'swaggerVersion': '1.2'}), '1.2') self.assertEqual(utils.get_swagger_version({'swagger': '2.0'}), '2.0') self.assertEqual(utils.get_swagger_version({'qq': '20.0'}), None)