          logger.debug("Processed raw option '%s' to list %s for section '%s', option '%s'",
                       raw_option, retval, section, option)
          return retval
  
      def get_config_file(self, configfile):
          """ Return the config file from the calling folder or the provided file """
          if configfile is not None:
              if not os.path.isfile(configfile):
                  err = "Config file does not exist at: {}".format(configfile)
                  logger.error(err)
                  raise ValueError(err)
 
</s> remove                 err = "Config file does not exist at: {}".format(configfile)
 </s> add                 err = f"Config file does not exist at: {configfile}" </s> remove         retval = os.path.join(os.path.dirname(folder), "config", "{}.ini".format(fname))
 </s> add         retval = os.path.join(os.path.dirname(folder), "config", f"{fname}.ini") </s> remove     def check_config_change(self):
        """ Check whether new default items have been added or removed
            from the config file compared to saved version """
 </s> add     def _check_config_change(self) -> bool:
        """ Check whether new default items have been added or removed from the config file
        compared to saved version

        Returns
        -------
        bool
            ``True`` if a config option has been added or removed
        """ </s> remove     def create_default(self):
 </s> add     def _create_default(self) -> None: </s> remove     def add_section(self, title=None, info=None):
        """ Add a default section to config file """
 </s> add     def add_section(self, title: str, info: str) -> None:
        """ Add a default section to config file

        Parameters
        ----------
        title: str
            The title for the section
        info: str
            The helptext for the section
        """
    def _get_config_file(self, configfile: Optional[str]) -> str:
        """ Return the config file from the calling folder or the provided file

        Parameters
        ----------
        configfile: str or ``None``
            Path to a config file. ``None`` for default location.

        Returns
        -------
        str
            The full path to the configuration file
        """
          logger.debug("Processed raw option '%s' to list %s for section '%s', option '%s'",
                       raw_option, retval, section, option)
          return retval
  
    def _get_config_file(self, configfile: Optional[str]) -> str:
        """ Return the config file from the calling folder or the provided file

        Parameters
        ----------
        configfile: str or ``None``
            Path to a config file. ``None`` for default location.

        Returns
        -------
        str
            The full path to the configuration file
        """
    def _get_config_file(self, configfile: Optional[str]) -> str:
        """ Return the config file from the calling folder or the provided file

        Parameters
        ----------
        configfile: str or ``None``
            Path to a config file. ``None`` for default location.

        Returns
        -------
        str
            The full path to the configuration file
        """
          if configfile is not None:
              if not os.path.isfile(configfile):
                  err = "Config file does not exist at: {}".format(configfile)
                  logger.error(err)
                  raise ValueError(err)
keep keep keep keep replace replace keep keep keep keep keep
 Preview - Allow mask color/opacity configuration
  - typing: lib.config
  - docs: lib.config
  - bugfix: popup_configure - keep assets on top 
lib/config.py