Add Domain.add_object_type() to update internal caches correctly

This commit is contained in:
Takeshi KOMIYA 2017-12-20 00:31:32 +09:00
parent fe07365a8c
commit 838f7fc29a
2 changed files with 14 additions and 1 deletions

View File

@ -188,6 +188,18 @@ class Domain(object):
self.objtypes_for_role = self._role2type.get # type: Callable[[unicode], List[unicode]] # NOQA self.objtypes_for_role = self._role2type.get # type: Callable[[unicode], List[unicode]] # NOQA
self.role_for_objtype = self._type2role.get # type: Callable[[unicode], unicode] self.role_for_objtype = self._type2role.get # type: Callable[[unicode], unicode]
def add_object_type(self, name, objtype):
# type: (Objtype) -> None
"""Add an object type."""
self.object_types[name] = objtype
if objtype.roles:
self._type2role[name] = objtype.roles[0]
else:
self._type2role[name] = ''
for role in objtype.roles:
self._role2type.setdefault(role, []).append(name)
def role(self, name): def role(self, name):
# type: (unicode) -> Callable # type: (unicode) -> Callable
"""Return a role adapter function that always gives the registered """Return a role adapter function that always gives the registered

View File

@ -112,10 +112,11 @@ class SphinxComponentRegistry(object):
domain = DomainClass(env) domain = DomainClass(env)
# transplant components added by extensions # transplant components added by extensions
domain.object_types.update(self.domain_object_types.get(domain.name, {}))
domain.directives.update(self.domain_directives.get(domain.name, {})) domain.directives.update(self.domain_directives.get(domain.name, {}))
domain.roles.update(self.domain_roles.get(domain.name, {})) domain.roles.update(self.domain_roles.get(domain.name, {}))
domain.indices.extend(self.domain_indices.get(domain.name, [])) domain.indices.extend(self.domain_indices.get(domain.name, []))
for name, objtype in iteritems(self.domain_object_types.get(domain.name, {})):
domain.add_object_type(name, objtype)
yield domain yield domain