Skip to content

Instantly share code, notes, and snippets.

@kirang89
Last active October 20, 2015 08:53
Show Gist options
  • Save kirang89/8e66bb9f6fa6a31c1711 to your computer and use it in GitHub Desktop.
Save kirang89/8e66bb9f6fa6a31c1711 to your computer and use it in GitHub Desktop.
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
from datetime import datetime
class DictMixin(object):
def to_dict(self):
return self._parse_dict(self.__dict__)
def _parse_dict(self, instance_dict):
result = {}
for key, value in instance_dict.items():
result[key] = self._parse(value)
return result
def _parse(self, value):
if isinstance(value, DictMixin):
return value.to_dict()
elif isinstance(value, dict):
return self._parse_dict(value)
elif isinstance(value, list):
return [self._parse(v) for v in value]
elif hasattr(value, '__dict__'):
return self._parse_dict(value.__dict__)
elif isinstance(value, datetime):
return datetime.isoformat(value)
else:
return value
class Person():
def __init__(self, name, age):
self.name, self.age = name, age
self.created_at = datetime.utcnow()
class Programmer(DictMixin):
def __init__(self, person, role):
self.person = person
self.role = role
if __name__ == '__main__':
p = Person('Kiran', 25)
pr = Programmer(p, 'Web Developer')
print(pr.to_dict())
# Output:
# {
# 'person': {
# 'created_at': '2015-10-20T08:34:57.193786',
# 'age': 25,
# 'name': 'Kiran'
# },
# 'role': 'Web Developer'
# }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment