import DataBase.mongoDB as DataBase import RegularExpressionParser.Parser as Parser import re from flask import Flask from flask import request from urllib.parse import urlparse, parse_qs app = Flask(__name__) # app.config["DEBUG"] = True @app.route("/", methods=['GET']) def home(): return "200: successfully connected to home page\n" @app.route("/api/<collection>/", methods=["GET", "PUT", "POST", "DELETE"]) def data_base(collection): if request.method == "GET": if collection == "book": url_parsed = urlparse(request.url) qs_parsed = parse_qs(url_parsed.query) # print(qs_parsed["id"]) if qs_parsed == {}: return DataBase.get_documents_json(0, {}) return search_document(["book.id:" + qs_parsed["id"][0]]) elif collection == "author": url_parsed = urlparse(request.url) qs_parsed = parse_qs(url_parsed.query) # print(type(qs_parsed["id"])) if qs_parsed == {}: return DataBase.get_documents_json(1, {}) return search_document(["author.id:" + qs_parsed["id"][0]]) elif collection == "search": url_parsed = urlparse(request.url) qs_parsed = parse_qs(url_parsed.query) print(qs_parsed) return search_document(qs_parsed["q"][0].split("&")) else: return "404: Unknown Collection to GET" elif request.method == "PUT": if request.headers["Content-Type"] != "application/json": return "415: content should be JSON file" json_update_info = request.json if collection == "book": opt = 0 elif collection == "author": opt = 1 else: return "404: Unknown Collection to GET" DataBase.update_dicts(opt, request.args.to_dict(), json_update_info) return "200: PUT succeeded" elif request.method == "POST": if request.headers["Content-Type"] != "application/json": return "415: content should be JSON file" json_file = request.json if collection == "books": DataBase.insert_dicts(json_file, 0) elif collection == "authors": DataBase.insert_dicts(json_file, 1) elif collection == "book": DataBase.insert_document(json_file, 0) elif collection == "author": DataBase.insert_document(json_file, 1) elif collection == "scrape": return "200" else: return "404: Unknown Collection to POST" return "201: POST succeeded" elif request.method == "DELETE": identifier = request.args.to_dict() print(identifier) if collection == "book": opt = 0 elif collection == "author": opt = 1 else: return "404: Unknown Collection to DELETE" DataBase.clean(opt, identifier) return "200: DELETE succeeded" def search_document(identifiers): if len(identifiers) == 1: json_idt = Parser.parse_query_to_json(identifiers[0]) print(json_idt) if re.search("^book.*", identifiers[0]): return DataBase.get_documents_json(0, json_idt) else: return DataBase.get_documents_json(1, json_idt) elif len(identifiers) == 3: if re.search("^book.*", identifiers[0]): if re.search("^author.*", identifiers[2]): print("Failed to find documentation: two statements are not pointing to the same collection") return {} else: opt = 0 else: if re.search("^book.*",identifiers[2]): print("Failed to find documentation: two statements are not pointing to the same collection") return {} else: opt = 1 json_idt1 = Parser.parse_query_to_json(identifiers[0]) json_idt2 = Parser.parse_query_to_json(identifiers[2]) if identifiers[1] == "AND": exp = {"$and": [json_idt1, json_idt2]} elif identifiers[1] == "OR": exp = {"$or": [json_idt1, json_idt2]} else: print("Failed to parse query: unknown operator for identifiers[1]") return {} print("exp:") print(exp) return DataBase.get_documents_json(opt, exp) else: return "Error, unknown identifiers" if __name__ == "__main__": app.run()