Returns a copy of the configuration dictionary. Changes in this should not reflect on the original
        object.

        :return: Configuration dictionary.
        :rtype: dict

def as_dict(self):
        """
        Returns a copy of the configuration dictionary. Changes in this should not reflect on the original
        object.

        :return: Configuration dictionary.
        :rtype: dict
        """
        self.clean()
        d = OrderedDict()
        all_props = self.__class__.CONFIG_PROPERTIES
        for attr_name, attr_config in six.iteritems(all_props):
            value = self._config[attr_name]
            attr_type = attr_config.attr_type
            if attr_type:
                if value:
                    if issubclass(attr_type, list):
                        if issubclass(attr_type, NamedTupleList):
                            d[attr_name] = [i._asdict() for i in value]
                        else:
                            d[attr_name] = value[:]
                    elif attr_type is dict:
                        d[attr_name] = dict(value)
            elif value is not NotSet:
                d[attr_name] = value
        return d