+ self._contactId = contactId
+ self._phoneNumber = util_misc.normalize_number(phoneNumber)
+
+ @classmethod
+ def from_handle_name(cls, handleName):
+ """
+ >>> ContactHandle.from_handle_name("+1 555 123-1234")
+ ('', '+15551231234')
+ >>> ContactHandle.from_handle_name("+15551231234")
+ ('', '+15551231234')
+ >>> ContactHandle.from_handle_name("123456|+15551231234")
+ ('123456', '+15551231234')
+ """
+ parts = handleName.split(cls._DELIMETER, 1)
+ if len(parts) == 2:
+ contactId, contactNumber = parts[0:2]
+ elif len(parts) == 1:
+ contactId, contactNumber = "", handleName
+ else:
+ raise RuntimeError("Invalid handle: %s" % handleName)
+
+ contactNumber = util_misc.normalize_number(contactNumber)
+ return contactId, contactNumber
+
+ @classmethod
+ def to_handle_name(cls, contactId, contactNumber):
+ """
+ >>> ContactHandle.to_handle_name('', "+1 555 123-1234")
+ '+15551231234'
+ >>> ContactHandle.to_handle_name('', "+15551231234")
+ '+15551231234'
+ >>> ContactHandle.to_handle_name('123456', "+15551231234")
+ '123456|+15551231234'
+ """
+ contactNumber = util_misc.normalize_number(contactNumber)
+ if contactId:
+ handleName = cls._DELIMETER.join((contactId, contactNumber))
+ else:
+ handleName = contactNumber
+ return handleName
+
+ @property
+ def contactID(self):
+ return self._contactId