def _sync_case_phone_number(contact_case): phone_info = contact_case.get_phone_info() lock_keys = ['sync-case-phone-number-for-%s' % contact_case._id] if phone_info.phone_number: lock_keys.append('verifying-phone-number-%s' % phone_info.phone_number) with CriticalSection(lock_keys): phone_number = contact_case.get_verified_number() if ( phone_number and phone_number.contact_last_modified and phone_number.contact_last_modified >= contact_case.server_modified_on ): return if phone_info.requires_entry: try: contact_case.verify_unique_number(phone_info.phone_number) except (InvalidFormatException, PhoneNumberInUseException): if phone_number: phone_number.delete() return if not phone_number: phone_number = VerifiedNumber( domain=contact_case.domain, owner_doc_type=contact_case.doc_type, owner_id=contact_case._id, ) elif _phone_number_is_same(phone_number, phone_info): return phone_number.phone_number = phone_info.phone_number phone_number.backend_id = phone_info.sms_backend_id phone_number.ivr_backend_id = phone_info.ivr_backend_id phone_number.verified = True phone_number.contact_last_modified = contact_case.server_modified_on phone_number.save() else: if phone_number: phone_number.delete()