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'))
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'))
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'))
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)
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
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'))
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": {
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'),