コード例 #1
0
    def test_can_register_url_route(self):
        def view():
            return "test view", 200

        app = Flask(__name__)
        service = AcceptableService('vendor', app)
        api = service.api('/foo')
        api.register_view('1.0', None, view)

        client = app.test_client()
        resp = client.get('/foo')

        self.assertThat(resp, IsResponse('test view'))
コード例 #2
0
    def test_can_register_url_route_with_two_phase_registration(self):
        def view():
            return "test view", 200

        service = AcceptableService('vendor')
        api = service.api('/foo')
        api.register_view('1.0', None, view)

        app = Flask(__name__)
        service.initialise(app)

        client = app.test_client()
        resp = client.get('/foo')

        self.assertThat(resp, IsResponse('test view'))
コード例 #3
0
    def test_rebinding_to_existing_application_is_a_noop(self):
        def view():
            return "test view", 200

        service = AcceptableService('vendor')
        api = service.api('/foo')
        api.register_view('1.0', None, view)

        app1 = Flask(__name__)
        service.initialise(app1)
        service.initialise(app1)

        client = app1.test_client()
        resp = client.get('/foo')

        self.assertThat(resp, IsResponse('test view'))
コード例 #4
0
    def _setUp(self):
        self.flask_app = Flask(__name__)
        self.service = AcceptableService('vendor', self.flask_app)

        # The /foo API is POST only, and contains three different versioned
        # endpoints:
        foo_api = self.service.api('/foo', methods=['POST'])
        foo_api.register_view('1.0', None, self.foo_v10)
        foo_api.register_view('1.1', None, self.foo_v11)
        foo_api.register_view('1.3', None, self.foo_v13)
        foo_api.register_view('1.5', None, self.foo_v15)

        # The /flagged API is GET only, and has some API flags set:
        flagged_api = self.service.api('/flagged', methods=['GET'])
        flagged_api.register_view('1.3', None, self.flagged_v13)
        flagged_api.register_view('1.4', 'feature1', self.flagged_v14_feature1)
        flagged_api.register_view('1.4', 'feature2', self.flagged_v14_feature2)
コード例 #5
0
class SimpleAPIServiceFixture(Fixture):
    """A reusable fixture that sets up several API endpoints.

    This fixture creates a simple set of API endpoints with a mix of different
    version and API flag requirements. Tests can use this fixture instead of
    having to do all this setup in every test.
    """

    def _setUp(self):
        self.flask_app = Flask(__name__)
        self.service = AcceptableService('vendor', self.flask_app)

        # The /foo API is POST only, and contains three different versioned
        # endpoints:
        foo_api = self.service.api('/foo', methods=['POST'])
        foo_api.register_view('1.0', None, self.foo_v10)
        foo_api.register_view('1.1', None, self.foo_v11)
        foo_api.register_view('1.3', None, self.foo_v13)
        foo_api.register_view('1.5', None, self.foo_v15)

        # The /flagged API is GET only, and has some API flags set:
        flagged_api = self.service.api('/flagged', methods=['GET'])
        flagged_api.register_view('1.3', None, self.flagged_v13)
        flagged_api.register_view('1.4', 'feature1', self.flagged_v14_feature1)
        flagged_api.register_view('1.4', 'feature2', self.flagged_v14_feature2)

    def foo_v10(self):
        return "Foo version 1.0", 200

    def foo_v11(self):
        return "Foo version 1.1", 200

    def foo_v13(self):
        return "Foo version 1.3", 200

    def foo_v15(self):
        return "Foo version 1.5", 200

    def flagged_v13(self):
        return "Flagged version 1.3", 200

    def flagged_v14_feature1(self):
        return "Flagged version 1.4 with feature1", 200

    def flagged_v14_feature2(self):
        return "Flagged version 1.4 with feature2", 200
コード例 #6
0
    def test_can_rebind_api_to_second_flask_application(self):
        def view():
            return "test view", 200

        service = AcceptableService('vendor')
        api = service.api('/foo')
        api.register_view('1.0', None, view)

        app1 = Flask(__name__)
        app2 = Flask(__name__)
        service.initialise(app1)

        client = app1.test_client()
        resp = client.get('/foo')

        self.assertThat(resp, IsResponse('test view'))

        service.initialise(app2)
        client = app2.test_client()
        resp = client.get('/foo')

        self.assertThat(resp, IsResponse('test view'))
コード例 #7
0
from acceptable import AcceptableService

service = AcceptableService('mysvc')

foo_api = service.api('/foo', 'foo', introduced_at=2)

foo_api.request_schema = {
    "type": "object",
    "required": ['foo', 'baz'],
    "properties": {
        "foo": {
            "type": "string",
        },
        "baz": {
            "type": "object",
            "doc": "Bar the door.",
            "introduced_at": 4,
            "properties": {
                "bar": {
                    "type": "string",
                    "introduced_at": 5,
                    "doc": "asdf"
                }
            },
        },
    }
}

foo_api.response_schema = {
    "type": "object",
    "properties": {
コード例 #8
0
from django import forms
from django.conf.urls import url, include

from django.utils.translation import ugettext_lazy as _

from acceptable import AcceptableService

service = AcceptableService('django_app')


class TestForm(forms.Form):
    foo = forms.EmailField(
        required=True,
        label=_('foo'),
        help_text=_('foo help'),
    )

    bar = forms.ChoiceField(
        required=False,
        label=_('bar'),
        help_text=_('bar help'),
        choices=[
            ('A', 'AAA'),
            ('B', 'BBB'),
            ('C', 'CCC'),
        ],
    )

    baz = forms.DecimalField(
        required=False,
        label=_('baz'),