You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.0 KiB

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
xxObject = { # a dict that describe multi-field
'field_1': {
'optional': ..., # field force require or not
'default': ..., # default value when field is not exist (optional == True)
'allowNone': ..., # whether the value can be None (override the format and filter process)
'type': ..., # type of field content (in filter process) (any / type / list / dict)
'multiSub': ..., # whether there are multi subObject (type is dict)
'indexKey': ..., # index key of subObject (type is dict and multiSub == True)
'format': ..., # format function (before filter process) (invalid content -> throw error)
'filter': ..., # filter function -> bool (throw error when return False)
'errMsg': ..., # raise message if there is something error
},
'field_2': {
...
},
...
}
default value
+ optional: False
+ default: None
+ allowNone: False
+ format: lambda -> return same thing
+ type: force require
+ multiSub: False
+ indexKey: 'type'
+ filter: lambda -> return True
+ errMsg: 'filter error'
pre process
=> field not exist
=> optional == False -> throw errMsg
=> optional == True -> set as default value -> continue
=> field exist
=> filed is None
=> allowNone is False -> throw errMsg
=> allowNone is True -> break
=> field is not None -> continue
format process -> set as field value (maybe throw error -> catch and throw errMsg)
filter process
=> type is `any` -> filter function check (skip type compare)
=> type is `type` -> compare with field type -> filter function check
=> type is `list` -> compare every type in list with field -> filter function check
=> type is `dict`
=> multiSub == False -> recursive check
=> multiSub == True
=> field content is not dict or not include indexKey -> throw error
=> others
=> indexKey's content not in type (dict) -> throw error
=> others -> recursive check
"""