aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author藍挺瑋 <lantw44@gmail.com>2012-12-18 11:46:38 +0800
committerLAN-TW <lantw44@gmail.com>2012-12-18 11:46:38 +0800
commite11ecbbc74ad8738a2f6bdd72517fc70de3bebc9 (patch)
treeb0cb38373aec48e44014348c11e3f4d4e9c615d3
parentf2d6e77cb7c3beba89ee13d9b1ff3f3d0c9ba3e4 (diff)
downloadinccalendar-e11ecbbc74ad8738a2f6bdd72517fc70de3bebc9.tar.gz
inccalendar-e11ecbbc74ad8738a2f6bdd72517fc70de3bebc9.tar.zst
inccalendar-e11ecbbc74ad8738a2f6bdd72517fc70de3bebc9.zip
fetch.py 已配合資料格式改變進行修正,並加入 cursor 功能
由於 GQL 每次傳回的資料量有限制,因此我限制一次只傳回 10 筆資料,之後的 資料可用得到的 cursor 值繼續取得,直到回傳資料數為 0 為止。
-rw-r--r--access/fetch.py51
1 files changed, 34 insertions, 17 deletions
diff --git a/access/fetch.py b/access/fetch.py
index 053484b..2f886e2 100644
--- a/access/fetch.py
+++ b/access/fetch.py
@@ -2,6 +2,7 @@
# -*- coding: UTF-8 -*-
import webapp2
+import datetime
from google.appengine.api import users
from google.appengine.ext import db
@@ -18,17 +19,15 @@ def XMLBuildCalEvent(calevent, entry):
newdata = etree.SubElement(calevent, 'icon')
newdata.text = str(entry.icon)
newdata = etree.SubElement(calevent, 'beginyear')
- newdata.text = str(entry.beginyear)
+ newdata.text = str(entry.begin.year)
newdata = etree.SubElement(calevent, 'beginmonth')
- newdata.text = str(entry.beginmonth)
+ newdata.text = str(entry.begin.month)
newdata = etree.SubElement(calevent, 'begindate')
- newdata.text = str(entry.begindate)
- newdata = etree.SubElement(calevent, 'endyear')
- newdata.text = str(entry.endyear)
- newdata = etree.SubElement(calevent, 'endmonth')
- newdata.text = str(entry.endmonth)
- newdata = etree.SubElement(calevent, 'enddate')
- newdata.text = str(entry.enddate)
+ newdata.text = str(entry.begin.day)
+ newdata = etree.SubElement(calevent, 'beginhour')
+ newdata.text = str(entry.begin.hour)
+ newdata = etree.SubElement(calevent, 'beginminute')
+ newdata.text = str(entry.begin.minute)
newdata = etree.SubElement(calevent, 'datafrom')
newdata.text = entry.datafrom
@@ -51,23 +50,41 @@ class FetchEvent(webapp2.RequestHandler):
if not guserid:
return
- byear = self.request.get('byear')
- bmonth = self.request.get('bmonth')
+ year = int(self.request.get('year'))
+ month = int(self.request.get('month'))
+ withcursor = self.request.get('gqlcursor')
+ if month >= 12:
+ nextmonth = 1
+ nextyear = year + 1
+ else:
+ nextmonth = month + 1
+ nextyear = year
+
+ if withcursor == "":
+ withcursor = None
+
data = db.GqlQuery("SELECT * FROM CalEvent "
- "WHERE ANCESTOR IS :1 ORDER BY begindate",
- db.Key.from_path('user', guserid.email()))
+ "WHERE ANCESTOR IS :1 AND "
+ "begin >= :2 AND "
+ "begin < :3 "
+ "ORDER BY begin",
+ db.Key.from_path('user', guserid.email()),
+ datetime.datetime(year, month, 1),
+ datetime.datetime(nextyear, nextmonth, 1))
+
+ data.with_cursor(withcursor)
eventroot = etree.Element('inccalender')
- for entry in data:
+ for entry in data.run(limit=10):
calevent = etree.SubElement(eventroot, 'calevent')
XMLBuildCalEvent(calevent, entry)
+
+ gqlcursor = etree.SubElement(eventroot, 'gqlcursor')
+ gqlcursor.text = data.cursor()
self.response.headers['Content-Type'] = 'text/xml; charset=UTF-8'
self.response.out.write(
etree.tostring(eventroot, pretty_print=True, xml_declaration=True,
encoding='UTF-8'))
-
-
-
app = webapp2.WSGIApplication([('/access/fetch', FetchEvent)])