From ff7101c3fec03b36bb55669b6c2efdc6eec0351f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 25 Oct 2016 15:23:24 +0200 Subject: [PATCH] Small improvements in ValidateCustomFields() --- pillar/api/custom_field_validation.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pillar/api/custom_field_validation.py b/pillar/api/custom_field_validation.py index 08fa0da9..d9fc547e 100644 --- a/pillar/api/custom_field_validation.py +++ b/pillar/api/custom_field_validation.py @@ -10,30 +10,34 @@ log = logging.getLogger(__name__) class ValidateCustomFields(Validator): def convert_properties(self, properties, node_schema): + """Converts datetime strings and ObjectId strings to actual Python objects.""" + date_format = current_app.config['RFC1123_DATE_FORMAT'] for prop in node_schema: - if not prop in properties: + if prop not in properties: continue schema_prop = node_schema[prop] prop_type = schema_prop['type'] + if prop_type == 'dict': properties[prop] = self.convert_properties( properties[prop], schema_prop['schema']) - if prop_type == 'list': + elif prop_type == 'list': if properties[prop] in ['', '[]']: properties[prop] = [] - for k, val in enumerate(properties[prop]): - if not 'schema' in schema_prop: - continue - item_schema = {'item': schema_prop['schema']} - item_prop = {'item': properties[prop][k]} - properties[prop][k] = self.convert_properties( - item_prop, item_schema)['item'] + if 'schema' in schema_prop: + for k, val in enumerate(properties[prop]): + item_schema = {'item': schema_prop['schema']} + item_prop = {'item': properties[prop][k]} + properties[prop][k] = self.convert_properties( + item_prop, item_schema)['item'] + # Convert datetime string to RFC1123 datetime elif prop_type == 'datetime': prop_val = properties[prop] properties[prop] = datetime.strptime(prop_val, date_format) + elif prop_type == 'objectid': prop_val = properties[prop] if prop_val: