def setUp(self): self.cosmos1 = Cosmos() with self.cosmos1: self.mathy = mathy = API("mathy") @mathy.action(accepts=Array(Integer), returns=Integer) def add(numbers): return sum(numbers) @mathy.action(accepts=Struct([ required(u'numerator', Integer), required(u'denominator', Integer), ]), returns=Integer) def divide(numerator, denominator): return numerator / denominator self.add = add self.cosmos2 = Cosmos() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: API.to_json(mathy) mock_get.return_value.status_code = 200 self.remote_mathy = API.load('http://example.com/spec.json') self.remote_mathy.client_hook = WerkzeugTestClientHook(mathy.get_flask_app().test_client())
def setUp(self): self.cosmos1 = Cosmos() with self.cosmos1: self.places = places = API('places') @places.model class City(BaseModel): properties = [ optional(u"name", String) ] @places.model class Address(BaseModel): properties = [ required(u"number", Integer), required(u"street", String), ] links = [ required(u"city", City) ] self.cosmos2 = Cosmos() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: API.to_json(places) mock_get.return_value.status_code = 200 self.remote_places = API.load('http://example.com/spec.json') self.remote_places.client_hook = WerkzeugTestClientHook(places.get_flask_app().test_client())
def setUp(self): self.maxDiff = None self.cosmos1 = cosmos.clone() self.cosmos2 = Cosmos() with self.cosmos1: self.planetarium = planetarium self.c = self.planetarium.get_flask_app().test_client() app = self.planetarium.get_flask_app() app.debug = True self.d = app.test_client() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: json_spec mock_get.return_value.status_code = 200 self.remote_planetarium = API.load('http://example.com/spec.json') class Retry(Exception): pass class Hook(SaveStackClientHookMixin, WerkzeugTestClientHook): token = None def build_request(self, endpoint, *args, **kwargs): request = super(Hook, self).build_request(endpoint, *args, **kwargs) if self.token is not None: request.headers["X-Danish"] = self.token return request def parse_response(self, endpoint, res): if res.status_code == 401: raise Retry() return super(Hook, self).parse_response(endpoint, res) def call(self, endpoint, *args, **kwargs): while True: try: return super(Hook, self).call(endpoint, *args, **kwargs) except Retry: # Find token, e.g. through OAuth self.token = "poppyseed" continue # Use the local API's HTTP client to simulate the remote API's calls self.remote_planetarium.client_hook = Hook(self.d)
def setUp(self): self.cosmos = Cosmos() with self.cosmos: self.places = places = API('places') @places.model class City(BaseModel): properties = [ optional(u"name", String) ] @classmethod def validate(cls, datum): if datum[u"name"][0].islower(): raise ValidationError("Name must be capitalized", datum["name"]) def save(self): if self.id is None: # Create new id self.id = str(len(cities)) cities[self.id] = self self.cosmos2 = Cosmos() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: API.to_json(places) mock_get.return_value.status_code = 200 self.remote_places = API.load('http://example.com/spec.json') self.remote_places.client_hook = WerkzeugTestClientHook(places.get_flask_app().test_client()) cities = { "0": City(name="Toronto", id="0"), "1": City(name="San Francisco", id="1"), }
#!/usr/bin/python from cosmic.api import API client = API.load("http://127.0.0.1:5000/spec.json") print client.actions.query("tyop")