issue5230 writer now checks instance of loc parameter before trying to operate on it

This commit is contained in:
Leander Fiedler 2020-04-10 20:35:52 +02:00 committed by lfiedler
parent e1e25c7e30
commit 8c1d0d628f
2 changed files with 16 additions and 3 deletions

View File

@ -446,10 +446,10 @@ cdef class KnowledgeBase:
cdef class Writer: cdef class Writer:
def __init__(self, object loc): def __init__(self, object loc):
if path.exists(loc):
assert not path.isdir(loc), "%s is directory." % loc
if isinstance(loc, Path): if isinstance(loc, Path):
loc = bytes(loc) loc = bytes(loc)
if path.exists(loc):
assert not path.isdir(loc), "%s is directory." % loc
cdef bytes bytes_loc = loc.encode('utf8') if type(loc) == unicode else loc cdef bytes bytes_loc = loc.encode('utf8') if type(loc) == unicode else loc
self._fp = fopen(<char*>bytes_loc, 'wb') self._fp = fopen(<char*>bytes_loc, 'wb')
if not self._fp: if not self._fp:

View File

@ -5,7 +5,7 @@ from unittest import TestCase
import pytest import pytest
import srsly import srsly
from numpy import zeros from numpy import zeros
from spacy.kb import KnowledgeBase from spacy.kb import KnowledgeBase, Writer
from spacy.vectors import Vectors from spacy.vectors import Vectors
from spacy.language import Language from spacy.language import Language
@ -101,6 +101,19 @@ def test_to_disk_resource_warning(obj):
assert len(warnings_list) == 0 assert len(warnings_list) == 0
def test_writer_with_path_py35():
writer = None
with make_tempdir() as d:
path = d / "test"
try:
writer = Writer(path)
except Exception as e:
pytest.fail(str(e))
finally:
if writer:
writer.close()
class TestToDiskResourceWarningUnittest(TestCase): class TestToDiskResourceWarningUnittest(TestCase):
def test_resource_warning(self): def test_resource_warning(self):
scenarios = zip(*objects_to_test) scenarios = zip(*objects_to_test)