<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_archive_as_dir(self, zip_file_obj):
 """ Add archive to the storage and unpack it. Args: zip_file_obj (file):
 Opened file-like object. Returns: obj: Path where the `zip_file_obj` was unpacked wrapped in \ :class:`.PathAndHash` structure. Raises: ValueError: If there is too many files in .zip archive. \ See :attr:`._max_zipfiles` for details. AssertionError: If the `zip_file_obj` is not file-like object. """

        BalancedDiscStorage._check_interface(zip_file_obj)

        file_hash = self._get_hash(zip_file_obj)
        dir_path = self._create_dir_path(file_hash)
        full_path = os.path.join(dir_path, file_hash)

        if os.path.exists(full_path):
            shutil.rmtree(full_path)

        os.mkdir(full_path)

        try:
            self._unpack_zip(zip_file_obj, full_path)
        except Exception:
            shutil.rmtree(full_path)
            raise

        return PathAndHash(path=full_path, hash=file_hash)