Skip to content

Commit

Permalink
Added support for iCal format.
Browse files Browse the repository at this point in the history
  • Loading branch information
onyxfish committed Sep 6, 2009
1 parent 70f7489 commit 8f206c9
Showing 1 changed file with 41 additions and 22 deletions.
63 changes: 41 additions & 22 deletions api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,20 @@

from votersdaily_web import settings

def couchdb_urlopen(server, database, design, view, **options):
def couchdb_urlopen(server, database, design, view, format, **options):
"""
Build a CouchDB view url, open it, and return the raw results.
"""
query = urllib.urlencode(options)
url = '%s/%s/_design/%s/_view/%s?%s' % (
server, database, design, view, query)

if format == 'json':
url = '%s/%s/_design/%s/_view/%s?%s' % (
server, database, design, view, query)
elif format == 'ical':
url = '%s/%s/_design/%s/_list/ical/%s?%s' % (
server, database, design, view, query)
else:
raise Http404

return urllib2.urlopen(url)

Expand All @@ -39,26 +46,40 @@ def get_query_options(request):

return options

def get_result_format_and_mimetype(request):
"""
Determine the format and mimetype from the URL GET parameters.
"""
format = request.GET.get('format', 'json')

if format == 'json':
mimetype = 'application/json'
elif format == 'ical':
mimetype = 'text/calendar'
else:
raise Http404()

return (format, mimetype)

def events_all(request):
"""
Return all events in the database.
"""
if request.method != 'GET':
raise Http404

options = get_query_options(request)
options = get_query_options(request)
format, mimetype = get_result_format_and_mimetype(request)

# TODO - support alternate formats
format = request.GET.get('format', 'json')

json_result = couchdb_urlopen(
result = couchdb_urlopen(
settings.COUCHDB_SERVER_URI,
settings.COUCHDB_EVENTDB_NAME,
'api',
'all',
format,
**options)
return HttpResponse(json_result, mimetype='application/json')

return HttpResponse(result, mimetype)

def events_branch(request, branch):
"""
Expand All @@ -68,19 +89,18 @@ def events_branch(request, branch):
if request.method != 'GET':
raise Http404

options = get_query_options(request)
options = get_query_options(request)
format, mimetype = get_result_format_and_mimetype(request)

# TODO - support alternate formats
format = request.GET.get('format', 'json')

json_result = couchdb_urlopen(
result = couchdb_urlopen(
settings.COUCHDB_SERVER_URI,
settings.COUCHDB_EVENTDB_NAME,
'api',
urllib.quote(branch),
format,
**options)

return HttpResponse(json_result, mimetype='application/json')
return HttpResponse(result, mimetype)

def events_entity(request, entity):
"""
Expand All @@ -90,17 +110,16 @@ def events_entity(request, entity):
if request.method != 'GET':
raise Http404

options = get_query_options(request)

# TODO - support alternate formats
format = request.GET.get('format', 'json')
options = get_query_options(request)
format, mimetype = get_result_format_and_mimetype(request)

json_result = couchdb_urlopen(
result = couchdb_urlopen(
settings.COUCHDB_SERVER_URI,
settings.COUCHDB_EVENTDB_NAME,
'api',
urllib.quote(entity),
format,
**options)

return HttpResponse(json_result, mimetype='application/json')
return HttpResponse(result, mimetype)

0 comments on commit 8f206c9

Please sign in to comment.