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] })