Example #1
0
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}))