def get_contributors(self, obj): contributor_info = [] if is_anonymized(self.context['request']): return contributor_info contributor_ids = obj.get('contributors', None) params_node = obj.get('node', None) if contributor_ids: for contrib_id in contributor_ids: user = User.load(contrib_id) unregistered_name = None if user.unclaimed_records.get(params_node): unregistered_name = user.unclaimed_records[params_node].get('name', None) contributor_info.append({ 'id': contrib_id, 'full_name': user.fullname, 'given_name': user.given_name, 'middle_names': user.middle_names, 'family_name': user.family_name, 'unregistered_name': unregistered_name, 'active': user.is_active }) return contributor_info
def get_contributors(self, obj): contributor_info = [] if is_anonymized(self.context['request']): return contributor_info contributor_ids = obj.get('contributors', None) params_node = obj.get('node', None) if contributor_ids: users = (OSFUser.objects.filter( guids___id__in=contributor_ids).only( 'fullname', 'given_name', 'middle_names', 'family_name', 'unclaimed_records', 'is_active').order_by('fullname')) for user in users: unregistered_name = None if user.unclaimed_records.get(params_node): unregistered_name = user.unclaimed_records[ params_node].get('name', None) contributor_info.append({ 'id': user._id, 'full_name': user.fullname, 'given_name': user.given_name, 'middle_names': user.middle_names, 'family_name': user.family_name, 'unregistered_name': unregistered_name, 'active': user.is_active }) return contributor_info
def get_paginated_response(self, data): """ Formats paginated response in accordance with JSON API. Creates pagination links from the view_name if embedded resource, rather than the location used in the request. """ kwargs = self.request.parser_context['kwargs'].copy() embedded = kwargs.pop('is_embedded', None) view_name = self.request.parser_context['view'].view_fqn reversed_url = None if embedded: reversed_url = reverse(view_name, kwargs=kwargs) response_dict = OrderedDict([ ('data', data), ('links', OrderedDict([ ('first', self.get_first_real_link(reversed_url)), ('last', self.get_last_real_link(reversed_url)), ('prev', self.get_previous_real_link(reversed_url)), ('next', self.get_next_real_link(reversed_url)), ('meta', OrderedDict([ ('total', self.page.paginator.count), ('per_page', self.page.paginator.per_page), ])) ])), ]) if is_anonymized(self.request): response_dict['meta'] = {'anonymous': True} return Response(response_dict)
def get_paginated_response(self, data): """ Formats paginated response in accordance with JSON API, as of version 2.1. Version 2.0 uses the response_dict_deprecated function, which does not return JSON API compliant pagination links. Creates pagination links from the view_name if embedded resource, rather than the location used in the request. """ kwargs = self.request.parser_context['kwargs'].copy() embedded = kwargs.pop('is_embedded', None) view_name = self.request.parser_context['view'].view_fqn reversed_url = None if embedded: reversed_url = reverse(view_name, kwargs=kwargs) if self.request.version < '2.1': response_dict = self.get_response_dict_deprecated(data, reversed_url) else: response_dict = self.get_response_dict(data, reversed_url) if is_anonymized(self.request): if response_dict.get('meta', False): response_dict['meta'].update({'anonymous': True}) else: response_dict['meta'] = {'anonymous': True} return Response(response_dict)
def get_contributors(self, obj): contributor_info = [] if is_anonymized(self.context['request']): return contributor_info contributor_ids = obj.get('contributors', None) params_node = obj.get('node', None) if contributor_ids: users = ( OSFUser.objects.filter(guids___id__in=contributor_ids) .only('fullname', 'given_name', 'middle_names', 'family_name', 'unclaimed_records', 'is_active') .order_by('fullname') ) for user in users: unregistered_name = None if user.unclaimed_records.get(params_node): unregistered_name = user.unclaimed_records[params_node].get('name', None) contributor_info.append({ 'id': user._id, 'full_name': user.fullname, 'given_name': user.given_name, 'middle_names': user.middle_names, 'family_name': user.family_name, 'unregistered_name': unregistered_name, 'active': user.is_active }) return contributor_info
def get_paginated_response(self, data): """ Formats paginated response in accordance with JSON API, as of version 2.1. Version 2.0 uses the response_dict_deprecated function, which does not return JSON API compliant pagination links. Creates pagination links from the view_name if embedded resource, rather than the location used in the request. """ kwargs = self.request.parser_context['kwargs'].copy() embedded = kwargs.pop('is_embedded', None) view_name = self.request.parser_context['view'].view_fqn reversed_url = None if embedded: reversed_url = reverse(view_name, kwargs=kwargs) if self.request.version < '2.1': response_dict = self.get_response_dict_deprecated( data, reversed_url) else: response_dict = self.get_response_dict(data, reversed_url) if is_anonymized(self.request): if response_dict.get('meta', False): response_dict['meta'].update({'anonymous': True}) else: response_dict['meta'] = {'anonymous': True} return Response(response_dict)
def get_contributors(self, obj): contributor_info = [] if is_anonymized(self.context["request"]): return contributor_info contributor_ids = obj.get("contributors", None) params_node = obj.get("node", None) if contributor_ids: for contrib_id in contributor_ids: user = User.load(contrib_id) unregistered_name = None if user.unclaimed_records.get(params_node): unregistered_name = user.unclaimed_records[params_node].get("name", None) contributor_info.append( { "id": contrib_id, "full_name": user.fullname, "given_name": user.given_name, "middle_names": user.middle_names, "family_name": user.family_name, "unregistered_name": unregistered_name, "active": user.is_active, } ) return contributor_info
def get_paginated_response(self, data): """ Formats paginated response in accordance with JSON API. Creates pagination links from the view_name if embedded resource, rather than the location used in the request. """ kwargs = self.request.parser_context['kwargs'].copy() embedded = kwargs.pop('is_embedded', None) view_name = self.request.parser_context['view'].view_fqn reversed_url = None if embedded: reversed_url = reverse(view_name, kwargs=kwargs) response_dict = OrderedDict([ ('data', data), ('links', OrderedDict([('first', self.get_first_real_link(reversed_url)), ('last', self.get_last_real_link(reversed_url)), ('prev', self.get_previous_real_link(reversed_url)), ('next', self.get_next_real_link(reversed_url)), ('meta', OrderedDict([ ('total', self.page.paginator.count), ('per_page', self.page.paginator.per_page), ]))])), ]) if is_anonymized(self.request): response_dict['meta'] = {'anonymous': True} return Response(response_dict)
def get_contributors(self, obj): contributor_info = [] if is_anonymized(self.context['request']): return contributor_info contributor_data = obj.get('contributors', None) params_node = obj.get('node', None) if contributor_data: contributor_ids = [each for each in contributor_data if isinstance(each, basestring)] # Very old logs may contain contributror data with dictionaries for non-registered contributors, # e.g. {'nr_email': '*****@*****.**', 'nr_name': 'Foo Bar'} non_registered_contributor_data = [each for each in contributor_data if isinstance(each, dict)] users = ( OSFUser.objects.filter(guids___id__in=contributor_ids) .only( 'fullname', 'given_name', 'middle_names', 'family_name', 'unclaimed_records', 'is_active', ) .order_by('fullname') ) for user in users: unregistered_name = None if user.unclaimed_records.get(params_node): unregistered_name = user.unclaimed_records[params_node].get('name', None) contributor_info.append({ 'id': user._id, 'full_name': user.fullname, 'given_name': user.given_name, 'middle_names': user.middle_names, 'family_name': user.family_name, 'unregistered_name': unregistered_name, 'active': user.is_active, }) # Add unregistered contributor data for nr_contrib in non_registered_contributor_data: full_name = nr_contrib.get('nr_name', '') guessed_names = impute_names_model(full_name) contributor_info.append({ 'id': None, 'full_name': full_name, 'unregistered_name': full_name, 'given_name': guessed_names['given_name'], 'middle_names': guessed_names['middle_names'], 'family_name': guessed_names['family_name'], 'active': False, }) return contributor_info
def anonymize_fields(self, obj, data): """ Consolidates logic to anonymize fields with contributor information on both registered_meta and registration_responses """ if is_anonymized(self.context['request']): anonymous_registration_response_keys = obj.get_contributor_registration_response_keys() for key in anonymous_registration_response_keys: if key in data: del data[key] return data
def anonymize_registered_meta(self, obj): """ Looks at every question on every page of the schema, for any titles matching ANONYMIZED_TITLES. If present, deletes that question's response from meta_values. """ meta_values = obj.registered_meta.values()[0] if is_anonymized(self.context['request']): registration_schema = RegistrationSchema.objects.get( _id=obj.registered_schema_id) for page in registration_schema.schema['pages']: for question in page['questions']: if question[ 'title'] in ANONYMIZED_TITLES and meta_values.get( question.get('qid')): del meta_values[question['qid']] return meta_values
def get_paginated_response(self, data): """ Formats paginated response in accordance with JSON API. Creates pagination links from the view_name if embedded resource, rather than the location used in the request. """ kwargs = self.request.parser_context["kwargs"].copy() embedded = kwargs.pop("is_embedded", None) view_name = self.request.parser_context["view"].view_fqn reversed_url = None if embedded: reversed_url = reverse(view_name, kwargs=kwargs) response_dict = self.get_response_dict(data, reversed_url) if is_anonymized(self.request): if response_dict.get("meta", False): response_dict["meta"].update({"anonymous": True}) else: response_dict["meta"] = {"anonymous": True} return Response(response_dict)