Ejemplo n.º 1
0
    def generate_rss(self, rss_file=None, data=None):
        """
        Generate RSS file from news

        :param rss_file: Path to file rss.xml
        :type rss_file: str
        :param data: Data to create RSS from
        :type data: dict data['news'] = { ... }
        :return: Boolean
        :rtype: bool
        :raises SystemExit: If 'news' key is not found in 'data' dict
        :raises SystemExit: If rss file cannot be opened
        """
        if rss_file is not None:
            Utils.verbose("[rss] rss_file set to %s" % rss_file)
            self.rss_file = rss_file

        if data is None:
            data = self.get_news()
        elif 'news' not in data:
            Utils.error("Could not find 'news' key in data")
        if len(data['news']) == 0:
            Utils.warn("No data to display")
            return True

        items = []
        try:
            for new in data['news']:
                item = Item(title=new['title'],
                            description=new['text'],
                            author=self.config.get('RSS', 'feed.author'),
                            guid=Guid(self.config.get('RSS', 'feed.news.link') + '#' + str(new['item'])),
                            pubDate=datetime.strptime(new['date'],
                                                      self.config.get('RSS', 'rss.date.format')
                                                      .replace('%%', '%'))
                            )
                items.append(item)
            feed = Feed(title=self.config.get('RSS', 'feed.title'),
                        link=self.config.get('RSS', 'feed.link'),
                        description=self.config.get('RSS', 'feed.description'),
                        language=self.config.get('RSS', 'feed.language'),
                        lastBuildDate=datetime.now(),
                        items=items)
            if self.fh is None:
                self.fh = open(self.rss_file, 'w')
            Utils.uprint(feed.rss(), to=self.fh)
            if self.rss_file is not None:
                self.fh.close()
        except (NoOptionError, NoSectionError) as err:
            Utils.error("Option missing in config file: %s" % str(err))
        except (OSError, IOError) as err:
            Utils.error("Can't open file %s: %s" % (self.rss_file, str(err)))
        return True
Ejemplo n.º 2
0
    def write(self, template=None, data=None):
        """
        Print template 'data' to stdout using template file 'template'.

        'data' arg can be left None, this way method can be used to render file
        from scratch

        :param template: Template file name
        :type template: str
        :param data: Template data
        :type data: dict
        :return: True, throws on error
        :rtype: bool
        :raises SystemExit: If 'template' is None
        :raises SystemExit: If 'template' is not found
        :raises SystemExit: If 'template' has a syntax error in it
        :raises SystemExit: If 'output' file cannot be opened
        """
        if template is None:
            Utils.error("A template name is required")
        try:
            template = self.env.get_template(template)
        except TemplateNotFound as err:
            Utils.error("Template %s not found in %s" % (err, self.template_dir))
        except TemplateSyntaxError as err:
            Utils.error("Syntax error found in template '%s', line %d: %s" % (err.name, err.lineno, err.message))

        if self.output is None:
            ofile = sys.stdout
        else:
            try:
                ofile = open(self.output, "w")
            except IOError as err:
                Utils.error("Can't open %s: %s" % (self.output, str(err)))
        Utils.uprint(template.render(data), to=ofile)
        return True