mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-24 17:06:29 +03:00
Ensure files opened in from_disk
are closed
Fixes [issue 1706](https://github.com/explosion/spaCy/issues/1706).
This commit is contained in:
parent
cdd4b3d05c
commit
e28de12cbd
|
@ -624,7 +624,7 @@ class Language(object):
|
|||
deserializers = OrderedDict((
|
||||
('vocab', lambda p: self.vocab.from_disk(p)),
|
||||
('tokenizer', lambda p: self.tokenizer.from_disk(p, vocab=False)),
|
||||
('meta.json', lambda p: self.meta.update(ujson.load(p.open('r'))))
|
||||
('meta.json', lambda p: self.meta.update(util.read_json(p)))
|
||||
))
|
||||
for name, proc in self.pipeline:
|
||||
if name in disable:
|
||||
|
|
|
@ -214,7 +214,8 @@ class Pipe(object):
|
|||
|
||||
def _load_cfg(path):
|
||||
if path.exists():
|
||||
return ujson.load(path.open())
|
||||
with path.open() as file_:
|
||||
return ujson.load(file_)
|
||||
else:
|
||||
return {}
|
||||
|
||||
|
@ -580,7 +581,8 @@ class Tagger(Pipe):
|
|||
def load_model(p):
|
||||
if self.model is True:
|
||||
self.model = self.Model(self.vocab.morphology.n_tags, **self.cfg)
|
||||
self.model.from_bytes(p.open('rb').read())
|
||||
with p.open('rb') as file_:
|
||||
self.model.from_bytes(file_.read())
|
||||
|
||||
def load_tag_map(p):
|
||||
with p.open('rb') as file_:
|
||||
|
|
|
@ -887,7 +887,7 @@ cdef class Parser:
|
|||
deserializers = {
|
||||
'vocab': lambda p: self.vocab.from_disk(p),
|
||||
'moves': lambda p: self.moves.from_disk(p, strings=False),
|
||||
'cfg': lambda p: self.cfg.update(ujson.load(p.open())),
|
||||
'cfg': lambda p: self.cfg.update(util.read_json(p)),
|
||||
'model': lambda p: None
|
||||
}
|
||||
util.from_disk(path, deserializers, exclude)
|
||||
|
|
28
spacy/tests/serialize/test_serialize_language.py
Normal file
28
spacy/tests/serialize/test_serialize_language.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from ..util import make_tempdir
|
||||
from ...language import Language
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def meta_data():
|
||||
return {
|
||||
'name': 'name-in-fixture',
|
||||
'version': 'version-in-fixture',
|
||||
'description': 'description-in-fixture',
|
||||
'author': 'author-in-fixture',
|
||||
'email': 'email-in-fixture',
|
||||
'url': 'url-in-fixture',
|
||||
'license': 'license-in-fixture',
|
||||
}
|
||||
|
||||
|
||||
def test_serialize_language_meta_disk(meta_data):
|
||||
language = Language(meta=meta_data)
|
||||
with make_tempdir() as d:
|
||||
language.to_disk(d)
|
||||
new_language = Language().from_disk(d)
|
||||
assert new_language.meta == language.meta
|
|
@ -347,7 +347,8 @@ cdef class Vectors:
|
|||
"""
|
||||
def load_key2row(path):
|
||||
if path.exists():
|
||||
self.key2row = msgpack.load(path.open('rb'))
|
||||
with path.open('rb') as file_:
|
||||
self.key2row = msgpack.load(file_)
|
||||
for key, row in self.key2row.items():
|
||||
if row in self._unset:
|
||||
self._unset.remove(row)
|
||||
|
|
Loading…
Reference in New Issue
Block a user