Coverage for cookbook/views/new.py: 41%

80 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2023-12-29 00:47 +0100

1 

2from django.contrib import messages 

3from django.http import HttpResponseRedirect 

4from django.shortcuts import get_object_or_404, redirect, render 

5from django.urls import reverse, reverse_lazy 

6from django.utils.translation import gettext as _ 

7from django.views.generic import CreateView 

8 

9from cookbook.forms import ImportRecipeForm, Storage, StorageForm 

10from cookbook.helper.permission_helper import GroupRequiredMixin, above_space_limit, group_required 

11from cookbook.models import Recipe, RecipeImport, ShareLink, Step 

12from recipes import settings 

13 

14 

15class RecipeCreate(GroupRequiredMixin, CreateView): 

16 groups_required = ['user'] 

17 template_name = "generic/new_template.html" 

18 model = Recipe 

19 fields = ('name',) 

20 

21 def form_valid(self, form): 

22 limit, msg = above_space_limit(self.request.space) 

23 if limit: 

24 messages.add_message(self.request, messages.WARNING, msg) 

25 return HttpResponseRedirect(reverse('index')) 

26 

27 obj = form.save(commit=False) 

28 obj.created_by = self.request.user 

29 obj.space = self.request.space 

30 obj.internal = True 

31 obj.save() 

32 obj.steps.add(Step.objects.create(space=self.request.space, show_as_header=False, show_ingredients_table=self.request.user.userpreference.show_step_ingredients)) 

33 return HttpResponseRedirect(reverse('edit_recipe', kwargs={'pk': obj.pk})) 

34 

35 def get_success_url(self): 

36 return reverse('edit_recipe', kwargs={'pk': self.object.pk}) 

37 

38 def get_context_data(self, **kwargs): 

39 context = super(RecipeCreate, self).get_context_data(**kwargs) 

40 context['title'] = _("Recipe") 

41 return context 

42 

43 

44@group_required('user') 

45def share_link(request, pk): 

46 recipe = get_object_or_404(Recipe, pk=pk, space=request.space) 

47 link = ShareLink.objects.create(recipe=recipe, created_by=request.user, space=request.space) 

48 return HttpResponseRedirect(reverse('view_recipe', kwargs={'pk': pk, 'share': link.uuid})) 

49 

50 

51class StorageCreate(GroupRequiredMixin, CreateView): 

52 groups_required = ['admin'] 

53 template_name = "generic/new_template.html" 

54 model = Storage 

55 form_class = StorageForm 

56 success_url = reverse_lazy('list_storage') 

57 

58 def form_valid(self, form): 

59 obj = form.save(commit=False) 

60 obj.created_by = self.request.user 

61 obj.space = self.request.space 

62 obj.save() 

63 if self.request.space.demo or settings.HOSTED: 

64 messages.add_message(self.request, messages.ERROR, _('This feature is not yet available in the hosted version of tandoor!')) 

65 return redirect('index') 

66 return HttpResponseRedirect(reverse('edit_storage', kwargs={'pk': obj.pk})) 

67 

68 def get_context_data(self, **kwargs): 

69 context = super(StorageCreate, self).get_context_data(**kwargs) 

70 context['title'] = _("Storage Backend") 

71 return context 

72 

73 

74@group_required('user') 

75def create_new_external_recipe(request, import_id): 

76 if request.method == "POST": 

77 form = ImportRecipeForm(request.POST, space=request.space) 

78 if form.is_valid(): 

79 new_recipe = get_object_or_404(RecipeImport, pk=import_id, space=request.space) 

80 recipe = Recipe() 

81 recipe.space = request.space 

82 recipe.storage = new_recipe.storage 

83 recipe.name = form.cleaned_data['name'] 

84 recipe.file_path = form.cleaned_data['file_path'] 

85 recipe.file_uid = form.cleaned_data['file_uid'] 

86 recipe.created_by = request.user 

87 

88 recipe.save() 

89 

90 if form.cleaned_data['keywords']: 

91 recipe.keywords.set(form.cleaned_data['keywords']) 

92 

93 new_recipe.delete() 

94 

95 messages.add_message(request, messages.SUCCESS, _('Imported new recipe!')) 

96 return redirect('list_recipe_import') 

97 else: 

98 messages.add_message(request, messages.ERROR, _('There was an error importing this recipe!')) 

99 else: 

100 new_recipe = get_object_or_404(RecipeImport, pk=import_id, space=request.space) 

101 form = ImportRecipeForm( 

102 initial={ 

103 'file_path': new_recipe.file_path, 

104 'name': new_recipe.name, 

105 'file_uid': new_recipe.file_uid 

106 }, space=request.space 

107 ) 

108 

109 return render(request, 'forms/edit_import_recipe.html', {'form': form})