Esempio n. 1
0
    def getSampledParametersQS(self, values_list=[], orderedFlag=True):
        '''
        Return query set of SampledParameters given the current constraints.  If no parameter is selected return None.
        @values_list can be assigned with additional columns that are supported by SPQuerySet(). Note that specificiation
        of a values_list will break the JSON serialization of geometry types. @orderedFlag may be set to False to reduce
        memory and time taken for queries that don't need ordered values.  If parameterID is not none then that parameter
        is added to the filter - used for parameterPlatformPNG generation.
        '''
        qparams = self._getQueryParms(group=SAMPLED)
        logger.debug('Building qs_sp...')
        if values_list == []:
            # If no .values(...) added to QS then items returned by iteration on qs_sp are model objects, not out wanted dictionaries
            values_list = SPQuerySet.rest_columns
            qs_sp = SampledParameter.objects.using(self.request.META['dbAlias']).filter(**qparams).values(*values_list)
        else:
            # May need select_related(...)
            qs_sp = SampledParameter.objects.using(self.request.META['dbAlias']).filter(**qparams).values(*values_list)

        # Save ordered queryset with no parameter in the filter for X3D display to get roll, pitch, and yaw
        self.qs_sp_no_parm = qs_sp

        # If the parametertimeplotid is selected from the UI then we need to have that filter in the QuerySet
        # before doing the raw SQL construction.  Use the qs_mp_no_parm member for QuerySets that shouldn't
        # be filtered by the parametertimeplotid, e.g. parametertime, 3D animation, etc
        if self.parameterID:
            logger.debug('Adding parameter__id=%d filter to qs_sp', int(self.parameterID))
            qs_sp = qs_sp.filter(parameter__id=int(self.parameterID))

        if orderedFlag:
            qs_sp = qs_sp.order_by('sample__instantpoint__activity__name', 'sample__instantpoint__timevalue')

        # Wrap SPQuerySet around either RawQuerySet or GeoQuerySet to control the __iter__() items for lat/lon etc.
        if self.kwargs.has_key('parametervalues'):
            if self.kwargs['parametervalues']:
                # A depth of 4 is needed in order to see Platform
                qs_sp = SampledParameter.objects.using(self.request.META['dbAlias']).select_related(
                            'sample__instantpoint__activity__platform').filter(**qparams)
                if orderedFlag:
                    qs_sp = qs_sp.order_by('sample__instantpoint__activity__name', 'sample__instantpoint__timevalue')
                sql = postgresifySQL(str(qs_sp.query))
                logger.debug('\n\nsql before query = %s\n\n', sql)
                pq = PQuery(self.request)
                sql = pq.addParameterValuesSelfJoins(sql, self.kwargs['parametervalues'], select_items=self.sampled_rest_select_items)
                logger.debug('\n\nsql after parametervalue query = %s\n\n', sql)
                qs_spq = SPQuerySet(self.request.META['dbAlias'], sql, values_list)
            else:
                logger.debug('Building SPQuerySet for SampledParameter...')
                qs_spq = SPQuerySet(self.request.META['dbAlias'], None, values_list, qs_sp=qs_sp)
        else:
            logger.debug('Building SPQuerySet for SampledParameter...')
            qs_spq = SPQuerySet(self.request.META['dbAlias'], None, values_list, qs_sp=qs_sp)

        if qs_spq is None:
            logger.debug('qs_spq.query = %s', str(qs_spq.query))
        else:
            logger.debug("No queryset returned for qparams = %s", pprint.pformat(qparams))

        return qs_spq
Esempio n. 2
0
    def getMeasuredParametersQS(self, values_list=[], orderedFlag=True):
        '''
        Return query set of MeasuremedParameters given the current constraints.  If no parameter is selected return None.
        @values_list can be assigned with additional columns that are supported by MPQuerySet(). Note that specificiation
        of a values_list will break the JSON serialization of geometry types. @orderedFlag may be set to False to reduce
        memory and time taken for queries that don't need ordered values.  If parameterID is not none then that parameter
        is added to the filter - used for parameterPlatformPNG generation.
        '''
        qparams = self._getQueryParms()
        logger.debug('Building qs_mp...')
        if values_list == []:
            # If no .values(...) added to QS then items returned by iteration on qs_mp are model objects, not out wanted dictionaries
            logger.debug(
                '... with values_list = []; using default rest_columns')
            qs_mp = MeasuredParameter.objects.using(
                self.request.META['dbAlias']).filter(**qparams).values(
                    *MPQuerySet.rest_columns)
        else:
            logger.debug('... with values_list = %s', values_list)
            qs_mp = MeasuredParameter.objects.using(
                self.request.META['dbAlias']).select_related(depth=2).filter(
                    **qparams).values(*values_list)

        # Save a queryset with no parameter in the filter
        self.qs_mp_no_order_no_parm = qs_mp
        if self.parameterID:
            logger.debug('Adding parameter__id=%d filter to qs_mp',
                         int(self.parameterID))
            qs_mp = qs_mp.filter(parameter__id=int(self.parameterID))

        if orderedFlag:
            qs_mp = qs_mp.order_by('measurement__instantpoint__activity__name',
                                   'measurement__instantpoint__timevalue')

        # Wrap MPQuerySet around either RawQuerySet or GeoQuerySet to control the __iter__() items for lat/lon etc.
        if self.kwargs.has_key('parametervalues'):
            if self.kwargs['parametervalues']:
                # A depth of 4 is needed in order to see Platform
                qs_mp = MeasuredParameter.objects.using(
                    self.request.META['dbAlias']).select_related(
                        depth=4).filter(**qparams)

                if self.parameterID:
                    logger.debug('Adding parameter__id=%d filter to qs_mp',
                                 int(self.parameterID))
                    qs_mp = qs_mp.filter(parameter__id=int(self.parameterID))

                if orderedFlag:
                    qs_mp = qs_mp.order_by(
                        'measurement__instantpoint__activity__name',
                        'measurement__instantpoint__timevalue')

                sql = postgresifySQL(str(qs_mp.query))
                logger.debug('\n\nsql before query = %s\n\n', sql)
                pq = PQuery(self.request)
                sql = pq.addParameterValuesSelfJoins(
                    sql,
                    self.kwargs['parametervalues'],
                    select_items=self.rest_select_items)
                logger.debug('\n\nsql after parametervalue query = %s\n\n',
                             sql)
                qs_mpq = MPQuerySet(sql, values_list)
            else:
                logger.debug('Building MPQuerySet with qs_mpquery = %s',
                             str(qs_mp.query))
                qs_mpq = MPQuerySet(None, values_list, qs_mp=qs_mp)
        else:
            logger.debug('Building MPQuerySet with qs_mpquery = %s',
                         str(qs_mp.query))
            qs_mpq = MPQuerySet(None, values_list, qs_mp=qs_mp)

        if qs_mpq is None:
            logger.debug('qs_mpq.query = %s', str(qs_mpq.query))
        else:
            logger.debug("No queryset returned for qparams = %s",
                         pprint.pformat(qparams))

        return qs_mpq