def render_songbook(request, id, slug): """Trigger the generation of a songbook """ force = request.REQUEST.get("force", False) songbook = Songbook.objects.get(id=id) layout_id = request.REQUEST.get("layout", 0) if layout_id == 0: layout_id = request.session["layout"] layout = Layout.objects.get(id=layout_id) try: gen_task = GeneratorTask.objects.get(songbook=songbook, layout=layout) state = gen_task.state except GeneratorTask.DoesNotExist: gen_task = None state = None # Build cases build = gen_task is None or \ ((state == GeneratorTask.State.FINISHED or \ state == GeneratorTask.State.ERROR) and force) or\ gen_task.hash != songbook.hash() if build: gen_task, _created = GeneratorTask.objects.get_or_create( songbook=songbook, layout=layout) gen_task.result = {} gen_task.hash = songbook.hash() gen_task.state = GeneratorTask.State.QUEUED gen_task.save() import generator.tasks as tasks tasks.queue_render_task(gen_task.id) return redirect(reverse('setup_rendering', kwargs={"id":id, "slug":slug}))