def wrapper(request, *args, **kwargs): from localground.apps.site.models import Project r = request.GET or request.POST cookies = request.COOKIES project = None user = request.user # inner method to get most recent project if default selection isn't # valid def get_default_project(user): projects = Project.objects.filter( owner=user).order_by('-time_stamp') if len(projects) > 0: return projects[0] return None # 1) if anonymous request, return error: if user.is_anonymous(): return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'User cannot be anonymous' })) # 2) order matters (defer to request param before cookie) # or cookies.get('project_id_' + user.username) project_id = r.get('project_id') if project_id is not None: if project_id in ['all', 'all#', '']: project = None elif project_id in ['add', 'add#']: project_name = r.get('project_name', None) if project_name is None: project = None else: # create a new project from localground.apps.site.models import UserProfile import time profile = UserProfile.objects.get(user=request.user) project = Project() project.name = project_name project.owner = user project.slug = '%s-%s' % (project_name, int(time.time())) project.access_authority = profile.default_view_authority project.save() else: try: project = Project.objects.get(id=int(project_id)) except ValueError: project = get_default_project(user) except Project.DoesNotExist: project = get_default_project(user) # is user authorized? # if project is not None and project.owner != user and not # user.is_superuser: if project.can_view(user) == False: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'Not authorized to view information for %s' % project.name })) else: # if no project id defined, pick the most recently updated project: project = get_default_project(user) # 3) update kwargs dict to return 'identity' entry to calling function: if kwargs is None: kwargs = {} kwargs.update({'project': project}) return function(request, *args, **kwargs)