Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
 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
Exemple #4
0
 def test_get_certifications(self):
     """Test get_certifications"""
     expected = [GreenAssessmentPropertyReadOnlySerializer(self.gap).data]
     self.assertEqual(
         self.serializer.get_certifications(self.property_view), expected)