You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/01/31 15:13:40 UTC

[airavata-django-portal] 01/03: AIRAVATA-2614 Map searchExperiments to ViewSet, Serializer

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 07a0770b0a50973bebe3af0f5180afcec9d32a90
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Tue Jan 30 16:05:25 2018 -0500

    AIRAVATA-2614 Map searchExperiments to ViewSet, Serializer
---
 django_airavata/apps/api/serializers.py |  7 +++++++
 django_airavata/apps/api/urls.py        |  1 +
 django_airavata/apps/api/views.py       | 21 +++++++++++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 3a0fd09..0d045e5 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -305,3 +305,10 @@ class FullExperimentSerializer(serializers.Serializer):
 
     def update(self, instance, validated_data):
         raise Exception("Not implemented")
+
+
+class ExperimentSummarySerializer(
+        thrift_utils.create_serializer_class(ExperimentSummaryModel)):
+    creationTime = UTCPosixTimestampDateTimeField()
+    url = FullyEncodedHyperlinkedIdentityField(view_name='django_airavata_api:experiment-detail', lookup_field='experimentId', lookup_url_kwarg='experiment_id')
+    project = FullyEncodedHyperlinkedIdentityField(view_name='django_airavata_api:project-detail', lookup_field='projectId', lookup_url_kwarg='project_id')
diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index e20babf..345f85d 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -12,6 +12,7 @@ router = routers.DefaultRouter()
 router.register(r'projects', views.ProjectViewSet, base_name='project')
 router.register(r'experiments', views.ExperimentViewSet, base_name='experiment')
 router.register(r'full-experiments', views.FullExperimentViewSet, base_name='full-experiment')
+router.register(r'experiment-search', views.ExperimentSearchViewSet, base_name='experiment-search')
 router.register(r'new/application/module', views.RegisterApplicationModule, base_name='register_app_module')
 router.register(r'application-interfaces', views.ApplicationInterfaceViewSet, base_name='application-interface')
 router.register(r'applications', views.ApplicationModuleViewSet, base_name='application')
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index c9b2f57..cf44e41 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -268,6 +268,27 @@ class ExperimentViewSet(APIBackedViewSet):
         return Response(serializer.data)
 
 
+class ExperimentSearchViewSet(mixins.ListModelMixin, GenericAPIBackedViewSet):
+
+    serializer_class = serializers.ExperimentSummarySerializer
+    pagination_class = APIResultPagination
+    pagination_viewname = 'django_airavata_api:experiment-search-list'
+
+    def get_list(self):
+        view = self
+
+        # TODO: implement support for filters
+        class ExperimentSearchResultIterator(APIResultIterator):
+            def get_results(self, limit=-1, offset=0):
+                return view.request.airavata_client.searchExperiments(
+                    view.authz_token, view.gateway_id, view.username, {},
+                    limit, offset)
+        return ExperimentSearchResultIterator()
+
+    def get_instance(self, lookup_value):
+        raise NotImplementedError()
+
+
 class FullExperimentViewSet(mixins.RetrieveModelMixin,
                             GenericAPIBackedViewSet):
 

-- 
To stop receiving notification emails like this one, please contact
machristie@apache.org.