def to_representation(self, data): """Overridden to optimize db calls.""" # Not sure when the data is a models.Manager or a QuerySet. It seems # like this method, in general, is going to cause a bunch of issues as we # extend the data model. # NL: Extending this method to add in profile_id lookup if isinstance(data, (models.Manager, models.QuerySet)): iterable = data.all().values(*PVFIELDS) view_ids = [] results = [] for row in iterable: view_ids.append(row['id']) results.append(unflatten_values(row, ['state', 'cycle'])) else: iterable = data view_ids = [view.id for view in iterable] results = [] # grab the organization and profile_id. In testing the context is none in some cases. if self.context.get('request') is not None: org_id = self.get_organization(self.context['request']) profile_id = self.context['request'].query_params.get( 'profile_id', None) show_columns = self.get_show_columns(org_id, profile_id) else: show_columns = None for item in iterable: cycle = [(field, getattr(item.cycle, field, None)) for field in CYCLE_FIELDS] cycle = OrderedDict(cycle) state = PropertyStateSerializer(item.state, show_columns=show_columns).data representation = OrderedDict(( ('id', item.id), ('property', item.property_id), ('created', item.property.created), ('updated', item.property.updated), ('state', state), ('cycle', cycle), )) results.append(representation) certifications = GreenAssessmentProperty.objects.filter( view__in=view_ids).prefetch_related('assessment', 'urls', 'view') certset = {} for certification in certifications: record = certset.setdefault(certification.view_id, []) record.append( GreenAssessmentPropertyReadOnlySerializer(certification).data) for row in results: row['certifications'] = certset.get(row['id'], None) return results
def to_representation(self, data): """Overridden to optimize db calls.""" # Not sure when the data is a models.Manager or a QuerySet. It seems # like this method, in general, is going to cause a bunch of issues as we # extend the data model. if isinstance(data, (models.Manager, models.QuerySet)): iterable = data.all().values(*PVFIELDS) view_ids = [] results = [] for row in iterable: view_ids.append(row['id']) results.append(unflatten_values(row, ['state', 'cycle'])) else: iterable = data view_ids = [view.id for view in iterable] results = [] for item in iterable: cycle = [(field, getattr(item.cycle, field, None)) for field in CYCLE_FIELDS] cycle = OrderedDict(cycle) state = PropertyStateSerializer(item.state).data representation = OrderedDict(( ('id', item.id), ('property', item.property_id), ('created', item.property.created), ('updated', item.property.updated), ('state', state), ('cycle', cycle), )) results.append(representation) certifications = GreenAssessmentProperty.objects.filter( view__in=view_ids).prefetch_related('assessment', 'urls', 'view') certset = {} for certification in certifications: record = certset.setdefault(certification.view_id, []) record.append( GreenAssessmentPropertyReadOnlySerializer(certification).data) for row in results: row['certifications'] = certset.get(row['id'], None) return results
def to_representation(self, data): """Overridden to optimize db calls.""" # print(PVFIELDS) if isinstance(data, (models.Manager, models.QuerySet)): iterable = data.all().values(*PVFIELDS) view_ids = [] results = [] for row in iterable: view_ids.append(row['id']) results.append(unflatten_values(row, ['state', 'cycle'])) else: iterable = data view_ids = [view.id for view in iterable] results = [] for item in iterable: cycle = [(field, getattr(item.cycle, field, None)) for field in CYCLE_FIELDS] cycle = OrderedDict(cycle) state = [(field, getattr(item.state, field, None)) for field in PROPERTY_STATE_FIELDS] state = OrderedDict(state) representation = OrderedDict(( ('id', item.id), ('property_id', item.property_id), ('state', state), ('cycle', cycle), )) results.append(representation) certifications = GreenAssessmentProperty.objects.filter( view__in=view_ids).prefetch_related('assessment', 'urls', 'view') certset = {} for certification in certifications: record = certset.setdefault(certification.view_id, []) record.append( GreenAssessmentPropertyReadOnlySerializer(certification).data) for row in results: row['certifications'] = certset.get(row['id'], None) return results
def test_get_certifications(self): """Test get_certifications""" expected = [GreenAssessmentPropertyReadOnlySerializer(self.gap).data] self.assertEqual( self.serializer.get_certifications(self.property_view), expected)