def deserialize_contact(data, persistent=False): """ Transforms data (as JSON string or a dict) to a contact object """ if not data: return None if not persistent: pass # TODO if necessary else: from repository.models import Contact from vocabulary.models import CountryCode if isinstance(data, basestring): data = DictKeyAttribute(simplejson.loads(data)) elif isinstance(data, dict): data = DictKeyAttribute(data) try: obj = Contact.objects.get(pk=data.pk) except Contact.DoesNotExist: obj = Contact() obj.id = data.pk obj.firstname = data.firstname obj.middlename = data.middlename obj.lastname = data.lastname obj.email = data.email obj.affiliation = deserialize_institution(data.affiliation, True) obj.address = data.address obj.city = data.city obj.country = deserialize_vocabulary(data.country, True, CountryCode) obj.zip = data.zip obj.telephone = data.telephone obj.creator = deserialize_user(data.creator, True) obj.save() return obj