コード例 #1
0
    def bucketlists():
        '''a method that will save a bucket list if post is chosen, return
        a bucketlist if GET is chosen, the buckest list returned can be
        thinned down by an id'''
        header = request.headers.get('Authorization')
        if not header:
            response = jsonify({'message': 'No authorisation header given'})
            return make_response(response), 401
        if ' ' not in header:
            response = jsonify({
                'message1':
                'A space needs to exist between the Bearer and token.',
                'message2':
                'The authorization should be typed as the example below',
                'example':
                'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MDMzNDUzMjIsInN1YiI6MiwiaWF0IjoxNTAzMzQxNzIyfQ.fCZ3ibX-vHQ5SKxYbrarQ0I8lvq5TgMt03A5vGlGhDE"'
            })
            return make_response(response), 401
        user_id = User.decode_token_to_sub(header)
        if not isinstance(user_id, int):
            response = {
                'message': 'User id returned is not an int',
                'userid': user_id
            }
            return make_response(jsonify(response)), 401

        if request.method == "POST":
            if 'name' not in request.data.keys():
                response = jsonify(
                    {'message': 'The key variable name has not been entered!'})
                return make_response(response), 400
            name = str(request.data.get('name', ''))
            status_of_similarity = False
            bucketlists_to_be_checked = BucketList.query.filter_by(
                creator_id=user_id)
            for item in bucketlists_to_be_checked:
                if name.lower() == item.name.lower():
                    status_of_similarity = True
            if not status_of_similarity:
                bucket_object = BucketList(name=name, creator_id=user_id)
                bucket_object.save_bucket()
                response = jsonify({
                    'id': bucket_object.id,
                    'name': bucket_object.name,
                    'date_created': bucket_object.date_created,
                    'date_modified': bucket_object.date_modified,
                    'creator_id': user_id
                })
                return make_response(response), 201
            else:
                response = jsonify({
                    'message':
                    'A bucket list exists with a similar name of {}!'.format(
                        name)
                })
                return make_response(response), 409

        else:
            bucket_name_to_search = request.args.get('q')
            limit_to_return = request.args.get('limit')
            no_argument_given = request.args
            if bucket_name_to_search == '':
                response = jsonify(
                    {'message': 'The search parameter has no string in it'})
                return make_response(response), 400
            elif bucket_name_to_search:
                bucketlist_list = BucketList.query.filter_by(
                    creator_id=user_id)
                buckets = []
                for item in bucketlist_list:
                    if bucket_name_to_search.lower() in item.name.lower():
                        a_bucket_object = {
                            'id': item.id,
                            'name': item.name,
                            'date_created': item.date_created,
                            'date_modified': item.date_modified,
                            'creator_id': item.creator_id
                        }
                        buckets.append(a_bucket_object)
                if len(buckets) > 0:
                    response = jsonify(buckets)
                    return make_response(response), 200
                else:
                    response = jsonify({
                        'message': 'Name does not exist',
                    })
                    return make_response(response), 200
            elif limit_to_return:
                if int(limit_to_return) > 0:
                    bucketlist_list = BucketList.query.filter_by(
                        creator_id=user_id).limit(int(limit_to_return))
                    buckets = []
                    for item in bucketlist_list:
                        a_bucket_object = {
                            'id': item.id,
                            'name': item.name,
                            'date_created': item.date_created,
                            'date_modified': item.date_modified,
                            'creator_id': item.creator_id
                        }
                        buckets.append(a_bucket_object)
                    response = jsonify(buckets)
                    return make_response(response), 200
                elif int(limit_to_return) == 0:
                    response = jsonify({'message': 'Zero returns no buckets'})
                    return make_response(response), 200
                else:
                    response = jsonify({
                        'message':
                        'The value entered on limit is not suitable'
                    })
                    return make_response(response), 400
            elif len(no_argument_given) == 0:
                list_of_bucketlist = BucketList.query.filter_by(
                    creator_id=user_id)
                bucketlist_objects_list = []
                for item in list_of_bucketlist:
                    a_bucket_object = {
                        'id': item.id,
                        'name': item.name,
                        'date_created': item.date_created,
                        'date_modified': item.date_modified,
                        'creator_id': item.creator_id,
                    }
                    bucketlist_objects_list.append(a_bucket_object)
                #converting the bucket list objec into JSON
                response = jsonify(bucketlist_objects_list)
                return make_response(response), 200
            else:
                response = jsonify({
                    'message':
                    'Wrong route given. Below are the right routes',
                    'GET all bucketlists for user':
                    '******',
                    'search particular bucketlist':
                    '/bucketlists/?q=<name of bucket>',
                    'enter a limt to bucket list returned':
                    'bucketlsits/?limit=<integer>'
                })
                return make_response(response), 400