def test_scope_dict(self): """ ScopeDict """ obj = { 'a!b': 1, 'c!d!ee': 2, 'e!f!g': 3, 'a!f!g': 4, } d = utils.ScopeDict(obj) d.sep = '!' self.assertEqual(d['a!b'], 1) self.assertEqual(d['b'], 1) self.assertEqual(d['ee'], 2) self.assertEqual(d['a', 'b'], 1) self.assertEqual(d['c', 'd', 'ee'], 2) self.assertEqual(d['d', 'ee'], 2) self.assertRaises(ValueError, d.__getitem__, ('f', 'g')) self.assertRaises(TypeError, lambda x: d.sep) obj = { 'tag1!##!get': 1, 'tag2!##!something-get': 2, } d = utils.ScopeDict(obj) d.sep = '!##!' self.assertEqual(d['tag1', 'get'], 1) self.assertEqual(d['tag2', 'something-get'], 2) self.assertEqual(d['get'], 1) self.assertEqual(d['something-get'], 2)
def prepare(self, strict=True): """ preparation for loaded json :param bool strict: when in strict mode, exception would be raised if not valid. """ self._prepare_obj(strict=strict) # reducer for Operation s = Scanner(self) tr = TypeReduce(self.__sep) cy = CycleDetector() s.scan(root=self.__root, route=[tr, cy]) # 'op' -- shortcut for Operation with tag and operaionId self.__op = utils.ScopeDict(tr.op) # 'm' -- shortcut for model in Swagger 1.2 if hasattr(self.__root, 'definitions') and self.__root.definitions != None: self.__m = utils.ScopeDict(self.__root.definitions) else: self.__m = utils.ScopeDict({}) # update scope-separater self.__m.sep = self.__sep self.__op.sep = self.__sep # cycle detection if len(cy.cycles['schema']) > 0 and strict: raise errs.CycleDetectionError('Cycles detected in Schema Object: {0}'.format(cy.cycles['schema']))
def prepare(self, strict=True): """ preparation for loaded json :param bool strict: when in strict mode, exception would be raised if not valid. """ self.validate(strict=strict) self.__root = self.prepare_obj(self.raw, self.__url) if hasattr(self.__root, 'schemes') and self.__root.schemes: if len(self.__root.schemes) > 0: self.__schemes = self.__root.schemes else: # extract schemes from the url to load spec self.__schemes = [six.moves.urlparse(self.__url).schemes] s = Scanner(self) s.scan(root=self.__root, route=[Merge()]) s.scan(root=self.__root, route=[PatchObject()]) s.scan(root=self.__root, route=[Aggregate()]) # reducer for Operation tr = TypeReduce(self.__sep) cy = CycleDetector() s.scan(root=self.__root, route=[tr, cy]) # 'op' -- shortcut for Operation with tag and operaionId self.__op = utils.ScopeDict(tr.op) # 'm' -- shortcut for model in Swagger 1.2 if hasattr(self.__root, 'definitions') and self.__root.definitions != None: self.__m = utils.ScopeDict(self.__root.definitions) else: self.__m = utils.ScopeDict({}) # update scope-separater self.__m.sep = self.__sep self.__op.sep = self.__sep # cycle detection if len(cy.cycles['schema']) > 0 and strict: raise errs.CycleDetectionError( 'Cycles detected in Schema Object: {0}'.format( cy.cycles['schema']))