2 # -*- coding: UTF-8 -*-
3 """Creates an Atom-Feed for single or multiple winterrodeln sled reports.
6 http://www.winterrodeln.org/feeds/berichte/alle
7 http://www.winterrodeln.org/feeds/berichte/bahn/kemater_alm
8 http://www.winterrodeln.org/feeds/berichte/bahnen/22+42+132
10 http://www.atompub.org/
11 http://effbot.org/zone/element.htm
12 http://www.winterrodeln.org/trac/wiki/UrlSchema
16 # from elementtree.ElementTree import Element, SubElement, tostring
17 from xml.etree.ElementTree import Element, SubElement, tostring
19 from sqlalchemy.engine import create_engine
23 from pylons import request, response, session, config, tmpl_context as c, url
24 from pylons.controllers.util import abort, redirect
26 from feed.lib.base import BaseController, render
28 log = logging.getLogger(__name__)
31 def create_feed(engine):
32 param_page_title = None
34 conn = engine.connect()
35 if param_page_title is None:
36 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"
38 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"
39 result = conn.execute(sql)
41 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"
42 result = conn.execute(sql, param_page_title)
45 feed = Element("feed", xmlns="http://www.w3.org/2005/Atom")
46 feed_title = SubElement(feed, "title")
47 feed_title.text = "Winterrodeln Rodelbahnberichte"
48 feed_id = SubElement(feed, "id")
49 if param_page_title is None:
50 feed_id.text = "http://www.winterrodeln.org/feeds/schneelage"
52 feed_id.text = "http://www.winterrodeln.org/feeds/schneelage/{0}".format(param_page_title.replace(u' ', u'_'))
53 feed_updated = SubElement(feed, "updated")
54 feed.append(Element("link", rel="self", href=feed_id.text))
58 id, page_title, date_report, date_entry, condition, description, author_name, author_username = row
59 page_title_url = page_title.replace(u' ', u'_')
60 entry = SubElement(feed, "entry")
61 entry_title = SubElement(entry, "title")
62 entry_title.text = page_title
63 entry.append(Element("link", rel="alternate", href=u"http://www.winterrodeln.org/wiki/{0}".format(page_title_url), type="text/html", hreflang="de"))
64 entry_id = SubElement(entry, "id")
65 entry_id.text = "http://www.winterrodeln.org/feeds/schneelage/{0}/{1}".format(page_title_url, id)
66 entry_updated = SubElement(entry, "updated")
67 entry_updated.text = date_entry.isoformat() + "+01:00"
68 if last_updated is None: last_updated = date_entry
69 # entry_summary = SubElement(entry, "summary")
70 # entry_summary.text = str(condition)
71 entry_content = SubElement(entry, "content")
72 entry_content.attrib["type"] = "xhtml"
73 entry_content_div = SubElement(entry_content, "div")
74 entry_content_div.attrib["xmlns"] = "http://www.w3.org/1999/xhtml"
75 entry_content_ul = SubElement(entry_content_div, "ul")
76 if not date_report is None:
77 entry_content_date = SubElement(entry_content_ul, "li")
78 entry_content_date.text = u"Bericht für " + date_report.isoformat()
79 if not condition is None:
80 entry_content_condition = SubElement(entry_content_ul, "li")
81 entry_content_condition.text = u"Schneelage: " + {1: u'Sehr gut', 2: u'Gut', 3: u'Mittelmäßig', 4: u'Schlecht', 5: u'Geht nicht'}[condition]
82 entry_content_description = SubElement(entry_content_ul, "li")
83 entry_content_description.text = description
84 entry_author = SubElement(entry, "author")
85 entry_author_name = SubElement(entry_author, "name")
86 if author_name is None: entry_author_name.text = "Anonymous user"
87 else: entry_author_name.text = author_name
89 if last_updated is None: last_updated = datetime.datetime.now()
90 feed_updated.text = last_updated.isoformat() + "+01:00"
92 feed_xml = '<?xml version="1.0" encoding="utf-8"?>\n' + tostring(feed)
98 class BerichteController(BaseController):
101 # Return a rendered template
102 #return render('/berichte.mako')
103 # or, return a response
104 engine = create_engine(config['sqlalchemy.url'])
105 return create_feed(engine)