Fix IndexBuilder.prune() and load() supports _filenames field

This commit is contained in:
Takeshi KOMIYA 2017-02-21 00:17:38 +09:00
parent 8c3ceec294
commit 19d2d56e36
2 changed files with 30 additions and 2 deletions

View File

@ -271,6 +271,7 @@ class IndexBuilder(object):
frozen.get('envversion') != self.env.version:
raise ValueError('old format')
index2fn = frozen['docnames']
self._filenames = dict(zip(index2fn, frozen['filenames']))
self._titles = dict(zip(index2fn, frozen['titles']))
def load_terms(mapping):
@ -361,10 +362,13 @@ class IndexBuilder(object):
def prune(self, docnames):
"""Remove data for all docnames not in the list."""
new_titles = {}
new_filenames = {}
for docname in docnames:
if docname in self._titles:
new_titles[docname] = self._titles[docname]
new_filenames[docname] = self._filenames[docname]
self._titles = new_titles
self._filenames = new_filenames
for wordnames in itervalues(self._mapping):
wordnames.intersection_update(docnames)
for wordnames in itervalues(self._title_mapping):

View File

@ -184,16 +184,21 @@ def test_IndexBuilder():
index2.load(stream, 'pickle')
assert index2._titles == index._titles
assert index2._filenames == {}
assert index2._filenames == index._filenames
assert index2._mapping == index._mapping
assert index2._title_mapping == index._title_mapping
assert index2._objtypes == {}
assert index2._objnames == {}
# freeze after load
assert index2.freeze() == index.freeze()
assert index2._objtypes == index._objtypes
assert index2._objnames == index._objnames
# prune
index.prune(['docname2'])
assert index._titles == {'docname2': 'title2'}
assert index._filenames == {'docname': 'filename', 'docname2': 'filename2'}
assert index._filenames == {'docname2': 'filename2'}
assert index._mapping == {
'fermion': {'docname2'},
'comment': {'docname2'},
@ -204,3 +209,22 @@ def test_IndexBuilder():
assert index._title_mapping == {'section_titl': {'docname2'}}
assert index._objtypes == {('dummy', 'objtype'): 0}
assert index._objnames == {0: ('dummy', 'objtype', 'objtype')}
# freeze after prune
assert index.freeze() == {
'docnames': ('docname2',),
'envversion': '1.0',
'filenames': ['filename2'],
'objects': {},
'objnames': {0: ('dummy', 'objtype', 'objtype')},
'objtypes': {0: 'dummy:objtype'},
'terms': {'comment': 0,
'fermion': 0,
'index': 0,
'non': 0,
'test': 0},
'titles': ('title2',),
'titleterms': {'section_titl': 0}
}
assert index._objtypes == {('dummy', 'objtype'): 0}
assert index._objnames == {0: ('dummy', 'objtype', 'objtype')}