[virtualcommons-svn] commit/vcweb: 2 new changesets
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-06-17 23:50:36
|
2 new changesets in vcweb: http://bitbucket.org/virtualcommons/vcweb/changeset/251ebd148bf8/ changeset: 251ebd148bf8 user: alllee date: 2011-06-18 01:18:52 summary: moving json encoding to core views affected #: 3 files (2.8 KB) --- a/vcweb/core/views.py Fri Jun 17 16:09:13 2011 -0700 +++ b/vcweb/core/views.py Fri Jun 17 16:18:52 2011 -0700 @@ -3,10 +3,15 @@ from django.contrib.auth.models import User from django.core.urlresolvers import reverse from django.core.exceptions import PermissionDenied +from django.db.models import Model +from django.db.models.query import QuerySet +from django.core.serializers import serialize from django.http import HttpResponse from django.shortcuts import render_to_response, redirect from django.template.context import RequestContext from django.utils.decorators import method_decorator +from django.utils.functional import curry +from django.utils.simplejson import dumps, loads, JSONEncoder from django.views.generic import ListView, FormView, TemplateView from django.views.generic.base import TemplateResponseMixin from django.views.generic.detail import SingleObjectMixin, DetailView @@ -21,6 +26,33 @@ logger = logging.getLogger(__name__) """ account registration / login / logout / profile views """ +class DjangoJSONEncoder(JSONEncoder): + def default(self, obj): + if isinstance(obj, QuerySet): + return loads(serialize('json', obj)) + elif isinstance(obj, Model): + return loads(serialize('json', [obj]))[0] + else: + return JSONEncoder.default(self, obj) + +dumps = curry(dumps, cls=DjangoJSONEncoder) + +class JSONResponseMixin(object): + def render_to_response(self, context, **kwargs): + "Returns a JSON response containing 'context' as payload" + return self.get_json_response(self.convert_context_to_json(context, **kwargs)) + + def get_json_response(self, content, **httpresponse_kwargs): + "Construct an `HttpResponse` object." + logger.debug("return json response %s", content) + return HttpResponse(content, + content_type='application/json', + **httpresponse_kwargs) + + def convert_context_to_json(self, context, context_key='object_list', **kwargs): + "Convert the context dictionary into a JSON object" + logger.debug("serializing context %s with context_key %s", context, context_key) + return dumps(context[context_key]) class AnonymousMixin(object): @method_decorator(anonymous_required) @@ -345,3 +377,4 @@ logger.warning(error_message) messages.warning(request, error_message) return redirect('core:dashboard') + --- a/vcweb/lighterprints/urls.py Fri Jun 17 16:09:13 2011 -0700 +++ b/vcweb/lighterprints/urls.py Fri Jun 17 16:18:52 2011 -0700 @@ -1,10 +1,11 @@ from django.conf.urls.defaults import url, patterns -from vcweb.lighterprints.views import ActivityDetailView, ActivityListView +from vcweb.lighterprints.views import ActivityDetailView, ActivityListView, DoActivityView urlpatterns = patterns('vcweb.lighterprints.views', url(r'^$', 'index', name='index'), url(r'^(?P<experiment_id>\d+)/configure$', 'configure', name='configure'), - url(r'^activity/list$', ActivityListView.as_view()), - url(r'^activity/(?P<activity_name>\w+)$', ActivityDetailView.as_view()), + url(r'^activity/list/?$', ActivityListView.as_view()), + url(r'^activity/(?P<activity_id>\d+)$', ActivityDetailView.as_view()), + url(r'^activity/(?P<activity_id>\d+)/do$', DoActivityView.as_view()), ) --- a/vcweb/lighterprints/views.py Fri Jun 17 16:09:13 2011 -0700 +++ b/vcweb/lighterprints/views.py Fri Jun 17 16:18:52 2011 -0700 @@ -1,46 +1,14 @@ -from django import http -from django.db.models import Model -from django.db.models.query import QuerySet -from django.core.serializers import serialize +from django.views.generic.detail import BaseDetailView +from django.views.generic.edit import FormView from django.views.generic.list import BaseListView, MultipleObjectTemplateResponseMixin -from django.views.generic.detail import BaseDetailView -from django.utils.functional import curry -from django.utils.simplejson import dumps, loads, JSONEncoder +from vcweb.core.views import JSONResponseMixin from vcweb.lighterprints.models import Activity import collections import logging logger = logging.getLogger(__name__) -class DjangoJSONEncoder(JSONEncoder): - def default(self, obj): - if isinstance(obj, QuerySet): - return loads(serialize('json', obj)) - elif isinstance(obj, Model): - return loads(serialize('json', [obj]))[0] - else: - return JSONEncoder.default(self, obj) - -dumps = curry(dumps, cls=DjangoJSONEncoder) - -class JSONResponseMixin(object): - def render_to_response(self, context, **kwargs): - "Returns a JSON response containing 'context' as payload" - return self.get_json_response(self.convert_context_to_json(context, **kwargs)) - - def get_json_response(self, content, **httpresponse_kwargs): - "Construct an `HttpResponse` object." - logger.debug("return json response %s", content) - return http.HttpResponse(content, - content_type='application/json', - **httpresponse_kwargs) - - def convert_context_to_json(self, context, context_key='object_list', **kwargs): - "Convert the context dictionary into a JSON object" - logger.debug("serializing context %s with context_key %s", context, context_key) - return dumps(context[context_key]) -# return serializers.serialize('json', context[context_key]) class ActivityListView(JSONResponseMixin, BaseListView, MultipleObjectTemplateResponseMixin): # FIXME: replace with dynamic set @@ -67,3 +35,6 @@ class ActivityDetailView(JSONResponseMixin, BaseDetailView): template_name = 'lighterprints/activity_detail.html' + +class DoActivityView(FormView): + pass http://bitbucket.org/virtualcommons/vcweb/changeset/af7697802e3d/ changeset: af7697802e3d user: alllee date: 2011-06-18 01:50:26 summary: more cleanup, using DjangoJSONEncoder instead of JSONEncoder affected #: 3 files (696 bytes) --- a/vcweb/core/templates/includes/nav-menu.html Fri Jun 17 16:18:52 2011 -0700 +++ b/vcweb/core/templates/includes/nav-menu.html Fri Jun 17 16:50:26 2011 -0700 @@ -11,13 +11,12 @@ <div id='menu'><ul> + <li class='{% active request home %}' ><a href='{{ home }}' class='first'>Home</a></li> {% if request.user.is_authenticated %} - <li class='{% active request home %}' ><a href='{{ home }}' class='first'>Home</a></li><li class='{% active_re request dashboard %}'><a href='{{ dashboard }}'>Dashboard</a></li><li class='{% active request profile %}'><a href='{{ profile }}'>Profile</a></li><li class='{% active request logout %}'><a href='{{ logout }}'>Logout</a></li> {% else %} - <li class='{% active request home %}' ><a href='{{ home }}' class='first'>Home</a></li><li class='{% active request about %}'><a href='{{ about }}'>About</a></li><li class='{% active request contact %}'><a href='{{ contact }}'>Contact us</a></li><li class='{% active request login %} {% active request register %}'><a href='{{ login }}'>Login/Register</a></li> --- a/vcweb/core/views.py Fri Jun 17 16:18:52 2011 -0700 +++ b/vcweb/core/views.py Fri Jun 17 16:50:26 2011 -0700 @@ -6,12 +6,13 @@ from django.db.models import Model from django.db.models.query import QuerySet from django.core.serializers import serialize +from django.core.serializers.json import DjangoJSONEncoder from django.http import HttpResponse from django.shortcuts import render_to_response, redirect from django.template.context import RequestContext from django.utils.decorators import method_decorator from django.utils.functional import curry -from django.utils.simplejson import dumps, loads, JSONEncoder +from django.utils.simplejson import loads, dumps from django.views.generic import ListView, FormView, TemplateView from django.views.generic.base import TemplateResponseMixin from django.views.generic.detail import SingleObjectMixin, DetailView @@ -25,17 +26,16 @@ import logging logger = logging.getLogger(__name__) -""" account registration / login / logout / profile views """ -class DjangoJSONEncoder(JSONEncoder): +class VcwebJSONEncoder(DjangoJSONEncoder): def default(self, obj): if isinstance(obj, QuerySet): return loads(serialize('json', obj)) elif isinstance(obj, Model): return loads(serialize('json', [obj]))[0] else: - return JSONEncoder.default(self, obj) + return DjangoJSONEncoder.default(self, obj) -dumps = curry(dumps, cls=DjangoJSONEncoder) +dumps = curry(dumps, cls=VcwebJSONEncoder) class JSONResponseMixin(object): def render_to_response(self, context, **kwargs): @@ -55,11 +55,16 @@ return dumps(context[context_key]) class AnonymousMixin(object): + """ provides the anonymous_required decorator """ @method_decorator(anonymous_required) def dispatch(self, *args, **kwargs): return super(AnonymousMixin, self).dispatch(*args, **kwargs) class Dashboard(ListView, TemplateResponseMixin): + """ + general dashboard for participants or experimenters that displays a list of + experiments to either participate in or configure/manage/monitor, respectively + """ context_object_name = 'experiments' def get_template_names(self): user = self.request.user @@ -70,6 +75,8 @@ return Experiment.objects.filter(experimenter__pk=self.request.user.experimenter.pk) else: # nested dictionary, {ExperimentMetadata -> { status -> [experiments,...] }} +# FIXME: could also use collections.defaultdict or regroup template tag to +# accomplish this.. experiment_dict = {} for experiment in user.participant.experiments.exclude(status__in=(Experiment.INACTIVE, Experiment.PAUSED, Experiment.COMPLETED)): if not experiment.experiment_metadata in experiment_dict: --- a/vcweb/lighterprints/templates/lighterprints/activity_list.html Fri Jun 17 16:18:52 2011 -0700 +++ b/vcweb/lighterprints/templates/lighterprints/activity_list.html Fri Jun 17 16:50:26 2011 -0700 @@ -11,4 +11,16 @@ {% endfor %} </ul> {% endfor %} +{% comment %} +<h3>regroup method</h3> +{% regroup activity_list by level as level_list %} +{% for level in level_list %} +<h3>Level {{level.grouper}} Activities</h3> +<ul> + {% for activity in level.list %} + <li>{{activity}}</li> + {% endfor %} +</ul> +{% endfor %} +{% endcomment %} {% endblock page %} Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |