def stacks():
    req = request.get_json()
    message = ""
    if request.method == 'POST':
        page = 1
        page_size = 10
        try:
            request_error = False
            title = req['title']
            image_ids = req['imageIds']
        except KeyError:
            request_error = True
        if request_error:
            return jsonify({ 'message': 'Insufficient data to create stack' }), 400
        try:
            stack = models.Stack.create(title=title)
            for id in image_ids:
                try:
                    models.StackImage.create(stack=stack, image = id)
                except Exception as ex:
                    print ex
            message = "Stack created"
        except IntegrityError:
            return jsonify({ 'message': 'Stack already exists with title {}'.format(title) }), 400
        stacks = (Stack.select()
            .order_by(Stack.created_date.desc())
            .paginate(page, page_size))
    if request.method == 'GET':
        page = int(request.args.get('page'))
        page_size = 10
        stacks = (Stack.select()
                    .order_by(Stack.created_date.desc())
                    .paginate(page, page_size))
    stack_count = SelectQuery(models.Stack).count()

    return jsonify({ 
        'message': message,
        'stacks': [stack.serialized for stack in stacks],
        'totalStacks': stack_count,
        'pages': [stack + 1 for stack in range(int(math.ceil(float(stack_count)/float(page_size))))]
    }), 201
def project_stack_images(project_id, stack_id):
    first_image = Image.select().join(StackImage).where(StackImage.stack == stack_id).get().key
    last_underscore = first_image.rfind('_')
    stack_title = first_image[:last_underscore]
    project_stack = ProjectStack.get(ProjectStack.project == project_id, ProjectStack.stack == stack_id)
    project_stack_user_data = project_stack.project_stack_data.where(ProjectStackDatum.user == g.user_id)
    probe_type = project_stack.project.probe_type
    probe_settings = project_stack.probe_setting.get()
    images = (Image.select().join(StackImage).where(StackImage.stack == stack_id)
                .order_by(Image.name))
    project_stacks = Stack.select().join(ProjectStack).where(ProjectStack.project == project_id).order_by(Stack.id)
    marker_options = MarkerOption.select().join(ProjectMarkerOption).where(ProjectMarkerOption.project == project_id)
    return jsonify({ 'images': [image.stack_image_serialized for image in images],
                     'data': [d.serialized for d in project_stack_user_data],
                     'probeSettings': probe_settings.serialized,
                     'stackTitle': stack_title,
                     'probeType': probe_type,
                     'markerOptions': [marker_option.name for marker_option in marker_options],
                     'projectStackIds': [stack.id for stack in project_stacks]
                    })