Skip to content
Snippets Groups Projects
SimpleServer.py 4.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)
    
                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)
    
                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()