Skip to content

Commit

Permalink
Better format Geo and GeoEntry. Add test for Geo Extension
Browse files Browse the repository at this point in the history
  • Loading branch information
bobbrez committed Sep 12, 2017
1 parent c0a1acc commit ae5759d
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 12 deletions.
23 changes: 14 additions & 9 deletions feedgen/ext/geo.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
from lxml import etree
# -*- coding: utf-8 -*-
'''
feedgen.ext.geo
~~~~~~~~~~~~~~~~~~~
Extends the FeedGenerator to produce Simple GeoRSS feeds.
:copyright: 2017, Bob Breznak <[email protected]>
:license: FreeBSD and LGPL, see license.* for more details.
'''

from feedgen.ext.base import BaseExtension

class GeoExtension(BaseExtension):
def __init__(self):
self.__point__ = None
'''FeedGenerator extension for Simple GeoRSS.
'''

def extend_ns(self):
return { 'georss' : 'http://www.georss.org/georss' }

def extend_rss(self, rss_feed):
return rss_feed

def extend_atom(self, atom_feed):
return atom_feed
38 changes: 35 additions & 3 deletions feedgen/ext/geo_entry.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,32 @@
# -*- coding: utf-8 -*-
'''
feedgen.ext.geo_entry
~~~~~~~~~~~~~~~~~~~
Extends the FeedGenerator to produce Simple GeoRSS feeds.
:copyright: 2017, Bob Breznak <[email protected]>
:license: FreeBSD and LGPL, see license.* for more details.
'''

from lxml import etree
from feedgen.ext.base import BaseEntryExtension

class GeoEntryExtension(BaseEntryExtension):
'''FeedEntry extension for Simple GeoRSS.
'''

def __init__(self):
# Simple GeoRSS tag
self.__point = None

def extend_rss(self, entry):
def extend_file(self, entry):
'''Add additional fields to an RSS item.
:param feed: The RSS item XML element to use.
'''

GEO_NS = 'http://www.georss.org/georss'

if self.__point:
Expand All @@ -14,9 +35,20 @@ def extend_rss(self, entry):

return entry

def extend_rss(self, entry):
return self.extend_file(entry)

def extend_atom(self, entry):
return self.extend_rss(self, entry)
return self.extend_file(entry)

def point(self, point=None):
self.__point = point or '0.0 0.0'
'''Get or set the georss:point of the entry.
:param point: The GeoRSS formatted point (i.e. "42.36 -71.05")
:returns: The author of the podcast.
'''

if point is not None:
self.__point = point

return self.__point
23 changes: 23 additions & 0 deletions tests/test_extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,29 @@ def test_podcastEntryItems(self):
namespaces=ns)
assert author == ['Lars Kiesow']

class TestExtensionGeo(unittest.TestCase):

def setUp(self):
self.fg = FeedGenerator()
self.fg.load_extension('geo')
self.fg.title('title')
self.fg.link(href='http://example.com', rel='self')
self.fg.description('description')

def test_geoEntryItems(self):
fe = self.fg.add_item()
fe.title('y')
fe.geo.point('42.36 -71.05')

assert fe.geo.point() == '42.36 -71.05'

# Check that we have the item in the resulting XML
ns = {'georss': 'http://www.georss.org/georss'}
root = etree.fromstring(self.fg.rss_str())
point = root.xpath('/rss/channel/item/georss:point/text()',
namespaces=ns)
assert point == ['42.36 -71.05']


class TestExtensionDc(unittest.TestCase):

Expand Down

0 comments on commit ae5759d

Please sign in to comment.