summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/toaster/toastergui/static/js/newcustomimage_modal.js8
-rwxr-xr-xlib/toaster/toastergui/views.py33
2 files changed, 24 insertions, 17 deletions
diff --git a/lib/toaster/toastergui/static/js/newcustomimage_modal.js b/lib/toaster/toastergui/static/js/newcustomimage_modal.js
index 328997af3..98e87f4a6 100644
--- a/lib/toaster/toastergui/static/js/newcustomimage_modal.js
+++ b/lib/toaster/toastergui/static/js/newcustomimage_modal.js
@@ -9,6 +9,8 @@ function newCustomImageModalInit(){
var nameInput = imgCustomModal.find('input');
var invalidMsg = "Image names cannot contain spaces or capital letters. The only allowed special character is dash (-).";
+ var duplicateImageMsg = "An image with this name already exists in this project.";
+ var duplicateRecipeMsg = "A non-image recipe with this name already exists.";
newCustomImgBtn.click(function(e){
e.preventDefault();
@@ -22,8 +24,10 @@ function newCustomImageModalInit(){
console.warn(ret.error);
if (ret.error === "invalid-name") {
showError(invalidMsg);
- } else if (ret.error === "already-exists") {
- showError("An image with this name already exists. Image names must be unique.");
+ } else if (ret.error === "image-already-exists") {
+ showError(duplicateImageMsg);
+ } else if (ret.error === "recipe-already-exists") {
+ showError(duplicateRecipeMsg);
}
} else {
imgCustomModal.modal('hide');
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index a11c9da5f..9744f4efa 100755
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -2409,21 +2409,24 @@ if True:
if re.search(r'[^a-z|0-9|-]', request.POST["name"]):
return {"error": "invalid-name"}
- # Are there any recipes with the name already?
- for existing_recipe in Recipe.objects.filter(
- name=request.POST["name"]):
- try:
- ci = CustomImageRecipe.objects.get(pk=existing_recipe.pk)
- if ci.project == params["project"]:
- return {"error": "already-exists" }
- else:
- # It is a CustomImageRecipe but not in our project
- # this is fine so
- continue
- except:
- # It isn't a CustomImageRecipe so is a recipe from
- # another source.
- return {"error": "already-exists" }
+ custom_images = CustomImageRecipe.objects.all()
+
+ # Are there any recipes with this name already in our project?
+ existing_image_recipes_in_project = custom_images.filter(
+ name=request.POST["name"], project=params["project"])
+
+ if existing_image_recipes_in_project.count() > 0:
+ return {"error": "image-already-exists"}
+
+ # Are there any recipes with this name which aren't custom
+ # image recipes?
+ custom_image_ids = custom_images.values_list('id', flat=True)
+ existing_non_image_recipes = Recipe.objects.filter(
+ Q(name=request.POST["name"]) & ~Q(pk__in=custom_image_ids)
+ )
+
+ if existing_non_image_recipes.count() > 0:
+ return {"error": "recipe-already-exists"}
# create layer 'Custom layer' and verion if needed
layer = Layer.objects.get_or_create(