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