Fix payload generator for lists and dicts. (Add more comments in this util)

This commit is contained in:
Alex Root Junior 2017-11-28 17:21:37 +02:00
parent ff2b7f9682
commit 21f35273b7

View file

@ -2,10 +2,19 @@ import datetime
from . import json
DEFAULT_FILTER = ['self']
DEFAULT_FILTER = ['self', 'cls']
def generate_payload(exclude=None, **kwargs):
"""
Generate payload
Usage: payload = generate_payload(**locals(), exclude=['foo'])
:param exclude:
:param kwargs:
:return: dict
"""
if exclude is None:
exclude = []
return {key: value for key, value in kwargs.items() if
@ -14,13 +23,33 @@ def generate_payload(exclude=None, **kwargs):
and not key.startswith('_')}
def _normalize(obj):
"""
Normalize dicts and lists
:param obj:
:return: normalized object
"""
if isinstance(obj, list):
return [_normalize(item) for item in obj]
elif isinstance(obj, dict):
return {k: _normalize(v) for k, v in obj.items() if v is not None}
elif hasattr(obj, 'to_python'):
return obj.to_python()
return obj
def prepare_arg(value):
"""
Stringify dicts/lists and convert datetime/timedelta to unix-time
:param value:
:return:
"""
if value is None:
return value
elif isinstance(value, (list, dict)):
return json.dumps(value)
elif hasattr(value, 'to_python'):
return json.dumps(value.to_python())
elif isinstance(value, (list, dict)) or hasattr(value, 'to_python'):
return json.dumps(_normalize(value))
elif isinstance(value, datetime.timedelta):
now = datetime.datetime.now()
return int((now + value).timestamp())