コード例 #1
0
    def write( self, channels):
        """
        Creates a XML document containing metadata for each 
        channel object in the "channels" parameter, which 
        should be a list of channel objects.

        OPML 2.0 specification: http://www.opml.org/spec2

        Returns True on success or False when there was an 
        error writing the file.
        """
        if self.filename is None:
            return False

        doc = xml.dom.minidom.Document()

        opml = doc.createElement('opml')
        opml.setAttribute('version', '2.0')
        doc.appendChild(opml)

        head = doc.createElement( 'head')
        head.appendChild( self.create_node( doc, 'title', 'gPodder subscriptions'))
        head.appendChild( self.create_node( doc, 'dateCreated', formatdate(localtime=True)))
        opml.appendChild( head)

        body = doc.createElement( 'body')
        for channel in channels:
            body.appendChild( self.create_outline( doc, channel))
        opml.appendChild( body)

        try:
            data = doc.toprettyxml(encoding='utf-8', indent='    ', newl=os.linesep)
            # We want to have at least 512 KiB free disk space after
            # saving the opml data, if this is not possible, don't 
            # try to save the new file, but keep the old one so we
            # don't end up with a clobbed, empty opml file.
            FREE_DISK_SPACE_AFTER = 1024*512
            path = os.path.dirname(self.filename) or os.path.curdir
            available = util.get_free_disk_space(path)
            if available < 2*len(data)+FREE_DISK_SPACE_AFTER:
                # On Windows, if we have zero bytes available, assume that we have
                # not had the win32file module available + assume enough free space
                if not gpodder.ui.win32 or available > 0:
                    logger.error('Not enough free disk space to save channel list to %s', self.filename)
                    return False
            fp = open(self.filename+'.tmp', 'w')
            fp.write(data)
            fp.close()
            util.atomic_rename(self.filename+'.tmp', self.filename)
        except:
            logger.error('Could not open file for writing: %s', self.filename,
                    exc_info=True)
            return False

        return True
コード例 #2
0
    def save(self, filename=None):
        if filename is None:
            filename = self.__filename

        logger.info('Flushing settings to disk')

        try:
            fp = open(filename+'.tmp', 'wt')
            fp.write(repr(self.__json_config))
            fp.close()
            util.atomic_rename(filename+'.tmp', filename)
        except:
            logger.error('Cannot write settings to %s', filename)
            util.delete_file(filename+'.tmp')
            raise

        self.__save_thread = None
コード例 #3
0
ファイル: config.py プロジェクト: mrnejc/gpodder
    def save(self, filename=None):
        if filename is None:
            filename = self.__filename

        logger.info("Flushing settings to disk")

        try:
            fp = open(filename + ".tmp", "wt")
            fp.write(repr(self.__json_config))
            fp.close()
            util.atomic_rename(filename + ".tmp", filename)
        except:
            logger.error("Cannot write settings to %s", filename)
            util.delete_file(filename + ".tmp")
            raise

        self.__save_thread = None
コード例 #4
0
    def save(self, filename=None):
        if filename is None:
            filename = self.__filename

        logger.info('Flushing settings to disk')

        try:
            # revoke unix group/world permissions (this has no effect under windows)
            umask = os.umask(0o077)
            with open(filename + '.tmp', 'wt') as fp:
                fp.write(repr(self.__json_config))
            util.atomic_rename(filename + '.tmp', filename)
        except:
            logger.error('Cannot write settings to %s', filename)
            util.delete_file(filename + '.tmp')
            raise
        finally:
            os.umask(umask)

        self.__save_thread = None