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
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
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)
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)