Example #1
0
def puzzle_list(group):
    if request.method == 'POST':
        return redirect(url_for('puzzle_editor',
                                group=group, id=request.form['name']))
    else:
        puzzles = PuzzleSolution.query(PuzzleSolution.group==group)
        return render_template('puzzle/list.html', puzzles=puzzles)
Example #2
0
def puzzle_data(group, id):
    puzzle = PuzzleSolution.query().filter(PuzzleSolution.name==id,
                                           PuzzleSolution.group==group).get()
    if request.method == 'POST':
        #_id = request.form.get('_id')
        #if _id is not None:
        #    puzzle = PuzzleSolution.get_by_id(_id)
        #    print _id, puzzle

        form = request.form
        width = height = int(form['size'])
        hint = form['hint']
        colors = {}
        for color_code in form.getlist('color'):
            colors[color_code] = form['color-' + color_code]
        pixels = []
        for y in range(height):
            row = ''
            for x in range(width):
                row += form['%d,%d' % (x, y)]
            pixels.append(row)

        if puzzle is None:
            puzzle = PuzzleSolution(group=group, name=id)
        else:
            puzzle.name = form['title']

        puzzle.width = int(form['size'])
        puzzle.hint = db.Text(hint)
        puzzle.author = users.get_current_user()
        puzzle.data = json.dumps(
        {
            'colors': colors,
            'pixels': pixels,
        })
        puzzle.put()
        return redirect(request.referrer)
    else:
        if puzzle is None:
            if group == 'TEST':
                puzzle = TEST_PUZZLES.get(id)
            if group == 'AUTO':
                puzzle = PuzzleSolution.generate(id)
            if puzzle is None:
                if id == 'RANDOM':
                    puzzle_ids = (PuzzleSolution
                                    .query()
                                    .filter(PuzzleSolution.group==group)
                                    .fetch(keys_only=True))
                    pick = int(random.random() * len(puzzle_ids))
                    puzzle = puzzle_ids[pick].get()
            if puzzle is None:
                template = request.args.get('template')
                if template is not None:
                    puzzle = TEMPLATES.get(template)
                    puzzle.name = id

        if 'application/json' in request.accept_mimetypes:
            return json.dumps(
                puzzle.to_meta(reduced=request.args.get('reduced')))
        else:
            return render_template('puzzle/view.html',
                                   puzzle=puzzle, group=group, id=id)