'To construct an unique ID for each wizard, we start with the module and
class name for uniqueness, we hash it because a wizard\'s ID is displayed
in the form\'s markup, and we\'d rather not expose code paths there.'

@property
def id(self):

    if (not self._hash_cache):
        full_path = force_text('.'.join([self.__module__, self.__class__.__name__])).encode('utf-8')
        hash = hashlib.sha1()
        hash.update(full_path)
        self._hash_cache = hash.hexdigest()
    return self._hash_cache
