Soporte de generadores RSS personalizados en Nikola (II)

En un artículo anterior, Soporte de generadores RSS personalizados en Nikola, comentaba las dificultades para sustituir el generador RSS nativo de Nikola. El resultado propuesto requiere copiar un fichero de Nikola, modificarlo y alterar otro.

He discutido el tema con los desarrolladores de Nikola durante diez meses, sin éxito. Su propuesta es un auténtico chanchullo, pero al menos no requiere que modifique el código de Nikola cada vez que actualizo. Si quieres leer mi opinión del asunto...

Ahora mismo cuando actualizo Nikola solo tengo que copiar el código interno que genera el RSS y aplicar el parche explicado en mi artículo anterior. En mi configuración Nikola tengo esto:

# Plugins you don't want to use. Be careful :-)
# DISABLED_PLUGINS = ["render_galleries"]
DISABLED_PLUGINS = ["generate_rss"]

# jcea@jcea.es - 20150320
# UGLY HACK: https://github.com/getnikola/nikola/issues/1307
# https://github.com/getnikola/nikola/commit/8999de0d100d99027bdb7386eec7f0e9e9cefdf1#commitcomment-6498655
GENERATE_RSS = 'my version :-p'

Os adjunto los cambios a aplicar en el fichero RSS ya que la versión antigua no se puede utilizar limpiamente debido a cambios internos en el código:

 --- ../../../virtualenv-nikola/lib/python2.7/site-packages/nikola/plugins/task/rss.py   2015-03-20 12:52:33.383174000 +0100
 +++ plugins/rss.py  2015-03-20 13:44:52.463174897 +0100
 @@ -26,6 +26,8 @@

  from __future__ import unicode_literals, print_function
  import os
 +import calendar
 +import copy
  try:
      from urlparse import urljoin
  except ImportError:
 @@ -38,7 +40,7 @@
  class GenerateRSS(Task):
      """Generate RSS feeds."""

 -    name = "generate_rss"
 +    name = "generate_rss_jcea"

      def set_site(self, site):
          site.register_path_handler('rss', self.rss_path)
 @@ -82,10 +84,26 @@
                  deps += post.deps(lang)
                  deps_uptodate += post.deps_uptodate(lang)

 +            # No debemos modificar los posts originales, porque
 +            # afectamos a pasos posteriores
 +            for i, post in enumerate(posts) :
 +                slug = post.meta[u'es'][u'slug']
 +                slug = slug[:slug.find('-')]
 +                dia = int(slug[-2:])
 +                anho = int(slug[:4])
 +                mes = calendar.month_name[int(slug[4:-2])]
 +                r = "%d de %s de %d" %(dia, mes, anho)
 +                post = copy.copy(post)  # Shallow copy
 +                posts[i] = post
 +                meta = post.meta.copy()  # Es un defaultdict
 +                meta[u'es'] = post.meta[u'es'].copy()  # Es un defaultdict
 +                post.meta = meta
 +                post.meta[u'es'][u'title'] += " (%s)" %r
 +
              feed_url = urljoin(self.site.config['BASE_URL'], self.site.link("rss", None, lang).lstrip('/'))

              task = {
 -                'basename': 'generate_rss',
 +                'basename': 'generate_rss_jcea',
                  'name': os.path.normpath(output_name),
                  'file_dep': deps,
                  'targets': [output_name],