Skip to content
Snippets Groups Projects
SimpleServer.py 2.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • import RegularExpressionParser.Parser as parser
    import DataBase.mongoDB as db
    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(collection):
        if request.method == "GET":
            if collection == "books" or collection == "book":
                identifier = request.args.to_dict()
                print(identifier)
                print(type(identifier))
                return "200: find"
            elif collection == "authors" or collection == "author":
                print(request.url)
                return "200: find"
            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 not found"
        # elif request.method == "PUT":
    
    
    def search_document(identifiers):
        if len(identifiers) == 1:
            json_idt = parser.parse_query_to_json(identifiers[0])
            if re.search("^book.*", identifiers[0]):
                return db.get_documents_json(0, json_idt)
            else:
                return db.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 {}
            return db.get_documents_json(opt, exp)
        else:
            return "Error, unknown identifiers"
    
    
    if __name__ == "__main__":
        app.run()