Skip to content
Snippets Groups Projects
server.py 4.68 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
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    import database.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's avatar
    Ismail Moumni committed
    
    # 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
            while True:
                if conn:
                    print('Connexion acceptee depuis l IP : ', addr)
                    # Receiving Data from Client
                    data = conn.recv(4096)
                    query = (json.loads(data.decode('utf-8')))
                    print(query)
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                    match = verif_param(query)
                    if match == query:
                        print("ok")
                        conn.send(bytes(json.dumps(match), "utf-8"))
                    else:
                        print('Erreur query : ')
                        conn.send(bytes(json.dumps(match), "utf-8"))
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function query_valwid matches the query send from client side
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    #  with the the parameter dict
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function input dictionary from client
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # 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'] != '') & (len(data) <= 2):
    
    Ismail Moumni's avatar
    Ismail Moumni committed
                return True
    
    Ismail Moumni's avatar
    Ismail Moumni committed
            else:
                return False
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function send_param_client send a Dict containing parameters
    # needed to add a query to db
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function exmaple s = {"ARGUMENTS","Tools":"List of Tools" }
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function input takes dictionary and a list of tools
    # Function output returns a new dictionary containing arguments
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # # for db query and list of tools
    def send_param_client(__RDOS_Dict__: dict, __RDOS_Tools__: list):
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        req = db.getParameters()
        return req
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    
    
    # Function json_loads changes a json file into a Dict
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function json_loads returns a dictionary
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    def json_to_dict(js):
        data = json.loads(js)
        return data
    
    
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function db_req sends a request to get parameters of tools from database
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function takes a dictionary for input
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function return a Dict containing tool parameters and default parameters
    def db_req(tool: dict):
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        tool_dict = db.getParameters(tool)
        return tool_dict
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function match_query_dict matches two dictionaries
    # Function input takes 2 dictionaries to match
    # Function output return trur if dictionaries matches else raise a value error exception
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    def match_query_dict(biblio: dict, data: dict):
        if biblio is not None and data is not None:
            return biblio.keys() == data.keys()
        else:
    
    Ismail Moumni's avatar
    Ismail Moumni committed
            raise ValueError("Error Dict Values ")
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    # Function match_generator_dict Matches dictionary with a list
    # Function input 2 arguments dictionary and query from Server
    # Function output true if dictionary keys match list elements else false
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    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
    # Function verif_param verifies json send from client to server by matching it with database query
    # Function input takes a dictionary
    # Function output returns query if it matches with database query keys if not it raises an error
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    def verif_param(data: dict):
        tool = data.keys().strip('[]')
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        s = db.getParameters(data['tool'])
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        parameter = {}
        query = {}
        if s is not None:
            gen = s[0]
            gen_default = s[1]
            parameter = gen_default
            query = data.get(tool)
            if match_query_dict(gen.get(tool), query):
                for a in query:
                    if query[a] == "":
                        print(query[a])
                        query[a] = parameter.get(a)
                return query
            else:
                raise Exception("Query Doesn't match")
        else:
            raise Exception("Error Database")
    
    
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    '''
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    if __name__ == '__main__':
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        tool = 'Regal'
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        # sa = ({'Regal': {'size': '', 'asize': '', 'outputf': '', 'number': '', 'comp': '', 'min': '', 'con': ''}},
        # {'size': '10', 'asize': '2', 'outputf': '', 'number': '1', 'comp': 'yes', 'min': '', 'con': ''})
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        # print(verif_param(d, data))
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        s = {'Regal': {'size': 'qsd', 'asize': '', 'outputf': 'qsd', 'number': 'ss',
        'comp': 'qsd', 'min': 'sqsd', 'con': 'qsd'}}
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        #  print(s.get('Regal'))
        print(s.keys())
    
    Ismail Moumni's avatar
    Ismail Moumni committed
        data_test1 = '{"parameters":"request"}'
        data_load = json.loads(data_test1)
        print(query_valid(data_load) is True)
    
    Ismail Moumni's avatar
    Ismail Moumni committed
    '''