예제 #1
0
    def get_filter_tree(self,
                        url_name='lizard_fewsjdbc.jdbc_source',
                        ignore_cache=False,
                        cache_timeout=CACHE_TIMEOUT):
        """
        Gets filter tree from Jdbc source. Also adds url per filter
        which links to url_name.

        [{'name': <name>, 'url': <url>, children: [...]}]

        url, children is optional. If url_name is set to None, no url
        property will be set in the filter tree (useful if the
        standard fewsjdbc urls don't exist, for instance when only the
        REST API is used).

        Uses cache unless ignore_cache == True. cache_timeout gives
        an alternative timeout duration for the cache, in seconds.
        """

        filter_source_cache_key = '%s::%s::%s' % (
            url_name, FILTER_CACHE_KEY, self.slug)
        #filter_tree = cache.get(filter_source_cache_key)
        filter_tree = None
        if filter_tree is None or ignore_cache:
            # Building up the fews filter tree.
            if self.usecustomfilter:
                named_filters = self._customfilter
                root_parent = None
            else:
                try:
                    filters = self.query(
                        "select distinct id, name, parentid from filters;")
                except FewsJdbcNotAvailableError, e:
                    return [{'name': 'Jdbc2Ei server not available.',
                             'error': e}]
                except FewsJdbcQueryError, e:
                    logger.error("JdbcSource returned an error: %s" % e)
                    return [{'name': 'Jdbc data source not available.',
                             'error code': e}]

                unique_filters = unique_list(filters)
                named_filters = named_list(unique_filters,
                                           ['id', 'name', 'parentid'])
                if self.filter_tree_root:
                    root_parent = self.filter_tree_root
                else:
                    root_parent = JDBC_NONE
예제 #2
0
    def get_named_parameters(self, filter_id, ignore_cache=False,
                             find_lowest=True,
                             url_name='lizard_fewsjdbc.jdbc_source',
                             cache_timeout=CACHE_TIMEOUT):
        """
        Get named parameters given filter_id: [{'name': <filter>,
        'parameterid': <parameterid1>, 'parameter': <parameter1>},
        ...]

        The parameters are parameters from the lowest filter below
        given filter_id.

        If find_lowest is True, then this function first searches for
        all the leaf filter nodes below this one, and then returns the
        parameters of those. If find_lowest is set to False (for
        instance because filter_id is already known to be a leaf),
        only parameters directly connected to this filter are
        returned.

        Uses cache unless ignore_cache == True. cache_timeout gives
        an alternative timeout duration for the cache, in seconds.
        """
        parameter_cache_key = ('%s::%s::%s' %
                               (FILTER_CACHE_KEY, self.slug, str(filter_id)))
        named_parameters = cache.get(parameter_cache_key)

        if find_lowest:
            filter_names = lowest_filters(
                filter_id, self.get_filter_tree(url_name=url_name))
        else:
            filter_names = (filter_id,)

        filter_query = " or ".join(
            ["id='%s'" % filter_name for filter_name in filter_names])

        if ignore_cache or named_parameters is None:
            parameter_result = self.query(
                ("select name, parameterid, parameter, id "
                 "from filters where %s" % filter_query))
            unique_parameters = unique_list(parameter_result)
            named_parameters = named_list(
                unique_parameters,
                ['filter_name', 'parameterid', 'parameter', 'filter_id'])
            cache.set(parameter_cache_key, named_parameters, cache_timeout)

        return named_parameters
예제 #3
0
 def test_unique_list2(self):
     rows = [[1, 2], [2, 2], [3, 4], [2, 2], [1, 2]]
     result = unique_list(rows)
     result_good = [[1, 2], [2, 2], [3, 4]]
     self.assertEqual(result, result_good)
예제 #4
0
 def test_unique_list(self):
     rows = [1, 2, 2, 3, 4, 5, 5, 7, 2, 5]
     result = unique_list(rows)
     result_good = [1, 2, 3, 4, 5, 7]
     self.assertEqual(result, result_good)