def whoami(request): """ Return a JSON object representing the current user, either authenticated or anonymous. """ user = request.user if user.is_authenticated: data = { 'username': user.username, 'timezone': user.timezone, 'is_authenticated': True, 'is_staff': user.is_staff, 'is_superuser': user.is_superuser, 'is_beta_tester': user.is_beta_tester, 'gravatar_url': { 'small': gravatar_url(user.email, size=50), 'large': gravatar_url(user.email, size=200), } } else: data = { 'username': None, 'timezone': settings.TIME_ZONE, 'is_authenticated': False, 'is_staff': False, 'is_superuser': False, 'is_beta_tester': False, 'gravatar_url': { 'small': None, 'large': None, } } return JsonResponse(data)
def test_whoami(user_client, api_settings, wiki_user, beta_testers_group, timezone, is_staff, is_superuser, is_beta_tester): """Test responses for logged-in users.""" wiki_user.timezone = timezone wiki_user.is_staff = is_staff wiki_user.is_superuser = is_superuser wiki_user.is_staff = is_staff if is_beta_tester: wiki_user.groups.add(beta_testers_group) wiki_user.save() url = reverse('api.v1.whoami') response = user_client.get(url, HTTP_HOST=api_settings.BETA_HOST) assert response.status_code == 200 assert response['content-type'] == 'application/json' assert response.json() == { 'username': wiki_user.username, 'timezone': timezone, 'is_authenticated': True, 'is_staff': is_staff, 'is_superuser': is_superuser, 'is_beta_tester': is_beta_tester, 'gravatar_url': { 'small': gravatar_url(wiki_user.email, size=50), 'large': gravatar_url(wiki_user.email, size=200), } } assert_no_cache_header(response)
def whoami(request): """ Return a JSON object representing the current user, either authenticated or anonymous. """ user = request.user if user.is_authenticated: data = { 'username': user.username, 'timezone': user.timezone, 'is_authenticated': True, 'is_staff': user.is_staff, 'is_superuser': user.is_superuser, 'is_beta_tester': user.is_beta_tester, 'gravatar_url': { 'small': gravatar_url(user.email, size=50), 'large': gravatar_url(user.email, size=200), } } else: data = { 'username': None, 'timezone': settings.TIME_ZONE, 'is_authenticated': False, 'is_staff': False, 'is_superuser': False, 'is_beta_tester': False, 'gravatar_url': { 'small': None, 'large': None, } } return JsonResponse(data)
def whoami(request): """ Return a JSON object representing the current user, either authenticated or anonymous. """ user = request.user if user.is_authenticated: data = { 'username': user.username, 'timezone': user.timezone, 'is_authenticated': True, 'is_staff': user.is_staff, 'is_superuser': user.is_superuser, 'is_beta_tester': user.is_beta_tester, 'gravatar_url': { 'small': gravatar_url(user.email, size=50), 'large': gravatar_url(user.email, size=200), } } else: data = { 'username': None, 'timezone': settings.TIME_ZONE, 'is_authenticated': False, 'is_staff': False, 'is_superuser': False, 'is_beta_tester': False, 'gravatar_url': { 'small': None, 'large': None, } } # Add waffle data to the dict we're going to be returning. # This is what the waffle.wafflejs() template tag does, but we're # doing it via an API instead of hardcoding the settings into # the HTML page. See also from waffle.views._generate_waffle_js. # # Note that if we upgrade django-waffle, version 15 introduces a # pluggable flag model, and the approved way to get all flag # objects will then become: # get_waffle_flag_model().get_all() # data['waffle'] = { 'flags': {f.name: f.is_active(request) for f in Flag.get_all()}, 'switches': {s.name: s.is_active() for s in Switch.get_all()}, 'samples': {s.name: s.is_active() for s in Sample.get_all()}, } return JsonResponse(data)
def test_whoami(user_client, api_settings, wiki_user, beta_testers_group, timezone, is_staff, is_superuser, is_beta_tester): """Test responses for logged-in users.""" # Create some fake waffle objects Flag.objects.create(name='section_edit', authenticated=True) Flag.objects.create(name='flag_all', everyone=True) Flag.objects.create(name='flag_none', percent=0, superusers=False) Switch.objects.create(name="switch_on", active=True) Switch.objects.create(name="switch_off", active=False) Sample.objects.create(name="sample_never", percent=0) Sample.objects.create(name="sample_always", percent=100) wiki_user.timezone = timezone wiki_user.is_staff = is_staff wiki_user.is_superuser = is_superuser wiki_user.is_staff = is_staff if is_beta_tester: wiki_user.groups.add(beta_testers_group) wiki_user.save() url = reverse('api.v1.whoami') response = user_client.get(url, HTTP_HOST=api_settings.BETA_HOST) assert response.status_code == 200 assert response['content-type'] == 'application/json' assert response.json() == { 'username': wiki_user.username, 'timezone': timezone, 'is_authenticated': True, 'is_staff': is_staff, 'is_superuser': is_superuser, 'is_beta_tester': is_beta_tester, 'gravatar_url': { 'small': gravatar_url(wiki_user.email, size=50), 'large': gravatar_url(wiki_user.email, size=200), }, 'waffle': { 'flags': { 'section_edit': True, 'flag_all': True, 'flag_none': False, }, 'switches': { 'switch_on': True, 'switch_off': False }, 'samples': { 'sample_always': True, 'sample_never': False } } } assert_no_cache_header(response)
def test_whoami(user_client, api_settings, wiki_user, beta_testers_group, timezone, is_staff, is_superuser, is_beta_tester): """Test responses for logged-in users.""" # Create some fake waffle objects Flag.objects.create(name='section_edit', authenticated=True) Flag.objects.create(name='flag_all', everyone=True) Flag.objects.create(name='flag_none', percent=0, superusers=False) Switch.objects.create(name="switch_on", active=True) Switch.objects.create(name="switch_off", active=False) Sample.objects.create(name="sample_never", percent=0) Sample.objects.create(name="sample_always", percent=100) wiki_user.timezone = timezone wiki_user.is_staff = is_staff wiki_user.is_superuser = is_superuser wiki_user.is_staff = is_staff if is_beta_tester: wiki_user.groups.add(beta_testers_group) wiki_user.save() url = reverse('api.v1.whoami') response = user_client.get(url, HTTP_HOST=api_settings.BETA_HOST) assert response.status_code == 200 assert response['content-type'] == 'application/json' assert response.json() == { 'username': wiki_user.username, 'timezone': timezone, 'is_authenticated': True, 'is_staff': is_staff, 'is_superuser': is_superuser, 'is_beta_tester': is_beta_tester, 'gravatar_url': { 'small': gravatar_url(wiki_user.email, size=50), 'large': gravatar_url(wiki_user.email, size=200), }, 'waffle': { 'flags': { 'section_edit': True, 'flag_all': True, 'flag_none': False, }, 'switches': { 'switch_on': True, 'switch_off': False }, 'samples': { 'sample_always': True, 'sample_never': False } } } assert_no_cache_header(response)
def whoami(request): """ Return a JSON object representing the current user, either authenticated or anonymous. """ user = request.user if user.is_authenticated: data = { 'username': user.username, 'timezone': user.timezone, 'is_authenticated': True, 'is_staff': user.is_staff, 'is_superuser': user.is_superuser, 'is_beta_tester': user.is_beta_tester, 'gravatar_url': { 'small': gravatar_url(user.email, size=50), 'large': gravatar_url(user.email, size=200), } } else: data = { 'username': None, 'timezone': settings.TIME_ZONE, 'is_authenticated': False, 'is_staff': False, 'is_superuser': False, 'is_beta_tester': False, 'gravatar_url': { 'small': None, 'large': None, } } # Add waffle data to the dict we're going to be returning. # This is what the waffle.wafflejs() template tag does, but we're # doing it via an API instead of hardcoding the settings into # the HTML page. See also from waffle.views._generate_waffle_js. # # Note that if we upgrade django-waffle, version 15 introduces a # pluggable flag model, and the approved way to get all flag # objects will then become: # get_waffle_flag_model().get_all() # data['waffle'] = { 'flags': {f.name: f.is_active(request) for f in Flag.get_all()}, 'switches': {s.name: s.is_active() for s in Switch.get_all()}, 'samples': {s.name: s.is_active() for s in Sample.get_all()}, } return JsonResponse(data)
def fetch(self, pk): from .models import Document User = get_user_model() # first get a list of user ID recently authoring revisions document = Document.objects.get(pk=pk) recent_creator_ids = (document.revisions.order_by('-created') .values_list('creator_id', flat=True)) if not recent_creator_ids: return self.empty() # then return the ordered results given the ID list, MySQL only syntax select = collections.OrderedDict([ ('ordered_ids', 'FIELD(id,%s)' % ','.join(map(str, recent_creator_ids))), ]) contributors = list(User.objects.filter(id__in=list(recent_creator_ids), is_active=True) .extra(select=select, order_by=['ordered_ids']) .values('id', 'username', 'email')) result = [] for contributor in contributors: contributor['gravatar_34'] = gravatar_url(contributor['email'], size=34) result.append(contributor) return result
def fetch(self, pk): from .models import Document User = get_user_model() # first get a list of user ID recently authoring revisions document = Document.objects.get(pk=pk) recent_creator_ids = ( document.revisions.order_by('-created').values_list('creator_id', flat=True)) if not recent_creator_ids: return self.empty() # then return the ordered results given the ID list, MySQL only syntax select = collections.OrderedDict([ ('ordered_ids', 'FIELD(id,{0!s})'.format(','.join(map(str, recent_creator_ids)))), ]) contributors = list( User.objects.filter(id__in=list(recent_creator_ids), is_active=True).extra(select=select, order_by=['ordered_ids' ]).values( 'id', 'username', 'email')) result = [] for contributor in contributors: contributor['gravatar_34'] = gravatar_url(contributor['email'], size=34) result.append(contributor) return result
def fetch(self, pk): from .models import Document User = get_user_model() # first get a list of user ID recently authoring revisions document = Document.objects.get(pk=pk) recent_creator_ids = document.revisions.order_by("-created").values_list("creator_id", flat=True) if not recent_creator_ids: return self.empty() # then return the ordered results given the ID list, MySQL only syntax select = collections.OrderedDict( [("ordered_ids", "FIELD(id,{0!s})".format(",".join(map(str, recent_creator_ids))))] ) contributors = list( User.objects.filter(id__in=list(recent_creator_ids), is_active=True) .extra(select=select, order_by=["ordered_ids"]) .values("id", "username", "email") ) result = [] for contributor in contributors: contributor["gravatar_34"] = gravatar_url(contributor["email"], size=34) result.append(contributor) return result
def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: document = item['obj'] # Include some of the simple elements from the preprocessed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) # HACK: DocumentFeed is the superclass of RevisionFeed. In this # case, current_revision is the revision itself. # TODO: Refactor this out into separate DocumentFeed and # RevisionFeed subclasses of Feed. if hasattr(document, 'current_revision'): revision = document.current_revision else: revision = document if revision.creator.email: item_out['author_avatar'] = gravatar_url( revision.creator.email) summary = getattr(revision, 'summary', None) if summary: item_out['summary'] = summary # Linkify the tags used in the feed item categories = dict((x, request.build_absolute_uri( reverse('wiki.tag', kwargs={'tag': x}))) for x in item['categories']) if categories: item_out['categories'] = categories items_out.append(item_out) data = items_out if callback: outfile.write('%s(' % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')
def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: # Include some of the simple elements from the preprocessed feed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) if item['obj'].creator.email: item_out['author_avatar'] = gravatar_url(item['obj'].creator.email) # Linkify the tags used in the feed item item_out['categories'] = dict( (x, request.build_absolute_uri(reverse('demos_tag', kwargs={'tag': x}))) for x in item['categories'] ) # Include a few more, raw from the submission object itself. item_out.update((x, unicode(getattr(item['obj'], x))) for x in ( 'summary', 'description', )) item_out['featured'] = item['obj'].featured # Include screenshot as an absolute URL. item_out['screenshot'] = request.build_absolute_uri( item['obj'].screenshot_url(1)) # HACK: This .replace() should probably be done in the model item_out['thumbnail'] = request.build_absolute_uri( item['obj'].thumbnail_url(1)) # TODO: What else might be useful in a JSON feed of demo submissions? # Comment, like, view counts may change too much for caching to be useful items_out.append(item_out) data = items_out if callback: outfile.write('%s(' % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')
def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: document = item['obj'] # Include some of the simple elements from the preprocessed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) # HACK: DocumentFeed is the superclass of RevisionFeed. In this # case, current_revision is the revision itself. # TODO: Refactor this out into separate DocumentFeed and # RevisionFeed subclasses of Feed. if hasattr(document, 'current_revision'): revision = document.current_revision else: revision = document if revision.creator.email: item_out['author_avatar'] = gravatar_url(revision.creator.email) summary = revision.summary if summary: item_out['summary'] = summary # Linkify the tags used in the feed item categories = dict( (x, request.build_absolute_uri( reverse('wiki.tag', kwargs={'tag': x}))) for x in item['categories'] ) if categories: item_out['categories'] = categories items_out.append(item_out) data = items_out if callback: outfile.write('{0!s}('.format(callback)) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')