def anno_my_stuff(self, request): """ Exposes an API endpoint to return all my anno list. """ user = auth_user(self.request_state.headers) anno_list = Anno.query_anno_by_author(user) vote_list = Vote.query_vote_by_author(user) for vote in vote_list: anno = Anno.get_by_id(vote.anno_key.id()) if anno is not None: anno_list.append(anno) flag_list = Flag.query_flag_by_author(user) for flag in flag_list: anno = Anno.get_by_id(flag.anno_key.id()) if anno is not None: anno_list.append(anno) followup_list = FollowUp.query_followup_by_author(user) for followup in followup_list: anno = Anno.get_by_id(followup.anno_key.id()) if anno is not None: anno_list.append(anno) anno_set = list(set(anno_list)) anno_message_list = [] for anno in anno_set: anno_message_list.append(anno.to_response_message()) return AnnoListMessage(anno_list=anno_message_list)
def anno_search(self, request): """ Exposes and API endpoint to search anno list. """ user = auth_user(self.request_state.headers) if request.order_type is None: raise endpoints.BadRequestException('order_type field is required.') if request.order_type != 'recent' and request.order_type != 'active' and request.order_type != 'popular': raise endpoints.BadRequestException( 'Invalid order_type field value, valid values are "recent", "active" and "popular"') app_set = None logging.info("only_my_apps=%s" % request.only_my_apps) if request.only_my_apps: app_set = set() for anno in Anno.query_anno_by_author(user): app_set.add(anno.app_name) for vote in Vote.query_vote_by_author(user): anno = Anno.get_by_id(vote.anno_key.id()) if anno is not None: app_set.add(anno.app_name) for flag in Flag.query_flag_by_author(user): anno = Anno.get_by_id(flag.anno_key.id()) if anno is not None: app_set.add(anno.app_name) for followup in FollowUp.query_followup_by_author(user): anno = Anno.get_by_id(followup.anno_key.id()) if anno is not None: app_set.add(anno.app_name) if request.order_type == 'popular': return Anno.query_by_popular(request.limit, request.offset, request.search_string, request.app_name, app_set, user) elif request.order_type == 'active': return Anno.query_by_active(request.limit, request.offset, request.search_string, request.app_name, app_set, user) else: return Anno.query_by_recent(request.limit, request.offset, request.search_string, request.app_name, app_set, user)