diff options
-rw-r--r-- | lib/toaster/toastergui/static/js/newcustomimage_modal.js | 8 | ||||
-rwxr-xr-x | lib/toaster/toastergui/views.py | 33 |
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( |