def serialize_contact(contact): from temba.contacts.models import Contact from temba.msgs.models import Msg from temba.values.models import Value org_fields = { f.id: f for f in contact.org.contactfields.filter(is_active=True) } values = Value.objects.filter(contact=contact, contact_field_id__in=org_fields.keys()) field_values = {} for v in values: field = org_fields[v.contact_field_id] field_values[field.key] = { 'value': Contact.serialize_field_value(field, v), 'created_on': v.created_on.isoformat() } _contact, contact_urn = Msg.resolve_recipient(contact.org, None, contact, None) serialized = { 'uuid': contact.uuid, 'name': contact.name, 'urns': [urn.urn for urn in contact.urns.all()], 'group_uuids': [group.uuid for group in contact.user_groups.all()], 'timezone': "UTC", 'language': contact.language, 'fields': field_values } # only populate channel if this contact can actually be reached (ie, has a URN) if contact_urn: channel = contact.org.get_send_channel(contact_urn=contact_urn) if channel: serialized['channel_uuid'] = channel.uuid return serialized