"""
import sys
import datetime
-# from elementtree.ElementTree import Element, SubElement, tostring
from xml.etree.ElementTree import Element, SubElement, tostring
from sqlalchemy.engine import create_engine
log = logging.getLogger(__name__)
-def create_feed(engine):
- param_page_title = None
+def create_feed(page_title=None, page_ids=None):
+ """If a page_title is given, only the reports for the given sled are shown.
+ If a list of page_ids is given, only the reports for the selected pages are shown.
+ Otherwise, all reports are shown."""
+ engine = create_engine(config['sqlalchemy.url'])
conn = engine.connect()
- if param_page_title is None:
- sql = "select id, page_title, date_report, date_entry, `condition`, description, author_name, author_username from wrreport where date_invalid > now() and delete_date is null order by id desc limit 50"
+
+ select = "select id, page_title, date_report, date_entry, `condition`, description, author_name, author_username from wrreport "
+ if not page_title is None:
+ # page_title is given
+ sql = select + "where lcase(page_title) = lcase(%s) and date_invalid > now() and delete_date is null order by id desc limit 50"
+ result = conn.execute(sql, page_title)
+ elif not page_ids is None:
+ # a list of page_ids is given
+ sql = [select + "where "]
+ if len(page_ids) > 0:
+ sql += '('
+ sql += " or ".join(['page_id=%s' for page_id in page_ids])
+ sql += ') '
+ sql += 'and date_invalid > now() and delete_date is null order by id desc limit 50'
+ page_ids_str = [str(page_id) for page_id in page_ids]
+ result = conn.execute("".join(sql), *page_ids_str)
+ else:
+ # user wants to have all reports
+ sql = select + "where date_invalid > now() and delete_date is null order by id desc limit 50"
# Debug:
- sql = "select id, page_title, date_report, date_entry, `condition`, description, author_name, author_username from wrreport where delete_date is null order by id limit 5"
+ sql = select + "where delete_date is null order by id limit 5"
result = conn.execute(sql)
- else:
- sql = "select id, page_title, date_report, date_entry, `condition`, description, author_name, author_username from wrreport where page_title ilike ? and date_invalid > now() and delete_date is null order by id desc limit 50"
- result = conn.execute(sql, param_page_title)
feed = Element("feed", xmlns="http://www.w3.org/2005/Atom")
feed_title = SubElement(feed, "title")
feed_title.text = "Winterrodeln Rodelbahnberichte"
feed_id = SubElement(feed, "id")
- if param_page_title is None:
- feed_id.text = "http://www.winterrodeln.org/feeds/schneelage"
+ if not page_title is None:
+ feed_id.text = url(controller='berichte', action='bahn', id=page_title)
+ elif not page_ids is None:
+ feed_id.text = url(controller='berichte', action='bahnen', id="+".join(page_ids_str))
else:
- feed_id.text = "http://www.winterrodeln.org/feeds/schneelage/{0}".format(param_page_title.replace(u' ', u'_'))
+ feed_id.text = url(controller='berichte', action='alle')
feed_updated = SubElement(feed, "updated")
feed.append(Element("link", rel="self", href=feed_id.text))
class BerichteController(BaseController):
- def index(self):
- # Return a rendered template
- #return render('/berichte.mako')
- # or, return a response
- engine = create_engine(config['sqlalchemy.url'])
- return create_feed(engine)
+ def alle(self):
+ """http://www.winterrodeln.org/feeds/berichte/alle"""
+ response.content_type = 'application/atom+xml'
+ return create_feed()
+
+
+ def bahn(self, id):
+ """http://www.winterrodeln.org/feeds/berichte/bahn/kemater_alm"""
+ response.content_type = 'application/atom+xml'
+ return create_feed(page_title=id)
+
+
+ def bahnen(self, id):
+ """http://www.winterrodeln.org/feeds/berichte/bahnen/22+42+132"""
+ page_ids = id.split('+')
+ page_ids = [int(page_id) for page_id in page_ids]
+ response.content_type = 'application/atom+xml'
+ return create_feed(page_ids=page_ids)