Read the ini-style topology file using ConfigObj

        :return config: Topology parsed by :py:mod:`ConfigObj`
        :rtype: ConfigObj

def read_topology(self):
        """
        Read the ini-style topology file using ConfigObj

        :return config: Topology parsed by :py:mod:`ConfigObj`
        :rtype: ConfigObj
        """
        configspec = resource_stream(__name__, 'configspec')
        try:
            handle = open(self._topology)
            handle.close()
            try:
                config = ConfigObj(self._topology,
                                   configspec=configspec,
                                   raise_errors=True,
                                   list_values=False,
                                   encoding='utf-8')
            except SyntaxError:
                logging.error('Error loading .net file')
                sys.exit(1)
        except IOError:
            logging.error('Cannot open topology file')
            sys.exit(1)

        vtor = Validator()
        res = config.validate(vtor, preserve_errors=True)
        if res:
            logging.debug('Validation passed')
        elif not res:
            for entry in flatten_errors(config, res):
                # each entry is a tuple
                (section_list, key, error) = entry
                if key is not None:
                    section_list.append(key)
                else:
                    section_list.append('[missing section]')
                section_string = ', '.join(section_list)

                if error is False:
                    error = 'Missing value or section'
                print(section_string, ' = ', error)
                input('Press ENTER to continue')
                sys.exit(1)

        configspec.close()
        return config