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
« prev ^ index » next coverage.py v7.4.0, created at 2023-12-29 00:47 +0100
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
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
15class RecipeCreate(GroupRequiredMixin, CreateView):
16 groups_required = ['user']
17 template_name = "generic/new_template.html"
18 model = Recipe
19 fields = ('name',)
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'))
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}))
35 def get_success_url(self):
36 return reverse('edit_recipe', kwargs={'pk': self.object.pk})
38 def get_context_data(self, **kwargs):
39 context = super(RecipeCreate, self).get_context_data(**kwargs)
40 context['title'] = _("Recipe")
41 return context
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}))
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')
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}))
68 def get_context_data(self, **kwargs):
69 context = super(StorageCreate, self).get_context_data(**kwargs)
70 context['title'] = _("Storage Backend")
71 return context
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
88 recipe.save()
90 if form.cleaned_data['keywords']:
91 recipe.keywords.set(form.cleaned_data['keywords'])
93 new_recipe.delete()
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 )
109 return render(request, 'forms/edit_import_recipe.html', {'form': form})