def build_categorias(self, categorias, options): ''' Constrói a parte dos atributos selecionados na query ''' if not QueryBuilder.check_params(options, ['categorias']): raise ValueError('Invalid Categories - required') categorias = QueryBuilder.transform_categorias(categorias) prepended_aggr = QueryBuilder.prepend_aggregations(options.get('agregacao')) str_calcs = '' if QueryBuilder.check_params(options, ['calcs']): calcs_options = options.copy() calcs_options['categorias'] = categorias str_calcs += self.build_std_calcs(calcs_options) if QueryBuilder.check_params(options, ['agregacao', 'valor']): tmp_cats = self.combine_val_aggr(options.get('valor'), options.get('agregacao')) if not isinstance(tmp_cats, list): categorias += tmp_cats.split(", ") else: categorias += tmp_cats elif (not QueryBuilder.check_params(options, ['agregacao']) and QueryBuilder.check_params(options, ['valor'])): categorias += options['valor'] elif (QueryBuilder.check_params(options, ['agregacao']) and not QueryBuilder.check_params(options, ['valor'])): categorias += self.build_generic_agr_array(options['agregacao']) if (QueryBuilder.validate_field_array(categorias) and QueryBuilder.validate_field_array(prepended_aggr)): if 'calcs' not in options or options['calcs'] is None or str_calcs == '': return ' '.join(prepended_aggr) + ' ' + ', '.join(categorias) return ' '.join(prepended_aggr) + ' ' + ', '.join(categorias) + ', ' + str_calcs raise ValueError('Invalid attributes')
def test_validate_semi_transform(self): ''' Verifica construção de categorias com transformação em parte ''' categorias = ['vl_indicador-valor', 'cd_ibge'] expected = ['vl_indicador AS valor', 'cd_ibge'] transformed = QueryBuilder.transform_categorias(categorias) self.assertEqual(transformed, expected)