0002-feeder-create-measure-for-integer-fields-43546.patch
tests/olap.model | ||
---|---|---|
287 | 287 |
"name": "stringCaseSensitive-é", |
288 | 288 |
"type": "string", |
289 | 289 |
"value": "\"field_stringCaseSensitive-é\"" |
290 |
}, |
|
291 |
{ |
|
292 |
"filter": true, |
|
293 |
"label": "8th field integer", |
|
294 |
"name": "integer", |
|
295 |
"type": "string", |
|
296 |
"value": "\"field_integer\"" |
|
297 | 290 |
} |
298 | 291 |
], |
299 | 292 |
"fact_table" : "\"formdata_demande\"", |
... | ... | |
416 | 409 |
"label" : "localisation géographique", |
417 | 410 |
"name" : "geolocation", |
418 | 411 |
"type" : "point" |
412 |
}, |
|
413 |
{ |
|
414 |
"name": "sum_integer", |
|
415 |
"label": "total du champ « 8th field integer »", |
|
416 |
"type": "integer", |
|
417 |
"expression": "SUM({fact_table}.\"field_integer\")" |
|
419 | 418 |
} |
420 | 419 |
], |
421 | 420 |
"name" : "formdata_demande", |
wcs_olap/feeder.py | ||
---|---|---|
616 | 616 |
self.formdata_json_index.append(varname) |
617 | 617 | |
618 | 618 | |
619 |
def has_digits_validation(field): |
|
620 |
return field.validation and field.validation.get('type') == 'digits' |
|
621 | ||
622 | ||
619 | 623 |
class WcsFormdefFeeder(object): |
620 | 624 |
def __init__(self, olap_feeder, formdef, do_feed=True): |
621 | 625 |
self.olap_feeder = olap_feeder |
... | ... | |
669 | 673 |
elif field.type == 'bool': |
670 | 674 |
field_def = 'boolean' |
671 | 675 |
elif field.type == 'string': |
672 |
field_def = 'varchar' |
|
676 |
if has_digits_validation(field): |
|
677 |
field_def = 'integer' |
|
678 |
else: |
|
679 |
field_def = 'varchar' |
|
673 | 680 |
else: |
674 | 681 |
continue |
675 | 682 |
columns[field.varname] = { |
... | ... | |
832 | 839 |
v = self.get_item_id(field, raw) |
833 | 840 |
else: |
834 | 841 |
v = None |
835 |
elif field.type in ('string', 'bool'): |
|
842 |
elif field.type == 'string': |
|
843 |
if has_digits_validation(field): |
|
844 |
if raw is not None: |
|
845 |
v = int(raw) |
|
846 |
else: |
|
847 |
v = raw |
|
848 |
elif field.type == 'bool': |
|
836 | 849 |
v = raw |
837 | 850 | |
838 | 851 |
# unstructured storage of field values |
... | ... | |
1068 | 1081 |
'filter': True, |
1069 | 1082 |
} |
1070 | 1083 |
elif field.type == 'string': |
1071 |
dimension = { |
|
1072 |
'name': dimension_name, |
|
1073 |
'label': dimension_label, |
|
1074 |
'type': 'string', |
|
1075 |
'value': quote(field_name), |
|
1076 |
'filter': True, |
|
1077 |
} |
|
1084 |
if has_digits_validation(field): |
|
1085 |
# we will define a SUM measure instead |
|
1086 |
cube['measures'].append({ |
|
1087 |
'name': 'sum_' + dimension_name, |
|
1088 |
'label': 'total du champ « %s »' % dimension_label, |
|
1089 |
'type': 'integer', |
|
1090 |
'expression': 'SUM({fact_table}.%s)' % quote(field_name), |
|
1091 |
}) |
|
1092 |
continue |
|
1093 |
else: |
|
1094 |
dimension = { |
|
1095 |
'name': dimension_name, |
|
1096 |
'label': dimension_label, |
|
1097 |
'type': 'string', |
|
1098 |
'value': quote(field_name), |
|
1099 |
'filter': True, |
|
1100 |
} |
|
1078 | 1101 |
else: |
1079 | 1102 |
continue |
1080 | 1103 |
if join: |
wcs_olap/wcs_api.py | ||
---|---|---|
202 | 202 |
varname = None |
203 | 203 |
in_filters = False |
204 | 204 |
anonymise = None |
205 |
validation = {} |
|
205 | 206 | |
206 | 207 | |
207 | 208 |
class Schema(BaseObject): |
208 |
- |