diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-05-16 12:56:44 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-05-16 12:56:44 +0200 | 
| commit | 9c9796a5bd5ced3ebbe4e2b143906d0bce9f0024 (patch) | |
| tree | 079bd5fa43869e5794e66f4893c600a9f8e71c37 /chimere_rss/feeds.py | |
| parent | 8bfbb35bb37eb822f4967fc818d5592f40499fe6 (diff) | |
| download | Chimère-9c9796a5bd5ced3ebbe4e2b143906d0bce9f0024.tar.bz2 Chimère-9c9796a5bd5ced3ebbe4e2b143906d0bce9f0024.zip  | |
Fix RSS feeds for django 1.4 - reintegrate them in the main application
Diffstat (limited to 'chimere_rss/feeds.py')
| -rw-r--r-- | chimere_rss/feeds.py | 230 | 
1 files changed, 0 insertions, 230 deletions
diff --git a/chimere_rss/feeds.py b/chimere_rss/feeds.py deleted file mode 100644 index 454b6ef..0000000 --- a/chimere_rss/feeds.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>, -#                    Samuel Renard <renard.samuel_AT_gmailDOTcom>, -#                    Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program.  If not, see <http://www.gnu.org/licenses/>. - -# See the file COPYING for details. - -from django.utils.translation import ugettext as _ -from django.contrib.syndication.feeds import Feed -from django.contrib.syndication.feeds import FeedDoesNotExist -from chimere.main.models import Category, SubCategory, Marker, Area -from django.core.exceptions import ObjectDoesNotExist -from django.contrib.gis.geos import * - -from django.conf import settings - -class BaseFeed(Feed): -    """ -    Base feed for Chimere objects -    """ -    def item_link(self, item): -        ''' Return POI permalink ''' -        coord = item.point -        cat = 0 -        if item.categories.all() and item.categories.all()[0]: -            cat = item.categories.all()[0].pk -        return settings.BASE_URL + '?zoom=16&lat=%d&lon=%d¤t_feature=%d&\ -checked_categories=%d' % (coord.y, coord.x, item.id, cat) - -    def item_pubdate(self, item): -        """ -        Date of the Marker when it has been available -        """ -        return item.available_date - -    def description(self, obj): -        return "" - -class LatestPOIsByCategory(BaseFeed): -    ''' -    Last Points of interests by category in Feeds -    ''' -    title_template = "rss_title.html" -    description_template = "rss_descr.html" - -    def get_object(self, bits): -        """ -        Get extra url, after rss/category/ id of category -        """ -        if len(bits) != 1: -            raise ObjectDoesNotExist -        return Category.objects.get(id__exact=bits[0]) - -    def title(self, obj): -        """ -        Define the title of the feed -        """ -        return u"%s - %s" % (settings.PROJECT_NAME, obj.name) - -    def link(self, obj): -        """ -        Define the link of the feed. -        """ -        if not obj: -            raise FeedDoesNotExist -        return settings.BASE_URL + 'rss/category/' + str(obj.id) - -    def items(self, obj): -        """ -        Requests to marker where its category match the category is requested -        and its status is available -        This returns a list of the 15 last markers/POIs ordering by date -        """ -        q = Marker.objects.filter(status__exact='A', -            categories__category__id__exact=obj.id, -            available_date__isnull=False).order_by('-available_date')[:15] -        return q - -class LatestPOIsBySubCategory(BaseFeed): -    ''' -    Last Points of interests by SubCategory in Feeds -    ''' -    title_template = "rss_title.html" -    description_template = "rss_descr.html" - -    def get_object(self, bits): -        if len(bits) != 1: -            raise ObjectDoesNotExist -        return SubCategory.objects.get(id__exact=bits[0]) - -    def title(self, obj): -        return u"%s - %s - %s" % (settings.PROJECT_NAME, obj.category.name, -                                  obj.name) - -    def link(self, obj): -        if not obj: -            raise FeedDoesNotExist -        return settings.BASE_URL + 'rss/subcategory/' + str(obj.id) - -    def items(self, obj): -        q = Marker.objects.filter(categories__id__exact=obj.id, -            available_date__isnull=False, status__exact='A').order_by( -                                                        '-available_date')[:15] -        return q - -class LatestPOIs(BaseFeed): -    ''' -    Last Points of interests -    ''' -    title_template = "rss_title.html" -    description_template = "rss_descr.html" - -    def title(self): -        return settings.PROJECT_NAME + u" - " + _(u"Last points of interest") - -    def link(self): -        return settings.BASE_URL + 'rss/categories/' - -    def description(self): -        return _("Latest points of interest from ") + settings.PROJECT_NAME - -    def items(self): -        q = Marker.objects.filter(status__exact='A', -                  available_date__isnull=False).order_by('-available_date')[:15] -        return q - -class LatestPOIsByZone(BaseFeed): -    ''' -    Last Points of interests by zone by coordinates -    ''' -    title_template = "rss_title.html" -    description_template = "rss_descr.html" -    upper_left_lat = 0 -    upper_left_lon = 0 -    lower_right_lat = 0 -    lower_right_lon = 0 - -    def get_object(self, bits): -        """ -        Get the extra url. Parameters are the coordinates of the zone (the -        upper left and lower right points) -        """ -        if len(bits) != 1: -            raise ObjectDoesNotExist -        # Then define the upper right and lower left points -        coordinates = str(bits[0]).split('_') -        upper_left_lat = float(coordinates[0]) -        upper_left_lon = float(coordinates[1]) -        lower_right_lat = float(coordinates[2]) -        lower_right_lon = float(coordinates[3]) -        upper_right_lat = upper_left_lat -        upper_right_lon = lower_right_lon -        lower_left_lat = lower_right_lat -        lower_left_lon = upper_left_lon -        # Define a Polygon with the 4 points of the zone. -        areaBox = Polygon(((upper_left_lon, upper_left_lat),  -                            (upper_right_lon, upper_right_lat),  -                            (lower_right_lon, lower_right_lat), -                            (lower_left_lon, lower_left_lat), -                            (upper_left_lon, upper_left_lat)), -                            srid=settings.EPSG_DISPLAY_PROJECTION) -        return areaBox - -    def title(self, obj): -        return settings.PROJECT_NAME + u" - " +\ -               _(u"Last points of interest by area") - -    def link(self, obj): -        """ -        Define the link of the feed. It's the same url as we get in the method -        get_object -        """ -        if not obj: -            raise FeedDoesNotExist -        return settings.BASE_URL + 'rss/area/' \ -               + str(self.upper_left_lat) + '_' + str(self.upper_left_lon) + \ -               '_' + str(self.lower_right_lat) + '_' + str(self.lower_right_lon) - -    def items(self, obj): -        """ -        Request to return Markers WHERE there points are containes in the zone -        which is requested. -        This returns a list of the 15 last markers/POIs ordering by date -        """ -        q = Marker.objects.filter(point__contained=obj, status__exact='A', -                  available_date__isnull=False).order_by('-available_date')[:15] -        return q - -class LatestPOIsByZoneID(BaseFeed): -    ''' -    Last Points of interests by zone by id -    ''' -    title_template = "rss_title.html" -    description_template = "rss_descr.html" - -    def get_object(self, bits): -        if len(bits) != 1: -            raise ObjectDoesNotExist -        return Area.objects.get(id__exact=bits[0]) - -    def title(self, obj): -        return settings.PROJECT_NAME + u" - " + \ -              _(u"Last points of interest") + u" - " + obj.name - -    def link(self, obj): -        if not obj: -            raise FeedDoesNotExist -        return settings.BASE_URL + 'rss/areaid/' + str(obj.id) - -    def items(self, obj): -        sql = 'select * from "main_marker" where ' + obj.getIncludeSql() -        sql += ' and "main_marker".available_date is not null' -        sql += ' and "main_marker".status=\'A\'' -        sql += ' order by "main_marker".available_date desc limit 15' -        q = Marker.objects.raw(sql) -        return q  | 
