Merge with 8aedef0c12e112d36a97890eadd6c570174fb419
authorveltr
Fri, 16 Nov 2012 18:09:11 +0100
changeset 957 e3329b0f506c
parent 956 295c5613698f (current diff)
parent 955 8aedef0c12e1 (diff)
child 958 5c65415f343f
Merge with 8aedef0c12e112d36a97890eadd6c570174fb419
--- 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"]
--- 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.
--- /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<resource_name>%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
--- 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)),