def readGraph(edgeList, nodeList = None, directed = False, idKey = 'ID', eSource = 'From', eDest = 'To'):
    progArgs = (0, "Starting to reading graphs")
    if metaknowledge.VERBOSE_MODE:
        progKwargs = {'dummy' : False}
    else:
        progKwargs = {'dummy' : True}
    with _ProgressBar(*progArgs, **progKwargs) as PBar:
        if directed:
            grph = nx.DiGraph()
        else:
            grph = nx.Graph()
        if nodeList:
            PBar.updateVal(0, "Reading " + nodeList)
            f = open(os.path.expanduser(os.path.abspath(nodeList)))
            nFile = csv.DictReader(f)
            for line in nFile:
                vals = line
                ndID = vals[idKey]
                del vals[idKey]
                if len(vals) > 0:
                    grph.add_node(ndID, **vals)
                else:
                    grph.add_node(ndID)
            f.close()
        PBar.updateVal(.25, "Reading " + edgeList)
        f = open(os.path.expanduser(os.path.abspath(edgeList)))
        eFile = csv.DictReader(f)
        for line in eFile:
            vals = line
            eFrom = vals[eSource]
            eTo = vals[eDest]
            del vals[eSource]
            del vals[eDest]
            if len(vals) > 0:
                grph.add_edge(eFrom, eTo, **vals)
            else:
                grph.add_edge(eFrom, eTo)
        PBar.finish("{} nodes and {} edges found".format(len(grph.nodes()), len(grph.edges())))
        f.close()
        return grph