Modeling for sphinx-needs

Sphinx-Modeling allows the definition of models and constraints for objects defined with Sphinx-Needs. They can be validated during the Sphinx build.

pydantic is used under the hood to validate all models.

Arbitrary constraints can be enforced such as:

  • value constraints for need options

  • multiplicity of need link options

  • typed fields (string, regex, int, enums)

  • allow or disallow additional options

  • outgoing links must target specific need types or union of types

  • need type must be nested within another need type (via parent_need)

  • need type must be part of a specific document or chapter/section

  • custom validators

Warning

This Sphinx extension is in an early stage and subject to breaking changes.

Motivation

Requirements management with Sphinx-Needs and docs-as-code traditionally comes at the cost of complete freedom for developers. need_types, needs_extra_options and needs_extra_links are global and all need_types can use all needs_extra_options/needs_extra_links by default.

This is a problem for organizations that want to enforce well defined (UML) standards on objects. Especially when migrating parts of the requirements management system to Sphinx-Needs it is crucial to be consistent with existing solutions. Doing so enables technological interoperability.

More reasons to use sphinx-modeling are:

  • defining model constraints (typed links, multiplicity, allowed attributes, allowed values etc) as part of your model definition (and not as need_warnings). This leaves need_warnings with the load of doing only data relevant checks later. That is, reduce glue and duplication as much as possible.

  • automatic visualization of typed model (planned feature)

  • self contained need definitions which does not leave types, options, links and warnings scattered (planned feature)

  • user-documentation of meta-model (automatically create readable textual documentation on the types, its allowed values etc. Can be combined with additional docstring documentation as part of model definition if needed)

  • possibility to use the typed model in external tools (VsCode Extension, Linter etc.)

  • possibility to auto-generate needs_ide_directive_snippets (planned feature)

Planned features

  • Generation of the following Sphinx-Needs configurations from a model configuration:

    • needs_types

    • needs_extra_options

    • needs_extra_links

  • Visualization of the model (e.g. with PlantUML)

  • Use the model as source for IDE extensions