def wrapper(request, *args, **kwargs): from localground.account.models import Project r = request.GET or request.POST cookies = request.COOKIES project = None user = request.user alias = kwargs.get('identity', None) #inner method to get most recent project if default selection isn't valid def get_default_project(alias): projects = Project.objects.filter( owner=alias).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) project_id = r.get('project_id') or cookies.get('project_id_' + user.username) 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.account.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: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse( json.dumps({ 'code': 'failure', 'message': 'The project_id parameter must be an integer. \ You submitted: \'' + project_id + '\'' })) except Project.DoesNotExist: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse( json.dumps({ 'code': 'failure', 'message': 'Project #"' + project_id + '" does not exist' })) #is user authorized? #if project is not None and project.owner != user and not user.is_superuser: if project.can_view(user) == False: #if project id defined in cookies, pick the most recently updated project: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: 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(alias) # 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)
def wrapper(request, *args, **kwargs): from localground.account.models import Project r = request.GET or request.POST cookies = request.COOKIES project = None user = request.user alias = kwargs.get('identity', None) #inner method to get most recent project if default selection isn't valid def get_default_project(alias): projects = Project.objects.filter(owner=alias).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) project_id = r.get('project_id') or cookies.get('project_id_' + user.username) 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.account.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: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'The project_id parameter must be an integer. \ You submitted: \'' + project_id + '\'' })) except Project.DoesNotExist: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: return HttpResponse(json.dumps({ 'code': 'failure', 'message': 'Project #"' + project_id + '" does not exist' })) #is user authorized? #if project is not None and project.owner != user and not user.is_superuser: if project.can_view(user) == False: #if project id defined in cookies, pick the most recently updated project: if project_id == cookies.get('project_id_' + request.user.username): project = get_default_project(alias) else: 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(alias) # 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)