def test_path_item(self): """ make sure PathItem is correctly merged """ a = self.app.resolve(utils.jp_compose('/a', '#/paths')) self.assertTrue(isinstance(a, objects.PathItem)) self.assertTrue(a.get.operationId, 'a.get') self.assertTrue(a.put.description, 'c.put') self.assertTrue(a.post.description, 'd.post') b = self.app.resolve(utils.jp_compose('/b', '#/paths')) self.assertTrue(b.get.operationId, 'b.get') self.assertTrue(b.put.description, 'c.put') self.assertTrue(b.post.description, 'd.post')
def s(self, p, b=_shortcut_[sc_path]): """ shortcut of App.resolve. We provide a default base for '#/paths'. ex. to access '#/paths/~1user/get', just call App.s('user/get') :param str p: path relative to base :param tuple b: a tuple (expected_prefix, base) to represent a 'base' """ if b[0]: return self.resolve(utils.jp_compose(b[0] + p if not p.startswith(b[0]) else p, base=b[1])) else: return self.resolve(utils.jp_compose(p, base=b[1]))
def s(self, p, b=_shortcut_[sc_path]): """ shortcut of SwaggerApp.resolve. We provide a default base for '#/paths'. ex. to access '#/paths/~1user/get', just call SwaggerApp.s('user/get') :param str p: path relative to base :param tuple b: a tuple (expected_prefix, base) to represent a 'base' """ if b[0]: return self.resolve(utils.jp_compose(b[0] + p if not p.startswith(b[0]) else p, base=b[1])) else: return self.resolve(utils.jp_compose(p, base=b[1]))
def test_integer_limit(self): """ header in integer """ p2 = self.app.resolve(jp_compose(['#', 'paths', '/t', 'get', 'parameters', '1'])) self.assertTrue(isinstance(p2, objects.Parameter)) self.assertRaises(ValueError, p2._prim_, 101) self.assertRaises(ValueError, p2._prim_, -1)
def test_cascade_resolve(self): """ """ path = self.app.resolve(utils.jp_compose(['#', 'paths', '/pet'])) _check(self, path.resolve('post')) _check(self, path.post)
def test_special_char(self): """ when the path has '{' and '}' """ self.assertEqual( self.app.resolve( utils.jp_compose(['#', 'paths', '/user/{username}'])).get.operationId, 'getUserByName')
def test_integer_limit(self): """ header in integer """ p2 = self.app.resolve(jp_compose(["#", "paths", "/t", "get", "parameters", "1"])) self.assertTrue(isinstance(p2, objects.Parameter)) self.assertRaises(errs.ValidationError, p2._prim_, 101, self.app.prim_factory) self.assertRaises(errs.ValidationError, p2._prim_, -1, self.app.prim_factory)
def test_integer_limit(self): """ header in integer """ p2 = self.app.resolve(jp_compose(['#', 'paths', '/t', 'get', 'parameters', '1'])) self.assertTrue(isinstance(p2, objects.Parameter)) self.assertRaises(errs.ValidationError, p2._prim_, 101, self.app.prim_factory) self.assertRaises(errs.ValidationError, p2._prim_, -1, self.app.prim_factory)
def test_simple_array(self): """ header in array """ p1 = self.app.resolve(jp_compose(['#', 'paths', '/t', 'get', 'parameters', '0'])) self.assertTrue(isinstance(p1, objects.Parameter)) v = p1._prim_([1, 2, 3, 4, 5], self.app.prim_factory) self.assertTrue(isinstance(v, primitives.Array)) self.assertEqual(str(v), '1,2,3,4,5')
def test_simple_array(self): """ header in array """ p1 = self.app.resolve(jp_compose(["#", "paths", "/t", "get", "parameters", "0"])) self.assertTrue(isinstance(p1, objects.Parameter)) v = p1._prim_([1, 2, 3, 4, 5], self.app.prim_factory) self.assertTrue(isinstance(v, primitives.Array)) self.assertEqual(str(v), "1,2,3,4,5")
def test_multi_level_array(self): """ header in array of array """ p3 = self.app.resolve(jp_compose(["#", "paths", "/t", "get", "parameters", "2"])) self.assertTrue(isinstance(p3, objects.Parameter)) self.assertEqual( str(p3._prim_([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10]], [[11, 12], [13, 14]]], self.app.prim_factory)), "1|2,3|4,5|6 7|8,9|10 11|12,13|14", )
def test_multi_level_array(self): """ header in array of array """ p3 = self.app.resolve( jp_compose(['#', 'paths', '/t', 'get', 'parameters', '2'])) self.assertTrue(isinstance(p3, objects.Parameter)) self.assertEqual( str( p3._prim_([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10]], [[11, 12], [13, 14]]], self.app.prim_factory)), '1|2,3|4,5|6 7|8,9|10 11|12,13|14')
def test_json_pointer(self): """ json pointer io function """ self.assertEqual(utils.jp_compose('/test'), '~1test') self.assertEqual(utils.jp_compose('~test'), '~0test') self.assertEqual(utils.jp_compose('/~test'), '~1~0test') self.assertEqual(utils.jp_compose('a', 'b'), 'b/a') self.assertEqual(utils.jp_compose(''), '') self.assertEqual(utils.jp_compose(None, 'base'), 'base') cs = ['~test1', '/test2', 'test3'] c = utils.jp_compose(cs, 'base') self.assertEqual(c, 'base/~0test1/~1test2/test3') self.assertEqual(utils.jp_split(c)[1:], cs) self.assertEqual(utils.jp_split('~1test'), ['/test']) self.assertEqual(utils.jp_split('~0test'), ['~test']) self.assertEqual(utils.jp_split('~1~0test'), ['/~test']) self.assertEqual(utils.jp_split(''), []) self.assertEqual(utils.jp_split(None), []) self.assertEqual(utils.jp_split('/~1~0test/qq/~0test/~1test/'), ['', '/~test', 'qq', '~test', '/test', ''])
def test_multi_level_array(self): """ header in array of array """ p3 = self.app.resolve(jp_compose(['#', 'paths', '/t', 'get', 'parameters', '2'])) self.assertTrue(isinstance(p3, objects.Parameter)) self.assertEqual(str(p3._prim_( [ [ [1,2], [3,4], [5,6] ], [ [7,8], [9,10] ], [ [11,12], [13,14] ] ] )), '1|2,3|4,5|6 7|8,9|10 11|12,13|14')
from pyswagger import SwaggerApp, SwaggerSecurity from pyswagger.contrib.client.requests import Client from pyswagger.utils import jp_compose # load Swagger resource file into SwaggerApp object app = SwaggerApp._create_('http://petstore.swagger.io/v2/swagger.json') auth = SwaggerSecurity(app) auth.update_with('api_key', '12312312312312312313q') # api key auth.update_with('petstore_auth', '12334546556521123fsfss') # oauth2 # init swagger client client = Client(auth) # a dict is enough for representing a Model in Swagger pet_Tom = dict(id=1, name='Tom', photoUrls=['http://test']) # a request to create a new pet client.request(app.op['addPet'](body=pet_Tom)) # - access an Operation object via SwaggerApp.op when operationId is defined # - a request to get the pet back pet = client.request(app.op['getPetById'](petId=1)).data assert pet.id == 1 assert pet.name == 'Tom' # new ways to get Operation object corresponding to 'getPetById'. # 'jp_compose' stands for JSON-Pointer composition pet = client.request( app.resolve(jp_compose('/pet/{petId}', base='#/paths')).get(petId=1)).data assert pet.id == 1
def test_resolve(self): """ """ _check( self, self.app.resolve(utils.jp_compose(['#', 'paths', '/pet', 'post'])))
def test_resolve(self): """ """ _check(self, self.app.resolve(utils.jp_compose(['#', 'paths', '/pet', 'post'])))
def test_special_char(self): """ when the path has '{' and '}' """ self.assertEqual( self.app.resolve(utils.jp_compose(['#', 'paths', '/user/{username}'])).get.operationId, 'getUserByName' )
from pyswagger import SwaggerApp, SwaggerSecurity from pyswagger.contrib.client.requests import Client from pyswagger.utils import jp_compose # load Swagger resource file into SwaggerApp object app = SwaggerApp._create_('http://petstore.swagger.io/v2/swagger.json') auth = SwaggerSecurity(app) auth.update_with('api_key', '12312312312312312313q') # api key auth.update_with('petstore_auth', '12334546556521123fsfss') # oauth2 # init swagger client client = Client(auth) # a dict is enough for representing a Model in Swagger pet_Tom=dict(id=1, name='Tom', photoUrls=['http://test']) # a request to create a new pet client.request(app.op['addPet'](body=pet_Tom)) # - access an Operation object via SwaggerApp.op when operationId is defined # - a request to get the pet back pet = client.request(app.op['getPetById'](petId=1)).data assert pet.id == 1 assert pet.name == 'Tom' # new ways to get Operation object corresponding to 'getPetById'. # 'jp_compose' stands for JSON-Pointer composition pet = client.request(app.resolve(jp_compose('/pet/{petId}', base='#/paths')).get(petId=1)).data assert pet.id == 1