Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save mannyanebi/dc4affd685e87541a616b517b0746fc8 to your computer and use it in GitHub Desktop.
Save mannyanebi/dc4affd685e87541a616b517b0746fc8 to your computer and use it in GitHub Desktop.
Python object to dictionary - recursively convert
'''
Generic object to dict converter. Recursively convert.
Useful for testing and asserting objects with expectation.
'''
def todict(obj, classkey=None):
if isinstance(obj, dict):
data = {}
for (k, v) in obj.items():
data[k] = todict(v, classkey)
return data
elif hasattr(obj, "_ast"):
return todict(obj._ast())
elif hasattr(obj, "__iter__") and not isinstance(obj, str):
return [todict(v, classkey) for v in obj]
elif hasattr(obj, "__dict__"):
data = dict([(key, todict(value, classkey))
for key, value in obj.__dict__.items()
if not callable(value) and not key.startswith('_')])
if classkey is not None and hasattr(obj, "__class__"):
data[classkey] = obj.__class__.__name__
return data
elif isinstance(obj, datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S%z")
else:
return obj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment