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 2022/08/29 18:51:14 UTC
[airavata-django-portal] 02/11: AIRAVATA-3649 DB field and Admin UI for queueSettingsCalculatorId
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 2319627de69a66eaf0f1543e256c155f1336df60
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu Aug 25 11:10:56 2022 -0400
AIRAVATA-3649 DB field and Admin UI for queueSettingsCalculatorId
---
.../applications/ApplicationInterfaceEditor.vue | 51 +++++++++++++++++++---
...icationsettings_queue_settings_calculator_id.py | 18 ++++++++
django_airavata/apps/api/models.py | 1 +
django_airavata/apps/api/serializers.py | 29 +++++++-----
.../api/static/django_airavata_api/js/index.js | 3 ++
.../js/models/ApplicationInterfaceDefinition.js | 5 +++
.../js/models/QueueSettingsCalculator.js | 9 ++++
.../django_airavata_api/js/service_config.js | 13 ++++++
8 files changed, 111 insertions(+), 18 deletions(-)
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/applications/ApplicationInterfaceEditor.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/applications/ApplicationInterfaceEditor.vue
index c33c8c46..3114370f 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/applications/ApplicationInterfaceEditor.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/applications/ApplicationInterfaceEditor.vue
@@ -37,6 +37,22 @@
cores, walltime limit).
</div>
</b-form-group>
+ <b-form-group
+ label="Queue Settings Calculator"
+ description="Select function to automatically compute queue settings."
+ >
+ <b-form-select
+ v-model="data.queueSettingsCalculatorId"
+ :options="queueSettingsCalculatorOptions"
+ :disabled="queueSettingsCalculatorOptions.length === 0"
+ >
+ <template slot="first">
+ <option :value="null">
+ If applicable, select a queue settings calculator
+ </option>
+ </template>
+ </b-form-select>
+ </b-form-group>
</div>
</div>
<div class="w-100">
@@ -45,9 +61,13 @@
label-for="application-description"
>
<b-form-textarea
- id="application-description" :rows="5"
+ id="application-description"
+ :rows="5"
v-model="data.applicationDescription"
- :state="!data.applicationDescription || data.applicationDescription.length < 500"
+ :state="
+ !data.applicationDescription ||
+ data.applicationDescription.length < 500
+ "
>
</b-form-textarea>
<b-form-valid-feedback v-if="!!data.applicationDescription">
@@ -120,8 +140,8 @@
</template>
<script>
-import {models} from "django-airavata-api";
-import {mixins} from "django-airavata-common-ui";
+import { models, services } from "django-airavata-api";
+import { mixins } from "django-airavata-common-ui";
import ApplicationInputFieldEditor from "./ApplicationInputFieldEditor.vue";
import ApplicationOutputFieldEditor from "./ApplicationOutputFieldEditor.vue";
@@ -144,13 +164,28 @@ export default {
ApplicationOutputFieldEditor,
draggable,
},
+ created() {
+ this.loadQueueSettingsCalculators();
+ },
computed: {
trueFalseOptions() {
return [
- {text: "True", value: true},
- {text: "False", value: false},
+ { text: "True", value: true },
+ { text: "False", value: false },
];
},
+ queueSettingsCalculatorOptions() {
+ if (this.queueSettingsCalculators) {
+ return this.queueSettingsCalculators.map((qsc) => {
+ return {
+ text: qsc.name,
+ value: qsc.id,
+ };
+ });
+ } else {
+ return [];
+ }
+ },
},
data() {
return {
@@ -160,6 +195,7 @@ export default {
handle: ".drag-handle",
},
collapseApplicationInputs: false,
+ queueSettingsCalculators: null,
};
},
methods: {
@@ -209,6 +245,9 @@ export default {
onDragEnd() {
this.collapseApplicationInputs = false;
},
+ async loadQueueSettingsCalculators() {
+ this.queueSettingsCalculators = await services.QueueSettingsCalculatorService.list();
+ },
},
};
</script>
diff --git a/django_airavata/apps/api/migrations/0009_applicationsettings_queue_settings_calculator_id.py b/django_airavata/apps/api/migrations/0009_applicationsettings_queue_settings_calculator_id.py
new file mode 100644
index 00000000..bc7bf8fb
--- /dev/null
+++ b/django_airavata/apps/api/migrations/0009_applicationsettings_queue_settings_calculator_id.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.15 on 2022-08-25 13:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('django_airavata_api', '0008_merge_20220601_1951'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='applicationsettings',
+ name='queue_settings_calculator_id',
+ field=models.CharField(max_length=255, null=True),
+ ),
+ ]
diff --git a/django_airavata/apps/api/models.py b/django_airavata/apps/api/models.py
index 829c88fa..45c88164 100644
--- a/django_airavata/apps/api/models.py
+++ b/django_airavata/apps/api/models.py
@@ -72,3 +72,4 @@ class ApplicationTemplateContextProcessor(models.Model):
class ApplicationSettings(models.Model):
application_module_id = models.CharField(max_length=255, unique=True)
show_queue_settings = models.BooleanField(default=True)
+ queue_settings_calculator_id = models.CharField(max_length=255, null=True)
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 6780b3c3..5ed02848 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -336,6 +336,7 @@ class ApplicationInterfaceDescriptionSerializer(
applicationOutputs = OutputDataObjectTypeSerializer(many=True)
userHasWriteAccess = serializers.SerializerMethodField()
showQueueSettings = serializers.BooleanField(required=False)
+ queueSettingsCalculatorId = serializers.CharField(allow_null=True, required=False)
def to_representation(self, instance):
representation = super().to_representation(instance)
@@ -343,28 +344,32 @@ class ApplicationInterfaceDescriptionSerializer(
application_settings, created = models.ApplicationSettings.objects.get_or_create(
application_module_id=application_module_id)
representation["showQueueSettings"] = application_settings.show_queue_settings
+ representation["queueSettingsCalculatorId"] = application_settings.queue_settings_calculator_id
return representation
def create(self, validated_data):
- showQueueSettings = validated_data.pop("showQueueSettings", None)
+ showQueueSettings = validated_data.pop("showQueueSettings", True)
+ queueSettingsCalculatorId = validated_data.pop("queueSettingsCalculatorId", None)
application_interface = super().create(validated_data)
application_module_id = application_interface.applicationModules[0]
- if showQueueSettings is not None:
- models.ApplicationSettings.objects.update_or_create(
- application_module_id=application_module_id,
- defaults={"show_queue_settings": showQueueSettings}
- )
+ models.ApplicationSettings.objects.update_or_create(
+ application_module_id=application_module_id,
+ defaults={"show_queue_settings": showQueueSettings,
+ "queue_settings_calculator_id": queueSettingsCalculatorId}
+ )
return application_interface
def update(self, instance, validated_data):
- showQueueSettings = validated_data.pop("showQueueSettings", None)
+ defaults = {}
+ if "showQueueSettings" in validated_data:
+ defaults["show_queue_settings"] = validated_data.pop("showQueueSettings")
+ if "queueSettingsCalculatorId" in validated_data:
+ defaults["queue_settings_calculator_id"] = validated_data.pop("queueSettingsCalculatorId")
application_interface = super().update(instance, validated_data)
application_module_id = application_interface.applicationModules[0]
- if showQueueSettings is not None:
- models.ApplicationSettings.objects.update_or_create(
- application_module_id=application_module_id,
- defaults={"show_queue_settings": showQueueSettings}
- )
+ models.ApplicationSettings.objects.update_or_create(
+ application_module_id=application_module_id, defaults=defaults
+ )
return application_interface
def get_userHasWriteAccess(self, appDeployment):
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/index.js b/django_airavata/apps/api/static/django_airavata_api/js/index.js
index ca08f1d7..d57713d3 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/index.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/index.js
@@ -135,6 +135,9 @@ const services = {
ParserService: ServiceFactory.service("Parsers"),
ProjectService: ServiceFactory.service("Projects"),
+ QueueSettingsCalculatorService: ServiceFactory.service(
+ "QueueSettingsCalculators"
+ ),
SCPDataMovementService,
ServiceFactory,
SettingsService: ServiceFactory.service("Settings"),
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/ApplicationInterfaceDefinition.js b/django_airavata/apps/api/static/django_airavata_api/js/models/ApplicationInterfaceDefinition.js
index 008f3a0a..d75164cb 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/ApplicationInterfaceDefinition.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/ApplicationInterfaceDefinition.js
@@ -44,6 +44,11 @@ const FIELDS = [
type: "boolean",
default: true,
},
+ {
+ name: "queueSettingsCalculatorId",
+ type: "string",
+ default: null,
+ },
];
export default class ApplicationInterfaceDefinition extends BaseModel {
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/QueueSettingsCalculator.js b/django_airavata/apps/api/static/django_airavata_api/js/models/QueueSettingsCalculator.js
new file mode 100644
index 00000000..4396d74f
--- /dev/null
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/QueueSettingsCalculator.js
@@ -0,0 +1,9 @@
+import BaseModel from "./BaseModel";
+
+const FIELDS = ["id", "name"];
+
+export default class QueueSettingsCalculator extends BaseModel {
+ constructor(data = {}) {
+ super(FIELDS, data);
+ }
+}
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/service_config.js b/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
index 95ee7ac8..0eb915c4 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
@@ -19,6 +19,7 @@ import LogRecord from "./models/LogRecord";
import Notification from "./models/Notification";
import Parser from "./models/Parser";
import Project from "./models/Project";
+import QueueSettingsCalculator from "./models/QueueSettingsCalculator";
import Settings from "./models/Settings";
import SharedEntity from "./models/SharedEntity";
import StoragePreference from "./models/StoragePreference";
@@ -341,6 +342,18 @@ export default {
queryParams: ["limit", "offset"],
modelClass: Project,
},
+ QueueSettingsCalculators: {
+ url: "/api/queue-settings-calculators",
+ viewSet: ["retrieve", "list"],
+ methods: {
+ calculate: {
+ url: "/api/queue-settings-calculators/<lookup>/calculate/",
+ requestType: "post",
+ modelClass: QueueSettingsCalculator,
+ },
+ },
+ modelClass: QueueSettingsCalculator,
+ },
Settings: {
url: "/api/settings/",
methods: {