from buku import BukuDb from flask import Flask, jsonify, request import response from flask_api import status bukudb = BukuDb() app = Flask(__name__) @app.route('/api/tags', methods=['GET']) def get_tags(): tags = bukudb.get_tag_all() result = { 'tags': tags[0] } return jsonify(result) @app.route('/api/tags/', methods=['PUT']) def update_tag(tag): if request.method == 'PUT': result_flag = bukudb.replace_tag(tag, request.form.getlist('tags')) if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks', methods=['GET', 'POST', 'DELETE']) def bookmarks(): if request.method == 'GET': all_bookmarks = bukudb.get_rec_all() result = { 'bookmarks': [] } for bookmark in all_bookmarks: result_bookmark = { 'url': bookmark[1], 'title': bookmark[2], 'tags': list(filter(None, bookmark[3].split(','))), 'description': bookmark[4] } result['bookmarks'].append(result_bookmark) return jsonify(result) elif request.method == 'POST': result_flag = bukudb.add_rec(request.form['url'], request.form['title'], request.form['tags'], request.form['description']) if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} elif request.method == 'DELETE': result_flag = bukudb.cleardb() if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks/refresh', methods=['POST']) def refresh_bookmarks(): if request.method == 'POST': print(request.form['index']) print(request.form['threads']) result_flag = bukudb.refreshdb(request.form['index'], request.form['threads']) if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks/', methods=['GET', 'PUT', 'DELETE']) def bookmark_api(id): try: id = int(id) except ValueError: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} if request.method == 'GET': bookmark = bukudb.get_rec_by_id(id) if bookmark is not None: result = { 'url': bookmark[1], 'title': bookmark[2], 'tags': list(filter(None, bookmark[3].split(','))), 'description': bookmark[4] } return jsonify(result) else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} elif request.method == 'PUT': result_flag = bukudb.update_rec(id, request.form['url'], request.form.get('title'), request.form['tags'], request.form['description']) if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} else: result_flag = bukudb.delete_rec(id) if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks//refresh', methods=['POST']) def refresh_bookmark(id): try: id = int(id) except ValueError: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} if request.method == 'POST': result_flag = bukudb.refreshdb(id, request.form['threads']) if result_flag: return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks//tiny', methods=['GET']) def get_tiny_url(id): try: id = int(id) except ValueError: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} if request.method == 'GET': shortened_url = bukudb.tnyfy_url(id) if shortened_url is not None: result = { 'url': shortened_url } return jsonify(result) else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks//long', methods=['GET']) def get_long_url(id): try: id = int(id) except ValueError: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} if request.method == 'GET': bookmark = bukudb.get_rec_by_id(id) if bookmark is not None: result = { 'url': bookmark[1], } return jsonify(result) else: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks//', methods=['GET', 'PUT', 'DELETE']) def bookmark_range_operations(starting_id, ending_id): try: starting_id = int(starting_id) ending_id = int(ending_id) except ValueError: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} max_id = bukudb.get_max_id() if starting_id > max_id or ending_id > max_id: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} if request.method == 'GET': result = { 'bookmarks': {} } for i in range(starting_id, ending_id + 1, 1): bookmark = bukudb.get_rec_by_id(i) bookmarks[i] = { 'url': bookmark[1], 'title': bookmark[2], 'tags': list(filter(None, bookmark[3].split(','))), 'description': bookmark[4] } return jsonify(result) elif request.method == 'DELETE': for i in range(starting_id, ending_id + 1, 1): result_flag = bukudb.delete_rec(i) if result_flag is False: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} elif request.method == 'PUT': for i in range(starting_id, ending_id + 1, 1): updated_bookmark = request.form[str(i)] result_flag = bukudb.update_rec(i, updated_bookmark['url'], updated_bookmark['title'], updated_bookmark['tags'], updated_bookmark['description']) if result_flag is False: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} @app.route('/api/bookmarks/search', methods=['GET', 'DELETE']) def search_bookmarks(): keywords = request.form.getlist('keywords') all_keywords = request.form.get('all_keywords') deep = request.form.get('deep') regex = request.form.get('regex') all_keywords = False if all_keywords is None else all_keywords deep = False if deep is None else deep regex = False if regex is None else regex all_keywords = all_keywords if type(all_keywords) == bool else all_keywords.lower() == 'true' deep = deep if type(deep) == bool else deep.lower() == 'true' regex = regex if type(regex) == bool else regex.lower() == 'true' results = {'bookmarks': []} found_bookmarks = bukudb.searchdb(keywords, all_keywords, deep, regex) if request.method == 'GET': if bookmarks is not None: for bookmark in found_bookmarks: result_bookmark = { 'id': bookmark[0], 'url': bookmark[1], 'title': bookmark[2], 'tags': list(filter(None, bookmark[3].split(','))), 'description': bookmark[4] } results['bookmarks'].append(result_bookmark) return jsonify(results) elif request.method == 'DELETE': if found_bookmarks is not None: for bookmark in found_bookmarks: result_flag = bukudb.delete_rec(bookmark[0]) if result_flag is False: return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \ {'ContentType': 'application/json'} return jsonify(response.response_template['success']), status.HTTP_200_OK, \ {'ContentType': 'application/json'} def run(): app.run(debug=True) run()