Skip to content

Commit

Permalink
Produce multiple pages
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Brunton-Spall committed Jul 19, 2010
1 parent af58ea8 commit 90cfef5
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 34 deletions.
47 changes: 33 additions & 14 deletions ae_timetable.py
Expand Up @@ -5,7 +5,7 @@
from google.appengine.api import urlfetch
from google.appengine.ext import db
from google.appengine.ext.webapp import template
import os, time, logging
import os, time, datetime, logging
import itertools
try:
import json
Expand All @@ -21,6 +21,7 @@ def render_template(self, end_point, template_values):
class Event(db.Model):
id = db.StringProperty()
start_time = db.DateTimeProperty()
day = db.DateProperty()
duration = db.IntegerProperty() #In Minutes
location = db.StringProperty()
speaker = db.StringProperty()
Expand All @@ -31,6 +32,7 @@ def to_dict(self):
return {
'id':self.id,
'start_time':long(time.mktime(self.start_time.timetuple())*1000),
'date':self.day.toordinal(),
'duration':self.duration,
'location':self.location,
'speaker':self.speaker,
Expand Down Expand Up @@ -87,6 +89,7 @@ def persist_events(events):
e.duration = get_duration(event)
e.location = str(get_location(event))
e.start_time = get_start_time(event)
e.day = e.start_time.date()
e.abstract = ''
element = talk_abstracts_soup.find(text=title)
if element:
Expand All @@ -106,17 +109,6 @@ def get(self):
self.response.headers['Content-Type'] = 'text/plain'
content = get_events_list(fetch_ics_file())
persist_events(content)
# for c in content:
# self.response.out.write(get_start_time(c))
# self.response.out.write("\t")
# self.response.out.write(get_id(c))
# self.response.out.write("\t")
# self.response.out.write(get_location(c))
# self.response.out.write("\t")
# self.response.out.write(get_duration(c))
# self.response.out.write("\t")
# self.response.out.write(get_speaker_and_title(c))
# self.response.out.write("\n")

class AllEvents(webapp.RequestHandler):
def get(self):
Expand All @@ -125,9 +117,28 @@ def get(self):
event_days = set()
for e in all_events:
events.append(e.to_dict())
event_days.add(str(e.start_time.date()))
event_days.add(e.start_time.date())
render_template(self, 'front.html', {'events':events, 'event_days':sorted(event_days)})

class EventsOnDay(webapp.RequestHandler):
def get(self, target_date):
all_events = Event.all().filter('day =',datetime.date.fromordinal(int(target_date))).order('start_time')
events = []
event_slots = set()
for e in all_events:
events.append(e.to_dict())
event_slots.add(e.start_time)
render_template(self, 'day.html', {'event_slots':sorted(event_slots)})

class EventsAtTime(webapp.RequestHandler):
def get(self, target_time):
all_events = Event.all().filter('start_time =',datetime.datetime.fromtimestamp(int(target_time))).order('start_time')
events = []
event_days = set()
for e in all_events:
events.append(e.to_dict())
render_template(self, 'time.html', {'events':events})

class AllEventsJson(webapp.RequestHandler):
def get(self):
prefix = ""
Expand All @@ -140,11 +151,19 @@ def get(self):
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(prefix+json.dumps(events)+postfix)

class Manifest(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/cache-manifest'
render_template(self, 'manifest.txt', {})

application = webapp.WSGIApplication([
('/services/fetch_ics', FetchIcs),
('/services/fetch_local', FetchLocalIcs),
('/', AllEvents),
('/time/(\d+)', EventsAtTime),
('/(\d+)', EventsOnDay),
('/json', AllEventsJson),
('/manifest', Manifest),
('/', AllEvents),
],
debug=True)

Expand Down
5 changes: 5 additions & 0 deletions index.yaml
Expand Up @@ -9,3 +9,8 @@ indexes:
# manually, move them above the marker line. The index.yaml file is
# automatically uploaded to the admin console when you next deploy
# your application using appcfg.py.

- kind: Event
properties:
- name: day
- name: start_time
20 changes: 20 additions & 0 deletions templates/day.html
@@ -0,0 +1,20 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>front</title>
<meta name="generator" content="TextMate http://macromates.com/">
<meta name="author" content="MBS">
</head>
<body>
<ul>
{% for slot in event_slots %}
<li>
<a href="/time/{{slot|date:"U"}}">{{slot|time:"h:i"}}</span>
</li>
{% endfor %}
</ul>
</body>
</html>
27 changes: 7 additions & 20 deletions templates/front.html
Expand Up @@ -24,35 +24,22 @@
'/themes/jqt/img/loading.gif'
]
});
$(function(){
$('#loading').show();
$('#loading').hide();
})
</script><!-- Date: 2010-07-19 -->
</head>
<body>
<div id='mainpage'>
<div id="loading" class="hide">Loading...</div>
<div id='mainpage' class='current'>
<div class="toolbar">
<h1>Europython 2010</h1>
<a class="back" href="#">Back</a>
</div>
<ul>
{% for event in event_days %}
<li>
<span class="date">{{event}}</span>
</li>
{% endfor %}
</ul>
</div>
<div id='mainpage'>
<div class="toolbar">
<h1>Europython 2010</h1>
<a class="back" href="#">Back</a>
</div>
<ul>
{% for event in events %}
<li>
<span class="date">{{event.start_time}}</span>
<span class="duration">{{event.duration}}</span>
<span class="title">{{event.title}}</span>
<span class="speaker">{{event.speaker}}</span>
<span class="location">{{event.location}}</span>
<a href='/{{event.toordinal}}'>{{event|date:"D d M"}}</span>
</li>
{% endfor %}
</ul>
Expand Down
4 changes: 4 additions & 0 deletions templates/manifest.txt
@@ -0,0 +1,4 @@
CACHE MANIFEST
/
/json
# version 1
64 changes: 64 additions & 0 deletions templates/time.html
@@ -0,0 +1,64 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>front</title>
<meta name="generator" content="TextMate http://macromates.com/">
<meta name="author" content="MBS">
<style type="text/css" media="screen">@import "/jqtouch/jqtouch.min.css";</style>
<style type="text/css" media="screen">@import "/themes/jqt/theme.min.css";</style>
<script src="/jqtouch/jquery.1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
<script src="/jqtouch/jqtouch.min.js" type="application/x-javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
var jQT = new $.jQTouch({
addGlossToIcon: false,
statusBar: 'black',
preloadImages: [
'/themes/jqt/img/back_button.png',
'/themes/jqt/img/back_button_clicked.png',
'/themes/jqt/img/button_clicked.png',
'/themes/jqt/img/grayButton.png',
'/themes/jqt/img/whiteButton.png',
'/themes/jqt/img/loading.gif'
]
});
</script><!-- Date: 2010-07-19 -->
</head>
<body>
<div id="loading" class="hide"></div>
<div id='mainpage' class='current'>
<div class="toolbar">
<h1>Europython 2010</h1>
</div>
<ul>
{% for event in event_days %}
<li>
<a href='/{{event.toordinal}}'>{{event|date:"D d M"}}</span>
</li>
{% endfor %}
</ul>
</div>
{% regroup events|dictsort:"start_time" by date as event_list %}
{% for event_day in event_list %}
<div id='{{event_day.grouper}}'>
<div class="toolbar">
<a class="back" href="#">Back</a>
<h1>Europython 2010</h1>
</div>
<ul>
{% for event in event_day.list %}
<li>
<span class="date">{{event.start_time}}</span>
<span class="duration">{{event.duration}}</span>
<span class="title">{{event.title}}</span>
<span class="speaker">{{event.speaker}}</span>
<span class="location">{{event.location}}</span>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
</body>
</html>

0 comments on commit 90cfef5

Please sign in to comment.