--- 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)),