"""The 'turbogears.feed' package is deprecated in TurboGears >= 1.1.

It will be REMOVED in TurboGears >= 1.5!

Please use the TurboFeeds extension <http://python.org/pypi/TurboFeeds> instead.

"""
import time
from warnings import warn

import cherrypy
import turbogears


class FeedController(turbogears.controllers.Controller):
    """ Object for generating feeds in multiple formats """

    def __init__(self, default="atom1.0"):
        warnings.warn(__doc__, DeprecationWarning)
        self.default = default
        self.formats = ["atom1.0", "atom0.3", "rss2.0"]

    def date_to_3339(self, date):
        date = date.strftime("%Y-%m-%dT%H:%M:%SZ")
        return date

    def date_to_822(self, date):
        date = date.strftime("%a, %d %b %Y %H:%M:%S GMT")
        return date

    def depr_entrys(self, feed):
        if "entrys" in feed:
            warn("You should use 'entries' instead of 'entrys'",
                DeprecationWarning, 3)
            feed['entries'] = feed['entrys']
            del feed['entrys']

    def format_dates(self, feed, format):
        if format == 822:
            convert_date = self.date_to_822
        else:
            convert_date = self.date_to_3339
        if feed.has_key('updated'):
            feed["updated"] = convert_date(feed["updated"])
        self.depr_entrys(feed)
        for entry in feed['entries']:
            if entry.has_key('updated'):
                entry["updated"] = convert_date(entry["updated"])
            if entry.has_key('published'):
                entry["published"] = convert_date(entry["published"])
        return feed

    def index(self, **kwargs):
        turbogears.redirect("%s" % self.default, kwargs)
    index = turbogears.expose()(index)

    def atom1_0(self, **kwargs):
        feed = self.get_feed_data(**kwargs)
        self.format_dates(feed, 3339)
        feed["href"] = turbogears.url("/") + "atom1.0"
        self.depr_entrys(feed)
        return feed
    atom1_0 = turbogears.expose(template="kid:turbogears.feed.atom1_0",
                    format="xml", content_type="application/atom+xml")(atom1_0)

    def atom0_3(self, **kwargs):
        feed = self.get_feed_data(**kwargs)
        self.format_dates(feed, 3339)
        feed["href"] = turbogears.url("/") + "atom0.3"
        self.depr_entrys(feed)
        return feed
    atom0_3 = turbogears.expose(template="kid:turbogears.feed.atom0_3",
                    format="xml", content_type="application/atom+xml")(atom0_3)

    def rss2_0(self, **kwargs):
        feed = self.get_feed_data(**kwargs)
        self.format_dates(feed, 822)
        self.depr_entrys(feed)
        return feed
    rss2_0 = turbogears.expose(template="kid:turbogears.feed.rss2_0",
                    format="xml", content_type="application/rss+xml")(rss2_0)
