Skip to content

Commit dff16ac

Browse files
authored
Merge pull request #44 from openzim/rgaudin/close
2 parents 248c8fd + 1865115 commit dff16ac

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

libzim/writer.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ def __enter__(self):
150150
def __exit__(self, *args):
151151
self.close()
152152

153+
def __del__(self):
154+
self.close()
155+
153156
def add_article(self, article):
154157
self._creatorWrapper.add_article(article)
155158
if not article.is_redirect():

tests/test_libzim.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,28 @@ def test_creator_params(tmpdir):
159159
assert zim.filename == path
160160
assert zim.main_page_url == main_page_url
161161
assert bytes(zim.get_article("/M/Language").content).decode("UTF-8") == index_language
162+
163+
164+
def test_segfault_on_realloc(tmpdir):
165+
""" assert that we are able to delete an unclosed Creator #31 """
166+
creator = Creator(str(tmpdir / "test.zim"), "welcome", "eng", 2048)
167+
del creator # used to segfault
168+
assert True
169+
170+
171+
def test_noleftbehind_empty(tmpdir):
172+
""" assert that ZIM with no articles don't leave files behind #41 """
173+
fname = "test_empty.zim"
174+
with Creator(
175+
str(tmpdir / fname), main_page="welcome", index_language="eng", min_chunk_size=2048,
176+
) as zim_creator:
177+
print(zim_creator)
178+
179+
assert len([p for p in tmpdir.listdir() if p.basename.startswith(fname)]) == 1
180+
181+
182+
def test_double_close(tmpdir):
183+
creator = Creator(str(tmpdir / "test.zim"), "welcome", "eng", 2048)
184+
creator.close()
185+
with pytest.raises(RuntimeError):
186+
creator.close()

0 commit comments

Comments
 (0)