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
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