Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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"),
        }
Exemplo n.º 5
0
#!/usr/bin/python
from cosmic.api import API

client = API.load("http://127.0.0.1:5000/spec.json")
print client.actions.query("tyop")