def create(request): """Create an annotation from the POST payload.""" schema = CreateAnnotationSchema(request) appstruct = schema.validate(_json_payload(request)) group_service = request.find_service(IGroupService) annotation = storage.create_annotation(request, appstruct, group_service) _publish_annotation_event(request, annotation, 'create') links_service = request.find_service(name='links') group_service = request.find_service(IGroupService) resource = AnnotationResource(annotation, group_service, links_service) presenter = AnnotationJSONPresenter(resource) return presenter.asdict()
def update(context, request): """Update the specified annotation with data from the PATCH payload.""" if request.method == 'PUT' and hasattr(request, 'stats'): request.stats.incr('api.deprecated.put_update_annotation') schema = UpdateAnnotationSchema(request, context.annotation.target_uri, context.annotation.groupid) appstruct = schema.validate(_json_payload(request)) annotation = storage.update_annotation(request.db, context.annotation.id, appstruct) _publish_annotation_event(request, annotation, 'update') links_service = request.find_service(name='links') group_service = request.find_service(IGroupService) resource = AnnotationResource(annotation, group_service, links_service) presenter = AnnotationJSONPresenter(resource) return presenter.asdict()
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 read(context, request): """Return the annotation (simply how it was stored in the database).""" presenter = AnnotationJSONPresenter(context) return presenter.asdict()