def test_page_defaults_with_page_schema(): graph = create_object_graph(name="example", testing=True) with graph.flask.test_request_context(): page = Page.from_query_string(PageSchema().load({}).data) assert_that(page.to_dict(), is_(equal_to({"offset": 0, "limit": 20})))
def test_page_from_query_string(): graph = create_object_graph(name="example", testing=True) with graph.flask.test_request_context(): qs = load_query_string_data(PageSchema()) page = Page.from_query_string(qs) assert_that(page.offset, is_(equal_to(0))) assert_that(page.limit, is_(equal_to(20)))
def configure_search_feed_by_user_routes(graph): """ Endpoint for list of tweets posted by users the given user is following. """ controller = graph.user_controller mappings = { Operation.SearchFor: EndpointDefinition( func=controller.search_feed_by_user, request_schema=PageSchema(), response_schema=TweetSchema(), ), } configure_relation(graph, controller.feed_ns, mappings)
def configure_search_followers_by_user_routes(graph): """ Endpoint for list of users following the given user aka followers. """ controller = graph.user_controller mappings = { Operation.SearchFor: EndpointDefinition( func=controller.search_followers_by_user, request_schema=PageSchema(), response_schema=UserSchema(), ), } configure_relation(graph, controller.followers_ns, mappings)
def configure_discover(self, ns, definition): """ Register a discovery endpoint for a set of operations. """ page_schema = PageSchema() @self.graph.route("/", Operation.Discover, ns) def discover(): # accept pagination limit from request page = Page.from_query_string(load_query_string_data(page_schema)) page.offset = 0 response_data = dict(_links=Links({ "self": Link.for_(Operation.Discover, ns, qs=page.to_tuples()), "search": [ link for link in iter_links( self.find_matching_endpoints(ns), page) ], }).to_dict()) return make_response(response_data)
PersonLookupSchema, PersonSchema, ADDRESS_ID_1, PERSON_ID_1, PERSON_ID_2, PERSON_ID_3, ) PERSON_MAPPINGS = { Operation.Create: (person_create, NewPersonSchema(), PersonSchema()), Operation.Delete: (person_delete,), Operation.UpdateBatch: (person_update_batch, NewPersonBatchSchema(), PersonBatchSchema()), Operation.Replace: (person_replace, NewPersonSchema(), PersonSchema()), Operation.Retrieve: (person_retrieve, PersonLookupSchema(), PersonSchema()), Operation.Search: (person_search, PageSchema(), PersonSchema()), Operation.Update: (person_update, NewPersonSchema(), PersonSchema()), } ADDRESS_MAPPINGS = { Operation.Retrieve: (address_retrieve, AddressSchema()), Operation.Search: (address_search, PageSchema(), AddressSchema()), } class TestCrud(object): def setup(self): self.graph = create_object_graph(name="example", testing=True) person_ns = Namespace(subject=Person)