google app engine - Host dynamic iCal on GAE Python -
i'm planning app keeps database of events. users query events they're interested in (based on geography, tags, etc.) , obtain link dynamic ical sync personal calendar. when new events added database match query, calendar updated.
this should hosted on gae using python. i've found python module should able render content ical: icalendar.
now question: how setup web server aspect? understand ical not going on http, on webdav protocol, on other hand, webdav extension of http features write operations server, , don't need read-only calendar, i?
question 1: can host ical on http://, using webapp2 proper mime type , nothing more? or (some) clients not accept this?
question 2: if need have webdav:// protocol, start? there modules around webdav, they're more fileservers (see here , here, looks they're not maintained anymore either), , that's totally not need. can webapp2 or mainstream python web framework me read-only ical? webapp2 doesn't word webdav...
thanks advice can give!
vic
i have implemented simple version of icalendar server on top of basehttprequesthandler. same idea can used gae. more complex content renderer such icalendar can used:
from basehttpserver import basehttprequesthandler, httpserver port = 8000 desc = "the long desciption of event. i've tried keep serious @ point" def limit_to_75_octets(inp): if len(inp) <= 73: return inp + "\r\n" out = "" while len(inp) > 73: out += inp[:73] + "\r\n" inp = " " + inp[73:] if len(inp) == 0: return out else: return out + inp + "\r\n" def render_alarm(): """creates alarm 10 minutes before event start""" return ("begin:valarm\r\n" + "trigger:-pt10m\r\n" + "action:display\r\n" + limit_to_75_octets("description:reminder: %s" % desc) + "end:valarm\r\n") def render_event(): """create , event uid: unique event id dtstamp: time when event created dtstart: event start time dtend: event end time (all dates in utc) """ return ("begin:vevent\r\n" + "uid:uid1@example.com\r\n" + "dtstamp:20141107t200200z\r\n" + "dtstart:20141109t153000z\r\n" + "dtend:20141109t163000z\r\n" + limit_to_75_octets("summary:%s" % desc) + render_alarm() + "end:vevent\r\n") def render_calendar(): return ("begin:vcalendar\r\n" + "version:2.0\r\n" + "prodid:-//example corp.//caldav server//en\r\n" + render_event() + "end:vcalendar\r\n") class sharedcalendarserver(basehttprequesthandler): def do_get(self): self.send_response(200) self.send_header("content-type", "text/calendar") self.end_headers() self.wfile.write(render_calendar()) if __name__ == "__main__": try: server = httpserver(("", port), sharedcalendarserver) print "server running on", port server.serve_forever() except keyboardinterrupt: print "shutting down web server." server.socket.close()
Comments
Post a Comment