def test_it_returns_annotations_for_ids_in_the_same_order(self, db_session, factories): ann_1 = factories.Annotation(userid='luke') ann_2 = factories.Annotation(userid='luke') assert [ann_2, ann_1] == storage.fetch_ordered_annotations(db_session, [ann_2.id, ann_1.id]) assert [ann_1, ann_2] == storage.fetch_ordered_annotations(db_session, [ann_1.id, ann_2.id])
def fetch_annotations(session, ids): def load_documents(query): return query.options(subqueryload(Annotation.document)) annotations = storage.fetch_ordered_annotations( session, ids, query_processor=load_documents ) return annotations
def test_it_allows_to_change_the_query(self, db_session, factories): ann_1 = factories.Annotation(userid="luke") ann_2 = factories.Annotation(userid="maria") def only_maria(query): return query.filter(Annotation.userid == "maria") assert [ann_2] == storage.fetch_ordered_annotations( db_session, [ann_2.id, ann_1.id], query_processor=only_maria )
def test_it_allows_to_change_the_query(self, db_session, factories): ann_1 = factories.Annotation(userid='luke') ann_2 = factories.Annotation(userid='maria') def only_maria(query): return query.filter(Annotation.userid == 'maria') assert [ann_2] == storage.fetch_ordered_annotations(db_session, [ann_2.id, ann_1.id], query_processor=only_maria)
def _present_annotations(request, ids): """Load annotations by id from the database and present them.""" def eager_load_documents(query): return query.options( subqueryload(models.Annotation.document)) annotations = storage.fetch_ordered_annotations(request.db, ids, query_processor=eager_load_documents) group_service = request.find_service(IGroupService) links_service = request.find_service(name='links') return [AnnotationJSONPresenter( AnnotationResource(ann, group_service, links_service)).asdict() for ann in annotations]
def present_all(self, annotation_ids): def eager_load_documents(query): return query.options( subqueryload(models.Annotation.document)) annotations = storage.fetch_ordered_annotations( self.session, annotation_ids, query_processor=eager_load_documents) # preload formatters, so they can optimize database access for formatter in self.formatters: formatter.preload(annotation_ids) return [self.present( resources.AnnotationContext(ann, self.group_svc, self.links_svc)) for ann in annotations]
def present_all(self, annotation_ids): def eager_load_documents(query): return query.options( subqueryload(models.Annotation.document)) annotations = storage.fetch_ordered_annotations( self.session, annotation_ids, query_processor=eager_load_documents) # preload formatters, so they can optimize database access for formatter in self.formatters: formatter.preload(annotation_ids) return [self.present( traversal.AnnotationContext(ann, self.group_svc, self.links_svc)) for ann in annotations]
def _annotations(request): """Return the annotations from the search API.""" s = search.Search(request) result = s.run(MultiDict(request.params)) return fetch_ordered_annotations(request.db, result.annotation_ids)
def _annotations(request): """Return the annotations from the search API.""" s = search.Search(request, stats=request.stats) s.append_modifier(search.UriFilter(request)) result = s.run(MultiDict(request.params)) return fetch_ordered_annotations(request.db, result.annotation_ids)
def _annotations(request): """Return the annotations from the search API.""" result = search.Search(request, stats=request.stats).run(request.params) return fetch_ordered_annotations(request.db, result.annotation_ids)
def test_it_handles_empty_ids(self): results = storage.fetch_ordered_annotations(sentinel.db_session, ids=[]) assert results == []