-#!/usr/bin/python2.6
+#!/usr/bin/python2.7
# -*- coding: UTF-8 -*-
"""Creates an Atom-Feed for single or multiple winterrodeln sled reports.
http://www.winterrodeln.org/feed/berichte/alle
http://www.winterrodeln.org/feed/berichte/bahn/kemater_alm
http://www.winterrodeln.org/feed/berichte/bahnen/5+280+251
+ http://www.winterrodeln.org/feed/berichte/region/osttirol
See:
http://www.atompub.org/
http://effbot.org/zone/element.htm
log = logging.getLogger(__name__)
-def create_feed(page_title=None, page_ids=None):
+def create_feed(page_title=None, page_ids=None, region_name=None):
"""If a page_title is given, only the reports for the given sledrun are shown.
If a list of page_ids is given, only the reports for the selected pages are shown.
+ If a region name (lower case) is given, the reports just for this region are shown.
Otherwise, all reports are shown."""
engine = create_engine(config['sqlalchemy.url'])
where += " or ".join(['wrreport.page_id=%s' for page_id in page_ids])
where += ')'
params += map(str, page_ids)
+ elif not region_name is None:
+ # a name of a region is given
+ # (1) find out whether the region exists
+ subselect = 'select aswkb(border) as border_wkb from wrregion where name=lcase(%s)'
+ subresult = conn.execute(subselect, region_name)
+ if subresult.rowcount == 0:
+ # no region with such a name
+ raise webob.exc.HTTPNotFound()
+ assert subresult.rowcount == 1
+ row = subresult.fetchone()
+ border_wkb = row['border_wkb'] # border as WKB
+ where += ' and contains(geomfromwkb(%s), point(position_longitude, position_latitude))'
+ params += [border_wkb]
else:
# user wants to have all reports
pass
feed_id.text = url(qualified=True, controller='berichte', action='bahn', id=page_title)
elif not page_ids is None:
feed_id.text = url(qualified=True, controller='berichte', action='bahnen', id="+".join(map(str, page_ids)))
+ elif not region_name is None:
+ feed_id.text = url(qualified=True, controller='berichte', action='region', id=region_name)
else:
feed_id.text = url(qualified=True, controller='berichte', action='alle')
feed_updated = SubElement(feed, "updated")
abort(400) # bad request
response.content_type = 'application/atom+xml'
return create_feed(page_ids=page_ids)
+
+ def region(self, id):
+ """Handles URLs like
+ http://www.winterrodeln.org/feed/berichte/region/osttirol
+ """
+ response.content_type = 'application/atom+xml'
+ return create_feed(region_name=id)
+