You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by ni...@apache.org on 2012/02/03 01:06:07 UTC

svn commit: r1239948 - in /comdev/nearby_people: nearby/views.py readme.txt urls.py

Author: nick
Date: Fri Feb  3 00:06:06 2012
New Revision: 1239948

URL: http://svn.apache.org/viewvc?rev=1239948&view=rev
Log:
Add a JSON API around the place finder, and RDF + JSON APIs around the people finder. Also fixes some indents.

Modified:
    comdev/nearby_people/nearby/views.py
    comdev/nearby_people/readme.txt
    comdev/nearby_people/urls.py

Modified: comdev/nearby_people/nearby/views.py
URL: http://svn.apache.org/viewvc/comdev/nearby_people/nearby/views.py?rev=1239948&r1=1239947&r2=1239948&view=diff
==============================================================================
--- comdev/nearby_people/nearby/views.py (original)
+++ comdev/nearby_people/nearby/views.py Fri Feb  3 00:06:06 2012
@@ -34,19 +34,19 @@ comdev_foaf = FOAF(COMDEV_DOAP)
 speakers_foaf = FOAF(SPEAKERS_DOAP)
 
 def welcome(request):
-	form = PlaceForm()
-	form.enableTypeField()
-	form.initial["type"] = 'lm'
-
-	return render(request, "welcome.html", {
-		'form': form
-	})
+   form = PlaceForm()
+   form.enableTypeField()
+   form.initial["type"] = 'lm'
+
+   return render(request, "welcome.html", {
+      'form': form
+   })
 
 def pick_place(request):
-	places = []
-	message = None
+   places = []
+   message = None
 
-	if request.POST:
+   if request.POST:
 		form = PlaceForm(request.POST)
 		if form.is_valid():
 			result = geoname.search(
@@ -66,64 +66,81 @@ def pick_place(request):
 					})
 			else:
 				message = "We can't work out the location you mean, sorry. Please double check your spelling, or try searching for a nearby place which is larger."
-	else:
-		form = PlaceForm()
-        form.set_type( request.GET.get("type","") )
-
-	return render(request, "pick_place.html", {
-		'form': form, 'places': places, "message": message,
- 		'gmaps_key': GMAPS_KEY
-	})
-
-def find_people(request):
-	data = retrieve_people_data(LocationForm(request.GET))
-	data['gmaps_key'] = GMAPS_KEY
-	return render(request, "people.html", data)
+   else:
+       form = PlaceForm()
+       form.set_type( request.GET.get("type","") )
+
+   # We support html+json for responses, only html for requests
+   types = ["html"]
+   if request.POST:
+      types.append("json")
+   type = identify_type(request, types)
+   mimetype = mimetypes.get(type, None)
+
+   # Render the appropriate template
+   return render(request, "pick_place.%s" % type, {
+      'form': form, 'places': places, "message": message,
+      'gmaps_key': GMAPS_KEY
+   }, mimetype)
 
 def retrieve_people_data(form):
-	if not form.is_valid():
-		return HttpResponseRedirect("/pick_place/?location_missing")
+   if not form.is_valid():
+      return HttpResponseRedirect("/pick_place/?location_missing")
 
-	# What do they want?
-	foaf = comdev_foaf
-	if form.data["type"] == "sp":
-		foaf = speakers_foaf
-
-	search_data = form.data
-	search_latitude = float(search_data["latitude"])
-	search_longitude = float(search_data["longitude"])
-	rows = int(search_data["rows"])
-	people = foaf.get_nearby(search_latitude, search_longitude, rows)
-
-	# Work out the people.apache.org links for people
-	for d,person in people:
-		person["link"] = "http://people.apache.org/list_%s.html#%s" % \
-				(person["surname"][0], person["uid"])
-
-	# Work out our zoom
-	min_lat = min( [float(d[1]["latitude"]) for d in people]+[search_latitude] )
-	max_lat = max( [float(d[1]["latitude"]) for d in people]+[search_latitude] )
-	min_long = min( [float(d[1]["longitude"]) for d in people]+[search_longitude] )
-	max_long = max( [float(d[1]["longitude"]) for d in people]+[search_longitude] )
-	center_lat = (min_lat+max_lat)/2
-	center_long = (min_long+max_long)/2
-
-	# Decide if we need to say sorry about the distances
-	large_distance = False
-	if len(people) > 0 and people[0][0] > 250*1000:
-		large_distance = True
-
-	# Render!
-	data = {
-		'location': search_data, 'people':people,
-		'center_lat': center_lat, 'center_long': center_long,
-		'bl_lat': min_lat, 'bl_long': min_long,
-		'tr_lat': max_lat, 'tr_long': max_long,
-		'large_distance': large_distance,
-	}
-	
-	return data
+   # What do they want?
+   foaf = comdev_foaf
+   people_type = "Local Mentors"
+   if form.data["type"] == "sp":
+      foaf = speakers_foaf
+      people_type = "Speakers"
+
+   search_data = form.data
+   search_latitude = float(search_data["latitude"])
+   search_longitude = float(search_data["longitude"])
+   rows = int(search_data["rows"])
+   people = foaf.get_nearby(search_latitude, search_longitude, rows)
+
+   # Work out the people.apache.org links for people
+   for d,person in people:
+      person["link"] = "http://people.apache.org/list_%s.html#%s" % \
+             (person["surname"][0], person["uid"])
+
+   # Work out our zoom
+   min_lat = min( [float(d[1]["latitude"]) for d in people]+[search_latitude] )
+   max_lat = max( [float(d[1]["latitude"]) for d in people]+[search_latitude] )
+   min_long = min( [float(d[1]["longitude"]) for d in people]+[search_longitude] )
+   max_long = max( [float(d[1]["longitude"]) for d in people]+[search_longitude] )
+   center_lat = (min_lat+max_lat)/2
+   center_long = (min_long+max_long)/2
+
+   # Decide if we need to say sorry about the distances
+   large_distance = False
+   if len(people) > 0 and people[0][0] > 250*1000:
+      large_distance = True
+
+   # Render!
+   data = {
+      'location': search_data, 'people':people,
+      'center_lat': center_lat, 'center_long': center_long,
+      'bl_lat': min_lat, 'bl_long': min_long,
+      'tr_lat': max_lat, 'tr_long': max_long,
+      'large_distance': large_distance,
+      'people_type': people_type,
+   }
+   return data
 	
+def find_people(request):
+   data = retrieve_people_data(LocationForm(request.GET))
+   data['gmaps_key'] = GMAPS_KEY
+
+   # What format are we responding in?
+   type = identify_type(request, ("html", "json", "rdf"))
+   mimetype = mimetypes.get(type, None)
+
+   # Have the appropriate data rendered
+   return render(request, "people.%s" % type, data, mimetype)
+
 def find_people_json(request):
-	data = retrieve_people_data(LocationForm(request.GET))
-	return HttpResponse(json_dump(data), mimetype='application/javascript')
+   "Old style JSON API, using a simple JSON dump"
+   data = retrieve_people_data(LocationForm(request.GET))
+   return HttpResponse(json_dump(data), mimetype=mimetypes["json"])

Modified: comdev/nearby_people/readme.txt
URL: http://svn.apache.org/viewvc/comdev/nearby_people/readme.txt?rev=1239948&r1=1239947&r2=1239948&view=diff
==============================================================================
--- comdev/nearby_people/readme.txt (original)
+++ comdev/nearby_people/readme.txt Fri Feb  3 00:06:06 2012
@@ -28,13 +28,17 @@ If you want to write an alternative inte
 Find people nearby
 ------------------
 
-http://localhost:8000//find_people_json/?latitude=51.7522210026&longitude=-1.25596046448&type=lm
+http://localhost:8000//find_people/?latitude=51.7522210026&longitude=-1.25596046448&type=lm&format=json
+http://localhost:8000//find_people/?latitude=51.7522210026&longitude=-1.25596046448&type=lm&format=rdf
 
-Will return a JSON file containing the people nearby the point defined in the
-latitude and longitude values.
+Will return either a JSON file or a RDF file, containing the people nearby the point defined 
+in the latitude and longitude values.
 
 Type is either "lm" for "local mentors" or "sp" for "speakers"
 
+As well as specifying a format as a GET parameter, you can also send appropriate Content-Type or
+Accept headers with your request, to select either JSON or RDF (where available)
+
 Links
 =====
 

Modified: comdev/nearby_people/urls.py
URL: http://svn.apache.org/viewvc/comdev/nearby_people/urls.py?rev=1239948&r1=1239947&r2=1239948&view=diff
==============================================================================
--- comdev/nearby_people/urls.py (original)
+++ comdev/nearby_people/urls.py Fri Feb  3 00:06:06 2012
@@ -29,6 +29,8 @@ urlpatterns = patterns('',
 	(r'^$',              'nearby_people.nearby.views.welcome'),
 	(r'^pick_place/$',  'nearby_people.nearby.views.pick_place'),
 	(r'^find_people/$', 'nearby_people.nearby.views.find_people'),
+
+	# Old style JSON support, not template based
 	(r'^find_people_json/$', 'nearby_people.nearby.views.find_people_json'),
 
     # Uncomment the admin/doc line below and add 'django.contrib.admindocs'