changeset 129:3aff48d6beca

Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
author Atul Varma <varmaa@toolness.com>
date Wed, 02 Apr 2008 14:45:13 -0700
parents 9bcc77e37c19
children 694ff9b2474d
files personasbackend/personas/models.py personasbackend/personas/urls.py personasbackend/personas/views.py
diffstat 3 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/personasbackend/personas/models.py	Wed Apr 02 12:01:42 2008 -0700
+++ b/personasbackend/personas/models.py	Wed Apr 02 14:45:13 2008 -0700
@@ -219,7 +219,10 @@
     def __get_resolved_url(self):
         viewinfo = parse_personas_view_url( self.url )
         if not viewinfo:
-            return self.url
+            return make_absolute_url( reverse(
+                    'dynamic-persona',
+                    kwargs = { 'persona_id' : str(self.id) }
+                    ) )
         else:
             return make_absolute_url( reverse(
                     viewinfo['view'],
--- a/personasbackend/personas/urls.py	Wed Apr 02 12:01:42 2008 -0700
+++ b/personasbackend/personas/urls.py	Wed Apr 02 14:45:13 2008 -0700
@@ -12,10 +12,13 @@
      'personasbackend.personas.json_feeds.personas',
      name='personas-all-json'),
 
-    # Dynamic wrappers for views
+    # Dynamic wrappers for persona URLs
     url(r'^legacy/(?P<name>.+)$',
         'personasbackend.personas.views.legacy_cbeard_persona',
         name='legacy-cbeard-persona'),
+    url(r'^dynamic/(?P<persona_id>\d+)/$',
+        'personasbackend.personas.views.dynamic_persona_proxy',
+        name='dynamic-persona'),
 
     # Auth
     url(r'^login/$', 'django.contrib.auth.views.login',
--- a/personasbackend/personas/views.py	Wed Apr 02 12:01:42 2008 -0700
+++ b/personasbackend/personas/views.py	Wed Apr 02 14:45:13 2008 -0700
@@ -33,6 +33,13 @@
         mimetype = "application/vnd.mozilla.xul+xml"
         )
 
+def dynamic_persona_proxy( request, persona_id ):
+    # TODO: Deal with case where persona.url already has a querystring.
+    persona = models.Persona.objects.get( pk=int(persona_id) )
+    action = request.GET.get( "action", "" )
+    return HttpResponseRedirect( "%s?action=%s" % (persona.url,
+                                                   action) )
+
 def list_view( request ):
     personas = models.Persona.objects.filter( status="published" )
     return render_to_response(