# HG changeset patch # User veltr # Date 1353085751 -3600 # Node ID e3329b0f506c3c29775a945d19d50f838b6960f8 # Parent 295c5613698ff300071d73b2e9773f6fcfc4fd62# Parent 8aedef0c12e112d36a97890eadd6c570174fb419 Merge with 8aedef0c12e112d36a97890eadd6c570174fb419 diff -r 295c5613698f -r e3329b0f506c src/ldt/ldt/api/ldt/resources/__init__.py --- a/src/ldt/ldt/api/ldt/resources/__init__.py Fri Nov 16 18:08:48 2012 +0100 +++ b/src/ldt/ldt/api/ldt/resources/__init__.py Fri Nov 16 18:09:11 2012 +0100 @@ -2,6 +2,7 @@ from content import ContentResource from project import ProjectResource from segment import SegmentResource +from tag import TagResource from user import UserResource -__all__ = ["AnnotationResource", "ContentResource", "ProjectResource", "SegmentResource", "UserResource"] +__all__ = ["AnnotationResource", "ContentResource", "ProjectResource", "SegmentResource", "UserResource", "TagResource"] diff -r 295c5613698f -r e3329b0f506c src/ldt/ldt/api/ldt/resources/segment.py --- a/src/ldt/ldt/api/ldt/resources/segment.py Fri Nov 16 18:08:48 2012 +0100 +++ b/src/ldt/ldt/api/ldt/resources/segment.py Fri Nov 16 18:09:11 2012 +0100 @@ -5,6 +5,7 @@ from ldt.indexation import get_results_with_context from ldt.ldt_utils.models import Content, Segment from ldt.ldt_utils.segmentserializer import SegmentSerializer +from tastypie.constants import ALL from tastypie.http import HttpNotFound from tastypie.resources import ModelResource from tastypie.utils import trailing_slash @@ -17,8 +18,8 @@ excludes = ['project_obj', 'content'] queryset = Segment.objects.all() filtering = { - 'iri_id': ['exact'], - 'start_ts': ['lte', 'gte'], + 'iri_id': ALL, + 'start_ts': ALL, } # # WARNING : this segment API will only return json format, no matter format get parameter. diff -r 295c5613698f -r e3329b0f506c src/ldt/ldt/api/ldt/resources/tag.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ldt/ldt/api/ldt/resources/tag.py Fri Nov 16 18:09:11 2012 +0100 @@ -0,0 +1,61 @@ +from django.conf import settings +from django.conf.urls.defaults import url +from django.core.paginator import Paginator, InvalidPage +from ldt.ldt_utils.models import Segment +from tagging.models import Tag, TaggedItem +from tastypie.http import HttpNotFound +from tastypie.resources import ModelResource +from tastypie.utils import trailing_slash + + +class TagResource(ModelResource): + class Meta: + allowed_methods = ['get'] + resource_name = 'tags' + queryset = Tag.objects.all() + + def override_urls(self): + # WARNING : in tastypie <= 0.9.11, override_urls is used instead of prepend_urls. From 0.9.12, prepend_urls will be prefered and override_urls deprecated + return [ + url(r"^(?P%s)/search%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_search'), name="api_get_search"), + ] + + def get_search(self, request, **kwargs): + self.method_check(request, allowed=['get']) + all_segments = None + # Search by content ids is priori + content_ids = request.GET.get('contents', '') + segment_ids = request.GET.get('segments', '') + tags_cloud = None + if content_ids != "": + # We get all the segments for these contents + content_ids = content_ids.split(',') + tags_cloud = Tag.objects.cloud_for_model(Segment, filters={"iri_id__in":content_ids}) + if not all_segments and segment_ids != "": + segment_ids = segment_ids.split(',') + tags_cloud = Tag.objects.cloud_for_model(Segment, filters={"element_id__in":segment_ids}) + + + limit = request.GET.get('limit', getattr(settings, 'API_LIMIT_PER_PAGE', 20)) + if limit == "0": + obj_for_bundle = tags_cloud + else: + paginator = Paginator(tags_cloud, limit) + try: + page = paginator.page(int(request.GET.get('page', 1))) + except InvalidPage: + raise HttpNotFound("Sorry, no results on that page.") + obj_for_bundle = page.object_list + + objects = [] + for tag in obj_for_bundle: + bundle = self.build_bundle(obj=tag, request=request) + bundle = self.full_dehydrate(bundle) + objects.append(bundle) + + object_list = { + 'objects': objects, + } + + self.log_throttled_access(request) + return self.create_response(request, object_list) \ No newline at end of file diff -r 295c5613698f -r e3329b0f506c src/ldt/ldt/api/ldt/urls.py --- a/src/ldt/ldt/api/ldt/urls.py Fri Nov 16 18:08:48 2012 +0100 +++ b/src/ldt/ldt/api/ldt/urls.py Fri Nov 16 18:09:11 2012 +0100 @@ -1,5 +1,5 @@ from django.conf.urls.defaults import patterns, include -from ldt.api.ldt.resources import ProjectResource, ContentResource, SegmentResource, AnnotationResource, UserResource +from ldt.api.ldt.resources import ProjectResource, ContentResource, SegmentResource, AnnotationResource, UserResource, TagResource from tastypie.api import Api v1_api = Api(api_name='1.0') @@ -8,6 +8,7 @@ v1_api.register(SegmentResource()) v1_api.register(AnnotationResource()) v1_api.register(UserResource()) +v1_api.register(TagResource()) urlpatterns = patterns('', (r'', include(v1_api.urls)),