code: def as_dict(self):
          
          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
docs: Returns a copy of the configuration dictionary. Changes in this should not reflect on the original
          object.
  
          :return: Configuration dictionary.
          :rtype: dict