Skip to content
Snippets Groups Projects
server.py 4.43 KiB
Newer Older
  • Learn to ignore specific revisions
  • Ismail Moumni's avatar
    Ismail Moumni committed
    # authors: Julien DAVID & Ismail MOUMNI
    
    Ismail-Moumni's avatar
    Ismail-Moumni committed
    import socket
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    import json
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    import os
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    import sys
    # import database as db
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    sys.path.append(os.path.realpath('../softwares/'))
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    __RDOS_Dict__ = {"ismail": "moumni"}
    
    
    # tools List
    __RDOS_Tool__ = []
    
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    class RdosServer:
    
        # Function server_conn creates a socket and listens on port 9393
        # Function input address : SERVER IP ADRESS & Port server Port
        # Function output query send from client to server
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        def server_conn(address, PORT):
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
                serv.bind((address, PORT))
                # Listening to 5 CLients
                serv.listen(5)
                # accepting the connection from client and getting client IP
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                conn, addr = serv.accept()
    
    Ismail Moumni's avatar
    Ismail Moumni committed
            with conn:
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                print('Connexion acceptee depuis l IP : ', addr)
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                # Receiving Data from Client
                data = conn.recv(4096)
                query = (json.loads(data.decode('utf-8')))
                print(query)
                if query_valid(query):
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                    Tool = __RDOS_Tool__
                    dt_js = json.dumps(send_param_client(__RDOS_Dict__, Tool))
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                    print(dt_js)
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                    conn.send(bytes((dt_js), "utf-8"))
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                    conn.close()
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    
    
    # Function query_valid matches the query send from client side
    #  with the the parameter dict
    # Function input dictionnary from client
    # Function output boolean true if match else False
    def query_valid(data: dict):
        if 'parameters' in data:
    
    Ismail Moumni's avatar
    Ismail Moumni committed
            if (data['parameters'] == 'request') & (len(data) <= 2):
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                return True
            return False
    
    
    # Function send_param_client send a dictionnary containing parameters
    #  needed to add a query to db
    # Function exmaple s = {"ARGUMENTS","Tools":"List of Tools" }
    # Function input takes dictionnary and a list of tools
    # Function output returns a new dictionnary containing arguments
    # # for db query and list of tools
    def send_param_client(__RDOS_Dict__: dict, __RDOS_Tools__: list):
        dict_cl = {}
        if len(__RDOS_Dict__) > 0:
            dict_cl["outils"] = (__RDOS_Tools__)
            s = {**__RDOS_Dict__, **dict_cl}
            return s
    
    
    # Function json_loads changes a json file into a Dict
    # Function json_loads returns a Dictinnary
    def json_to_dict(js):
        data = json.loads(js)
        return data
    
    
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # def db_req(tool: str):
        # tool_dict = db.getParameters(tool)
        # return tool_dict
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    
    
    def verif_param(data: dict):
        # Tuple
        # s = db.getParameters(data['tool'])
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        s = ({"id": "", "name": ""}, {"id": "15"})
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        if s is not None:
            try:
                gen = s[0]
                gen_default = s[1]
                if match_query_dict(gen, data):
                    for a in data:
                        if data[a] == "":
                            data[a] = gen_default[a]
                    return data
            except Exception as msg:
                print("Error : " % msg)
        else:
            raise Exception("Error from DB")
    
    
    def match_query_dict(biblio: dict, data: dict):
        if biblio is not None and data is not None:
            return biblio.keys() == data.keys()
        else:
            raise ValueError("Error Dict Value ")
    
    
    # Function match_generator_dict Matches Dictionnary with a list
    # Function input 2 arguments Dictionnary and query from Server
    # Function output true if dictionnary keys match list elements else false
    def match_generator_dict(biblio: dict, Genereator: list):
        for a in Genereator:
            for b in biblio.keys():
                if a != b:
                    return False
            return True
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    if __name__ == '__main__':
        data = {
    
    Ismail Moumni's avatar
    Ismail Moumni committed
            "sacha": "PokeBall",
    
    Ismail Moumni's avatar
    Ismail Moumni committed
            "internet": "internet",
            "glossary": {
                "title": "example glossary",
                "GlossDiv": {
                    "title": "S",
                    "GlossList": {
                        "GlossEntry": {
                            "ID": "SGML",
                            "SortAs": "SGML",
                            "GlossTerm": "Standard Generalized Markup Language",
                            "Acronym": "SGML",
                            "Abbrev": "ISO 8879:1986",
                            "GlossDef": {
                                "para": "A meta-markup language.",
                                "GlossSeeAlso": ["GML", "XML"]
                            },
                            "GlossSee": "markup"
                        }
                    }
                }
            }
        }
        data1 = {"ll": "s", "ismail": "ss"}
        print(match_query_dict(data, data))
        print(verif_param({"name": ""}))
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        RdosServer.server_conn('127.0.0.1', 9393)