docs: def save(self, cachedir=None, cfgstr=None, verbose=VERBOSE, quiet=QUIET,
               ignore_keys=None):
          """
          saves query result to directory
          """
          fpath = self.get_fpath(cachedir, cfgstr=cfgstr)
          if verbose:
              print('[Cachable] cache save: %r' % (basename(fpath),))
  
          if hasattr(self, '__getstate__'):
              statedict = self.__getstate__()
          else:
              statedict = self.__dict__
  
          if ignore_keys is None:
              save_dict = statedict
          else:
              save_dict = {key: val
                           for (key, val) in six.iteritems(statedict)
                           if key not in ignore_keys}
  
          util_io.save_data(fpath, save_dict)
          return fpath