code: def parse(self, data):
          
          graph = self._init_graph()
          if 'topology' not in data:
              raise ParserError('Parse error, "topology" key not found')
          elif 'mid' not in data:
              raise ParserError('Parse error, "mid" key not found')
  
          # determine version and revision
          if 'config' in data:
              version_info = data['config']['olsrdVersion'].replace(' ', '').split('-')
              self.version = version_info[1]
              # try to get only the git hash
              if 'hash_' in version_info[-1]:
                  version_info[-1] = version_info[-1].split('hash_')[-1]
              self.revision = version_info[-1]
  
          # process alias list
          alias_dict = {}
          for node in data['mid']:
              local_addresses = [alias['ipAddress'] for alias in node['aliases']]
              alias_dict[node['ipAddress']] = local_addresses
  
          # loop over topology section and create networkx graph
          for link in data['topology']:
              try:
                  source = link['lastHopIP']
                  target = link['destinationIP']
                  cost = link['tcEdgeCost']
                  properties = {
                      'link_quality': link['linkQuality'],
                      'neighbor_link_quality': link['neighborLinkQuality']
                  }
              except KeyError as e:
                  raise ParserError('Parse error, "%s" key not found' % e)
              # add nodes with their local_addresses
              for node in [source, target]:
                  if node not in alias_dict:
                      continue
                  graph.add_node(node, local_addresses=alias_dict[node])
              # skip links with infinite cost
              if cost == float('inf'):
                  continue
              # original olsrd cost (jsoninfo multiplies by 1024)
              cost = float(cost) / 1024.0
              # add link to Graph
              graph.add_edge(source, target, weight=cost, **properties)
          return graph
docs: Converts a dict representing an OLSR 0.6.x topology
          to a NetworkX Graph object, which is then returned.
          Additionally checks for "config" data in order to determine version and revision.