# Path: zarr/_storage/store.py
# class Store(BaseStore):
#     """Abstract store class used by implementations following the Zarr v2 spec.
# 
#     Adds public `listdir`, `rename`, and `rmdir` methods on top of BaseStore.
# 
#     .. added: 2.11.0
# 
#     """
# 
#     def listdir(self, path: str = "") -> List[str]:
#         path = normalize_storage_path(path)
#         return _listdir_from_keys(self, path)
# 
#     def rmdir(self, path: str = "") -> None:
#         if not self.is_erasable():
#             raise NotImplementedError(
#                 f'{type(self)} is not erasable, cannot call "rmdir"'
#             )  # pragma: no cover
#         path = normalize_storage_path(path)
#         _rmdir_from_keys(self, path)
# 
# Path: zarr/util.py
# def json_dumps(o: Any) -> bytes:
#     """Write JSON in a consistent, human-readable way."""
#     return json.dumps(o, indent=4, sort_keys=True, ensure_ascii=True,
#                       separators=(',', ': ')).encode('ascii')


from collections.abc import MutableMapping
from zarr._storage.store import Store
from zarr.util import json_dumps

        # load existing data
        d = self._get_nosync()

        # set key value
        d[item] = value

        # _put modified data
        self._put_nosync(d)

    def __delitem__(self, item):
        self._write_op(self._delitem_nosync, item)

    def _delitem_nosync(self, key):

        # load existing data
        d = self._get_nosync()

        # delete key value
        del d[key]

        # _put modified data
        self._put_nosync(d)

    def put(self, d):
        """Overwrite all attributes with the key/value pairs in the provided dictionary
        `d` in a single operation."""
        self._write_op(self._put_nosync, d)

    def _put_nosync(self, d):

# Path: zarr/_storage/store.py
# class Store(BaseStore):
#     """Abstract store class used by implementations following the Zarr v2 spec.
# 
#     Adds public `listdir`, `rename`, and `rmdir` methods on top of BaseStore.
# 
#     .. added: 2.11.0
# 
#     """
# 
#     def listdir(self, path: str = "") -> List[str]:
#         path = normalize_storage_path(path)
#         return _listdir_from_keys(self, path)
# 
#     def rmdir(self, path: str = "") -> None:
#         if not self.is_erasable():
#             raise NotImplementedError(
#                 f'{type(self)} is not erasable, cannot call "rmdir"'
#             )  # pragma: no cover
#         path = normalize_storage_path(path)
#         _rmdir_from_keys(self, path)
# 
# Path: zarr/util.py
# def json_dumps(o: Any) -> bytes:
#     """Write JSON in a consistent, human-readable way."""
#     return json.dumps(o, indent=4, sort_keys=True, ensure_ascii=True,
#                       separators=(',', ': ')).encode('ascii')


# Path: zarr/attrs.py
from collections.abc import MutableMapping
from zarr._storage.store import Store
from zarr.util import json_dumps


        # load existing data
        d = self._get_nosync()

        # set key value
        d[item] = value

        # _put modified data
        self._put_nosync(d)

    def __delitem__(self, item):
        self._write_op(self._delitem_nosync, item)

    def _delitem_nosync(self, key):

        # load existing data
        d = self._get_nosync()

        # delete key value
        del d[key]

        # _put modified data
        self._put_nosync(d)

    def put(self, d):
        """Overwrite all attributes with the key/value pairs in the provided dictionary
        `d` in a single operation."""
        self._write_op(self._put_nosync, d)

    def _put_nosync(self, d):

        self.store[self.key] = json_dumps(d)