File: C:/Users/fred/anaconda3/Lib/site-packages/zict/tests/test_zip.py
import zipfile
from collections.abc import MutableMapping
import pytest
from zict import Zip
from zict.tests import utils_test
@pytest.fixture
def fn(tmp_path, check_fd_leaks):
yield tmp_path / "tmp.zip"
def test_simple(fn):
z = Zip(fn)
assert isinstance(z, MutableMapping)
assert not z
assert list(z) == list(z.keys()) == []
assert list(z.values()) == []
assert list(z.items()) == []
z["x"] = b"123"
assert list(z) == list(z.keys()) == ["x"]
assert list(z.values()) == [b"123"]
assert list(z.items()) == [("x", b"123")]
assert z["x"] == b"123"
z.flush()
zz = zipfile.ZipFile(fn, mode="r")
assert zz.read("x") == b"123"
z["y"] = b"456"
assert z["y"] == b"456"
def test_setitem_typeerror(fn):
z = Zip(fn)
with pytest.raises(TypeError):
z["x"] = 123
def test_contextmanager(fn):
with Zip(fn) as z:
z["x"] = b"123"
zz = zipfile.ZipFile(fn, mode="r")
assert zz.read("x") == b"123"
def test_missing_key(fn):
z = Zip(fn)
with pytest.raises(KeyError):
z["x"]
def test_close(fn):
z = Zip(fn)
z["x"] = b"123"
z.close()
zz = zipfile.ZipFile(fn, mode="r")
assert zz.read("x") == b"123"
with pytest.raises(IOError):
z["y"] = b"123"
def test_bytearray(fn):
data = bytearray(b"123")
with Zip(fn) as z:
z["x"] = data
with Zip(fn) as z:
assert z["x"] == b"123"
def test_memoryview(fn):
data = memoryview(b"123")
with Zip(fn) as z:
z["x"] = data
with Zip(fn) as z:
assert z["x"] == b"123"
def check_mapping(z):
"""Shorter version of utils_test.check_mapping, as zip supports neither update nor
delete
"""
assert isinstance(z, MutableMapping)
utils_test.check_empty_mapping(z)
z["abc"] = b"456"
z["xyz"] = b"12"
assert len(z) == 2
assert z["abc"] == b"456"
utils_test.check_items(z, [("abc", b"456"), ("xyz", b"12")])
assert "abc" in z
assert "xyz" in z
assert "def" not in z
with pytest.raises(KeyError):
z["def"]
def test_mapping(fn):
"""
Test mapping interface for Zip().
"""
with Zip(fn) as z:
check_mapping(z)
utils_test.check_closing(z)
def test_no_delete_update(fn):
with Zip(fn) as z:
z["x"] = b"123"
with pytest.raises(NotImplementedError):
del z["x"]
with pytest.raises(NotImplementedError):
z["x"] = b"456"
assert len(z) == 1
assert z["x"] == b"123"
def test_bad_types(fn):
with Zip(fn) as z:
utils_test.check_bad_key_types(z, has_del=False)
utils_test.check_bad_value_types(z)