Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/apps/api/views/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,26 @@ def get_serializer_context(self):
return context

def update(self, request, *args, **kwargs):

# Get task
task = self.get_object()

# Raise error if user is not the creator of the task or not a super user
if request.user != task.created_by and not request.user.is_superuser:
raise PermissionDenied("Cannot update a task that is not yours")

# If the key is not in the request data, set the corresponding field to None
# No condition for scoring program because a task must have a scoring program
if "ingestion_program" not in request.data:
task.ingestion_program = None
if "input_data" not in request.data:
task.input_data = None
if "reference_data" not in request.data:
task.reference_data = None

# Save the task to apply the changes
task.save()

return super().update(request, *args, **kwargs)

def destroy(self, request, *args, **kwargs):
Expand Down
37 changes: 31 additions & 6 deletions src/static/riot/tasks/management.tag
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@
<label>Scoring Program</label>
<div class="ui fluid left icon labeled input search dataset" data-name="scoring_program">
<i class="search icon"></i>
<input type="text" class="prompt" id="editscoring_program" value="{selected_task.scoring_program?.name || ''}">
<input type="text" class="prompt" id="edit_scoring_program" value="{selected_task.scoring_program?.name || ''}" name="edit_scoring_program">
<div class="results"></div>
</div>
</div>
Expand All @@ -283,7 +283,7 @@
<label>Ingestion Program</label>
<div class="ui fluid left icon labeled input search dataset" data-name="ingestion_program">
<i class="search icon"></i>
<input type="text" class="prompt" id="edit_ingestion_program" value="{selected_task.ingestion_program?.name || ''}">
<input type="text" class="prompt" id="edit_ingestion_program" value="{selected_task.ingestion_program?.name || ''}" name="edit_ingestion_program">
<div class="results"></div>
</div>
</div>
Expand All @@ -294,7 +294,7 @@
<label>Reference Data</label>
<div class="ui fluid left icon labeled input search dataset" data-name="reference_data">
<i class="search icon"></i>
<input type="text" class="prompt" id="edit_reference_data" value="{selected_task.reference_data?.name || ''}">
<input type="text" class="prompt" id="edit_reference_data" value="{selected_task.reference_data?.name || ''}" name="edit_reference_data">
<div class="results"></div>
</div>
</div>
Expand All @@ -303,7 +303,7 @@
<label>Input Data</label>
<div class="ui fluid left icon labeled input search dataset" data-name="input_data">
<i class="search icon"></i>
<input type="text" class="prompt" id="edit_input_data" value="{selected_task.input_data?.name || ''}">
<input type="text" class="prompt" id="edit_input_data" value="{selected_task.input_data?.name || ''}" name="edit_input_data">
<div class="results"></div>
</div>
</div>
Expand Down Expand Up @@ -540,7 +540,7 @@
}

self.edit_form_updated = () => {
self.edit_modal_is_valid = $(self.refs.edit_name).val() && $(self.refs.edit_description).val() && self.form_datasets.scoring_program
self.edit_modal_is_valid = $(self.refs.edit_name).val() && $(self.refs.edit_description).val()
self.update()
}

Expand All @@ -555,17 +555,42 @@
self.edit_modal_is_valid = false
}
self.update_task = () => {
// Get filled data from the edit fom
let data = get_form_data($(self.refs.edit_form))

// Show error when there is no scoring program in the task
if(data.edit_scoring_program == ""){
toastr.error('Scoring program is required in a task!')
return
}

// replace property names in the data object
data.name = data.edit_name;
data.description = data.edit_description;

// If ingestion program is not removed, add the new ingestion program from form_datasets to data
if(data.edit_ingestion_program != ""){
data.ingestion_program = self.form_datasets.ingestion_program
}
// If input data is not removed, add the new input data from form_datasets to data
if(data.edit_input_data != ""){
data.input_data = self.form_datasets.input_data
}
// If reference data is not removed, add the new reference data from form_datasets to data
if(data.edit_reference_data != ""){
data.reference_data = self.form_datasets.reference_data
}
// add the new scoring from form_datasets to data
data.scoring_program = self.form_datasets.scoring_program

// delete the old property names
delete data.edit_name
delete data.edit_description
delete data.edit_ingestion_program
delete data.edit_scoring_program
delete data.edit_input_data
delete data.edit_reference_data

_.assign(data, self.form_datasets)
task_id = self.selected_task.id
CODALAB.api.update_task(task_id, data)
.done((response) => {
Expand Down