view personasbackend/personas/json_feeds.py @ 158:1b03e1b84ae2

There's now a JSON menu category called 'your personas'.
author Atul Varma <varmaa@toolness.com>
date Fri, 04 Apr 2008 14:59:30 -0700
parents 9bcc77e37c19
children 62659c78b809
line wrap: on
line source

from django.http import HttpResponse
from django.utils import simplejson

from personasbackend.personas import models

NEW_MENU_ID = "personas-new-menu"
POPULAR_MENU_ID = "personas-popular-menu"
YOUR_PERSONAS_MENU_ID = "your-personas-menu"

def _makeJsonResponse( obj ):
    json = simplejson.dumps( obj, indent=4 )
    response = HttpResponse( json )
    response["Content-Type"] = "text/plain"
    return response

def categories( request ):
    categoryDicts = [
        {"label": "Most Popular", "id" : POPULAR_MENU_ID,
         "type" : "list", "parent" : "top" },
	{"label": "Recent", "id" : "personas-recent-menu",
         "type" : "recent", "parent" : "top" },
	{"label": "New", "id" : NEW_MENU_ID,
         "type" : "list", "parent" : "top" },
	{"label": "All", "id" : "personas-category-menu",
         "type" : "category", "parent" : "top" },
        ]

    for category in models.Category.objects.all():
        categoryDicts.append(
            {"label" : category.name,
             "id" : category.json_id,
             "type" : "list",
             "parent" : "personas-category-menu"}
            )

    if request.user.is_authenticated():
        categoryDicts.append(
            {"label" : "Your Personas",
             "id" : YOUR_PERSONAS_MENU_ID,
             "type" : "list",
             "parent" : "top"}
            )

    return _makeJsonResponse( {"categories" : categoryDicts} )

def _make_persona_dict( persona, categories ):
    return {"label" : persona.name,
            "id" : persona.json_id,
            "textColor" : persona.text_color,
            "accentColor" : persona.accent_color,
            "baseURL" : persona.resolved_url,
            "menu" : ",".join( categories ),
            "preview" : "yes"}

def personas( request ):
    personaDicts = []

    isPopular = {}
    isNew = {}

    published = models.Persona.objects.filter( status="published" )

    for persona in published.order_by( "-popularity" )[:10]:
        isPopular[persona.id] = True

    for persona in published.order_by( "-date_published" )[:10]:
        isNew[persona.id] = True

    for persona in published:
        categories = [persona.category.json_id]
        if persona.id in isPopular:
            categories.append( POPULAR_MENU_ID )
        if persona.id in isNew:
            categories.append( NEW_MENU_ID )

        personaDicts.append( _make_persona_dict(persona, categories) )

    if request.user.is_authenticated():
        owned = models.Persona.objects.filter( owner=request.user )
        for persona in owned:
            personaDicts.append( _make_persona_dict(
                    persona,
                    [YOUR_PERSONAS_MENU_ID]) )

    return _makeJsonResponse( {"personas" : personaDicts} )