From 8eda9f6703e74d2d88bbd6a26ca1505648732754 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 4 May 2016 10:56:24 +0200 Subject: [PATCH] make Field.anonymise an advanced admin attribute for some fields (#10828) It allows overriding default anonymise value for fields which could be used for making privacy safe statistics. --- wcs/fields.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/wcs/fields.py b/wcs/fields.py index e930556..0e2e8bc 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -143,6 +143,8 @@ class Field(object): store_display_value = None store_structured_value = None + # flag a field for removal by AnonymiseWorkflowStatusItem + # can be overriden in field' settings anonymise = True stats = None @@ -400,6 +402,10 @@ class WidgetField(Field): form.add(PrefillSelectionWidget, 'prefill', title = _('Prefill'), value=self.prefill, advanced=prefill_in_advanced, **self.prefill_kwargs) + if 'anonymise' in self.get_admin_attributes(): + # override anonymise flag default value + form.add(CheckboxWidget, 'anonymise', title=_('Anonymize'), + value=self.anonymise, advanced=True) def check_admin_form(self, form): return @@ -567,7 +573,8 @@ class StringField(WidgetField): required=False) def get_admin_attributes(self): - return WidgetField.get_admin_attributes(self) + ['size', 'validation', 'data_source'] + return WidgetField.get_admin_attributes(self) + ['size', 'validation', 'data_source', + 'anonymise'] register_field_class(StringField) @@ -934,7 +941,7 @@ class DateField(WidgetField): def get_admin_attributes(self): return WidgetField.get_admin_attributes(self) + [ 'minimum_date', 'minimum_is_future', 'maximum_date', - 'date_in_the_past', 'date_can_be_today'] + 'date_in_the_past', 'date_can_be_today', 'anonymise'] def convert_value_from_str(self, value): return time.strptime(value, date_format()) @@ -1164,7 +1171,7 @@ class ItemField(WidgetField): def get_admin_attributes(self): return WidgetField.get_admin_attributes(self) + ['items', - 'show_as_radio', 'data_source', 'in_filters'] + 'show_as_radio', 'data_source', 'in_filters', 'anonymise'] def check_admin_form(self, form): items = form.get_widget('items').parse() @@ -1253,7 +1260,7 @@ class ItemsField(WidgetField): def get_admin_attributes(self): return WidgetField.get_admin_attributes(self) + ['items', - 'max_choices', 'data_source'] + 'max_choices', 'data_source', 'anonymise'] def check_admin_form(self, form): items = form.get_widget('items').parse() @@ -1808,7 +1815,7 @@ class MapField(WidgetField): def get_admin_attributes(self): return WidgetField.get_admin_attributes(self) + ['initial_zoom', 'min_zoom', 'max_zoom', 'default_position', - 'init_with_geoloc'] + 'init_with_geoloc', 'anonymise'] def get_view_value(self, value): widget = self.widget_class('x%s' % random.random(), value, readonly=True) -- 2.1.4