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 2019/07/18 20:15:30 UTC
[airavata-django-portal] 01/02: AIRAVATA-3115
ApplicationPreferences model for favoriting apps
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 6abf9ff5cdccbde7c1a345a2484ad4d2e2508340
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Jul 16 12:13:15 2019 -0400
AIRAVATA-3115 ApplicationPreferences model for favoriting apps
---
.../apps/api/migrations/0003_auto_20190716_1549.py | 30 ++++++++++++++++++
django_airavata/apps/api/models.py | 11 +++++++
django_airavata/apps/api/serializers.py | 9 ++++++
django_airavata/apps/api/views.py | 36 ++++++++++++++++++++++
4 files changed, 86 insertions(+)
diff --git a/django_airavata/apps/api/migrations/0003_auto_20190716_1549.py b/django_airavata/apps/api/migrations/0003_auto_20190716_1549.py
new file mode 100644
index 0000000..3840aab
--- /dev/null
+++ b/django_airavata/apps/api/migrations/0003_auto_20190716_1549.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.21 on 2019-07-16 15:49
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('django_airavata_api', '0002_auto_20190711_1438'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ApplicationPreferences',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('username', models.CharField(max_length=64)),
+ ('application_id', models.CharField(max_length=64)),
+ ('favorite', models.BooleanField(default=False)),
+ ('workspace_preferences', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_airavata_api.WorkspacePreferences')),
+ ],
+ ),
+ migrations.AlterUniqueTogether(
+ name='applicationpreferences',
+ unique_together=set([('username', 'application_id')]),
+ ),
+ ]
diff --git a/django_airavata/apps/api/models.py b/django_airavata/apps/api/models.py
index fd44cca..33f6b01 100644
--- a/django_airavata/apps/api/models.py
+++ b/django_airavata/apps/api/models.py
@@ -11,6 +11,17 @@ class WorkspacePreferences(models.Model):
return WorkspacePreferences(username=username)
+class ApplicationPreferences(models.Model):
+ username = models.CharField(max_length=64)
+ application_id = models.CharField(max_length=64)
+ favorite = models.BooleanField(default=False)
+ workspace_preferences = models.ForeignKey(WorkspacePreferences,
+ on_delete=models.CASCADE)
+
+ class Meta:
+ unique_together = (('username', 'application_id'),)
+
+
class User_Notifications(models.Model):
class Meta:
unique_together = (('username', 'notification_id'),)
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index e9e4ade..08fb723 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -848,7 +848,16 @@ class UserStoragePathSerializer(serializers.Serializer):
# ModelSerializers
+class ApplicationPreferencesSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = models.ApplicationPreferences
+ exclude = ('id', 'username', 'workspace_preferences')
+
+
class WorkspacePreferencesSerializer(serializers.ModelSerializer):
+ application_preferences = ApplicationPreferencesSerializer(
+ source="applicationpreferences_set", many=True)
+
class Meta:
model = models.WorkspacePreferences
exclude = ('username',)
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index d24a562..096a294 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -563,6 +563,42 @@ class ApplicationModuleViewSet(APIBackedViewSet):
app_deployments, many=True, context={'request': request})
return Response(serializer.data)
+ @detail_route(methods=['post'])
+ def favorite(self, request, app_module_id):
+ helper = helpers.WorkspacePreferencesHelper()
+ workspace_preferences = helper.get(request)
+ try:
+ application_preferences = (
+ workspace_preferences.applicationpreferences_set.get(
+ application_id=app_module_id))
+ application_preferences.favorite = True
+ application_preferences.save()
+ except ObjectDoesNotExist:
+ workspace_preferences.applicationpreferences_set.create(
+ username=request.user.username,
+ application_id=app_module_id,
+ favorite=True)
+
+ return HttpResponse(status=204)
+
+ @detail_route(methods=['post'])
+ def unfavorite(self, request, app_module_id):
+ helper = helpers.WorkspacePreferencesHelper()
+ workspace_preferences = helper.get(request)
+ try:
+ application_preferences = (
+ workspace_preferences.applicationpreferences_set.get(
+ application_id=app_module_id))
+ application_preferences.favorite = False
+ application_preferences.save()
+ except ObjectDoesNotExist:
+ workspace_preferences.applicationpreferences_set.create(
+ username=request.user.username,
+ application_id=app_module_id,
+ favorite=False)
+
+ return HttpResponse(status=204)
+
@list_route()
def list_all(self, request, format=None):
all_modules = self.request.airavata_client.getAllAppModules(