Source code for cybox.utils.autoentity

from sphinx.ext.autodoc import AttributeDocumenter, ClassDocumenter
from sphinx.util.pycompat import class_types

from mixbox import entities
from mixbox import fields


[docs]def make_class_ref(cls): return ":py:class:`%s.%s`" % (cls.__module__, cls.__name__)
class EntityDocumenter(ClassDocumenter): objtype = "class" priority = 99 @classmethod def can_document_member(cls, member, membername, isattr, parent): return isinstance(member, class_types) and \ issubclass(member, entities.Entity) def add_content(self, more_content, no_docstring=False): ClassDocumenter.add_content(self, more_content, no_docstring) obj = self.object try: binding_class = make_class_ref(obj._binding_class) except AttributeError: binding_class = "<undefined>" self.add_line("| XML binding class: %s\n" % binding_class, "<autoentity>") class TypedFieldDocumenter(AttributeDocumenter): objtype = "attribute" priority = 99 @classmethod def can_document_member(cls, member, membername, isattr, parent): return isinstance(member, fields.TypedField) def add_content(self, more_content, no_docstring=False): AttributeDocumenter.add_content(self, more_content, no_docstring) if self.object.multiple: self.add_line("| (List of values permitted)", "<autoentity>") type_ = self.object.type_ if type_: self.add_line("| Type: %s\n" % make_class_ref(type_), "<autoentity>") self.add_line("| XML Binding class name: ``%s``\n" % self.object.name, "<autoentity>") self.add_line("| Dictionary key name: ``%s``\n" % self.object.key_name, "<autoentity>")
[docs]def setup(app): app.add_autodocumenter(EntityDocumenter) app.add_autodocumenter(TypedFieldDocumenter)