How-To model Architecture with Sphinx-Needs

Structure Model: Deployment-Diagram

Sphinx-Needs offers a build in represenatation of elements with needflow [1], needarch [2], and needuml [3].

You can use needs-flow-configs to change repesentation in needflow. You can use needs-render-context [4] to extend the data available in needarch and needuml.

Needflow expects to get plantuml deployment-diagram [5] elements as representation. With flow() you can get this repesentation even in needarch and needuml.

Visial representation of UML Ports in Sphinx-Needs

Pay attention: We do use :input: and :output: in the same datamodel. This is only because to see the differences in the output of plantuml tooling. Especially the ordering of links like A -> B vs B <- A.

Example 1: Definiton of a super structure element

.. lib:: My lib
   :id: LIB_MY_LIB

   .. needarch::
      :key: Deployment
      :debug:

      left to right direction
      'top to bottom direction

      'Define elements
      '{{need()}}
      {{flow(need().id)}} {
      {% for e in need().part_of_back %}
      '{{e}}
      {% if needs[e].type == "comp" %}{{uml(e, 'Deployment')}}{% endif %}
      {% endfor %}
      }

      'Extra link to make diagramm nice looking
      C_A --[hidden] C_B

      'Link defined elements
      {% for e in need().part_of_back %}
      'e = {{e}}
      {%- if needs[e].type == "comp" -%}
      {% for f in needs[e].parent_needs_back %}
      'f = {{f}}
      {%- if (needs[f].type == "inport") -%}
      {% for g in needs[f].input %}
      'g = {{g}}
      {{g}} -[#000000]-> {{f}}
      {% endfor %}
      {%- endif -%}
      {% endfor %}
      {%- endif -%}
      {% endfor %}
      }

   .. needarch::
      :key: Deployment2
      :debug:

      'Define elements
      '{{need()}}
      {{flow(need().id)}} {
      {% for e in need().part_of_back %}
      '{{e}}
      {% if needs[e].type == "comp" %}{{flow(e)}}{% endif %}
      {% endfor %}
      }

      'Extra link to make diagramm nice looking
      C_A --[hidden] C_B

      'Link defined elements
      {% for e in need().part_of_back %}
      'e = {{e}}
      {%- if needs[e].type == "comp" -%}
      {% for f in needs[e].parent_needs_back %}
      'f = {{f}}
      {%- if (needs[f].type == "inport") -%}
      {% for g in needs[f].input %}
      'g = {{g}}
      {{needs[g].parent_need}} #-# {{e}}
      {% endfor %}
      {%- endif -%}
      {% endfor %}
      {%- endif -%}
      {% endfor %}
      }

Example 2: Definition of elements within the super structure

.. comp:: Component A
   :id: C_A
   :part_of: LIB_MY_LIB

   .. outport:: out
      :id: OP_C_A_OUT
      :output: IP_C_C_IN


.. comp:: Component B
   :id: C_B
   :part_of: LIB_MY_LIB

   .. outport:: out
      :id: OP_C_B_OUT
      :output: IP_C_C_IN2


.. comp:: Component C
   :id: C_C
   :part_of: LIB_MY_LIB

   .. inport:: in
      :id: IP_C_C_IN
      :input: OP_C_A_OUT

   .. inport:: in
      :id: IP_C_C_IN2
      :input: OP_C_B_OUT

   .. outport:: out
      :id: OP_C_C_OUT
      :output: IP_C_D_IN


.. comp:: Component D
   :id: C_D
   :part_of: LIB_MY_LIB

   .. inport:: in
      :id: IP_C_D_IN
      :input: OP_C_C_OUT

To show the different repesentations of A -> B (output) vs B <- A (input).

Example 3: Visualize the dependencies - Input

.. needflow::
   :filter: is_need and docname == "architecture-examples" and section_name == "Visial representation of UML Ports in Sphinx-Needs"
   :link_types: input, part_of
   :show_link_names:
   :debug:

.. needflow::
   :filter: is_need and docname == "architecture-examples" and section_name == "Visial representation of UML Ports in Sphinx-Needs" and type != "lib"
   :link_types: input
   :show_link_names:
   :debug:

@startuml

' Nodes definition 

rectangle "<size:12>Library </size>\n**My lib**\n<size:10>LIB_MY_LIB</size>" as LIB_MY_LIB [[../architecture-examples.html#LIB_MY_LIB]] #abcdef
component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

C_A -down[#000000]-> LIB_MY_LIB: Part of\n
C_B -down[#000000]-> LIB_MY_LIB: Part of\n
C_C -down[#000000]-> LIB_MY_LIB: Part of\n
IP_C_C_IN <-[#000000]- OP_C_A_OUT: input\n
IP_C_C_IN2 <-[#000000]- OP_C_B_OUT: input\n
C_D -down[#000000]-> LIB_MY_LIB: Part of\n
IP_C_D_IN <-[#000000]- OP_C_C_OUT: input\n

@enduml

@startuml

' Nodes definition 

rectangle "<size:12>Library </size>\n**My lib**\n<size:10>LIB_MY_LIB</size>" as LIB_MY_LIB [[../architecture-examples.html#LIB_MY_LIB]] #abcdef
component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

C_A -down[#000000]-> LIB_MY_LIB: Part of\n
C_B -down[#000000]-> LIB_MY_LIB: Part of\n
C_C -down[#000000]-> LIB_MY_LIB: Part of\n
IP_C_C_IN <-[#000000]- OP_C_A_OUT: input\n
IP_C_C_IN2 <-[#000000]- OP_C_B_OUT: input\n
C_D -down[#000000]-> LIB_MY_LIB: Part of\n
IP_C_D_IN <-[#000000]- OP_C_C_OUT: input\n

@enduml

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

IP_C_C_IN <-[#000000]- OP_C_A_OUT: input\n
IP_C_C_IN2 <-[#000000]- OP_C_B_OUT: input\n
IP_C_D_IN <-[#000000]- OP_C_C_OUT: input\n

@enduml

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

IP_C_C_IN <-[#000000]- OP_C_A_OUT: input\n
IP_C_C_IN2 <-[#000000]- OP_C_B_OUT: input\n
IP_C_D_IN <-[#000000]- OP_C_C_OUT: input\n

@enduml

Example 4: Visualize the dependencies - Output

.. needflow::
   :filter: is_need and docname == "architecture-examples" and section_name == "Visial representation of UML Ports in Sphinx-Needs"
   :link_types: output, part_of
   :show_link_names:
   :debug:

.. needflow::
   :filter: is_need and docname == "architecture-examples" and section_name == "Visial representation of UML Ports in Sphinx-Needs" and type != "lib"
   :link_types: output
   :show_link_names:
   :debug:

@startuml

' Nodes definition 

rectangle "<size:12>Library </size>\n**My lib**\n<size:10>LIB_MY_LIB</size>" as LIB_MY_LIB [[../architecture-examples.html#LIB_MY_LIB]] #abcdef
component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

C_A -down[#000000]-> LIB_MY_LIB: Part of\n
OP_C_A_OUT -[#000000]-> IP_C_C_IN: output\n
C_B -down[#000000]-> LIB_MY_LIB: Part of\n
OP_C_B_OUT -[#000000]-> IP_C_C_IN2: output\n
C_C -down[#000000]-> LIB_MY_LIB: Part of\n
OP_C_C_OUT -[#000000]-> IP_C_D_IN: output\n
C_D -down[#000000]-> LIB_MY_LIB: Part of\n

@enduml

@startuml

' Nodes definition 

rectangle "<size:12>Library </size>\n**My lib**\n<size:10>LIB_MY_LIB</size>" as LIB_MY_LIB [[../architecture-examples.html#LIB_MY_LIB]] #abcdef
component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

C_A -down[#000000]-> LIB_MY_LIB: Part of\n
OP_C_A_OUT -[#000000]-> IP_C_C_IN: output\n
C_B -down[#000000]-> LIB_MY_LIB: Part of\n
OP_C_B_OUT -[#000000]-> IP_C_C_IN2: output\n
C_C -down[#000000]-> LIB_MY_LIB: Part of\n
OP_C_C_OUT -[#000000]-> IP_C_D_IN: output\n
C_D -down[#000000]-> LIB_MY_LIB: Part of\n

@enduml

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

OP_C_A_OUT -[#000000]-> IP_C_C_IN: output\n
OP_C_B_OUT -[#000000]-> IP_C_C_IN2: output\n
OP_C_C_OUT -[#000000]-> IP_C_D_IN: output\n

@enduml

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component A**\n<size:10>C_A</size>" as C_A [[../architecture-examples.html#C_A]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_A_OUT [[../architecture-examples.html#OP_C_A_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component B**\n<size:10>C_B</size>" as C_B [[../architecture-examples.html#C_B]] #abcdef{
'parts:
'child needs:
portout "**out**" as OP_C_B_OUT [[../architecture-examples.html#OP_C_B_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component C**\n<size:10>C_C</size>" as C_C [[../architecture-examples.html#C_C]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_C_IN [[../architecture-examples.html#IP_C_C_IN]] #abcdef
portin "**in**" as IP_C_C_IN2 [[../architecture-examples.html#IP_C_C_IN2]] #abcdef
portout "**out**" as OP_C_C_OUT [[../architecture-examples.html#OP_C_C_OUT]] #abcdef
}
component "<size:12>Component</size>\n**Component D**\n<size:10>C_D</size>" as C_D [[../architecture-examples.html#C_D]] #abcdef{
'parts:
'child needs:
portin "**in**" as IP_C_D_IN [[../architecture-examples.html#IP_C_D_IN]] #abcdef
}

' Connection definition 

OP_C_A_OUT -[#000000]-> IP_C_C_IN: output\n
OP_C_B_OUT -[#000000]-> IP_C_C_IN2: output\n
OP_C_C_OUT -[#000000]-> IP_C_D_IN: output\n

@enduml

Visiual repesentation of many Elements

Following the link to the elements defined.

Example 5: Visualize many elements with needflow

.. needflow::
   :filter: is_need and docname == "architecture-many-components"
   :show_link_names:
   :debug:

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component A**\n<size:10>C_MANY_A</size>" as C_MANY_A [[../architecture-many-components.html#C_MANY_A]] #abcdef
component "<size:12>Component</size>\n**Component B**\n<size:10>C_MANY_B</size>" as C_MANY_B [[../architecture-many-components.html#C_MANY_B]] #abcdef
component "<size:12>Component</size>\n**Component C**\n<size:10>C_MANY_C</size>" as C_MANY_C [[../architecture-many-components.html#C_MANY_C]] #abcdef
component "<size:12>Component</size>\n**Component D**\n<size:10>C_MANY_D</size>" as C_MANY_D [[../architecture-many-components.html#C_MANY_D]] #abcdef
component "<size:12>Component</size>\n**Component E**\n<size:10>C_MANY_E</size>" as C_MANY_E [[../architecture-many-components.html#C_MANY_E]] #abcdef
component "<size:12>Component</size>\n**Component F**\n<size:10>C_MANY_F</size>" as C_MANY_F [[../architecture-many-components.html#C_MANY_F]] #abcdef
component "<size:12>Component</size>\n**Component G**\n<size:10>C_MANY_G</size>" as C_MANY_G [[../architecture-many-components.html#C_MANY_G]] #abcdef
component "<size:12>Component</size>\n**Component H**\n<size:10>C_MANY_H</size>" as C_MANY_H [[../architecture-many-components.html#C_MANY_H]] #abcdef
component "<size:12>Component</size>\n**Component I**\n<size:10>C_MANY_I</size>" as C_MANY_I [[../architecture-many-components.html#C_MANY_I]] #abcdef
component "<size:12>Component</size>\n**Component J**\n<size:10>C_MANY_J</size>" as C_MANY_J [[../architecture-many-components.html#C_MANY_J]] #abcdef
component "<size:12>Component</size>\n**Component K**\n<size:10>C_MANY_K</size>" as C_MANY_K [[../architecture-many-components.html#C_MANY_K]] #abcdef
component "<size:12>Component</size>\n**Component L**\n<size:10>C_MANY_L</size>" as C_MANY_L [[../architecture-many-components.html#C_MANY_L]] #abcdef
component "<size:12>Component</size>\n**Component M**\n<size:10>C_MANY_M</size>" as C_MANY_M [[../architecture-many-components.html#C_MANY_M]] #abcdef
component "<size:12>Component</size>\n**Component N**\n<size:10>C_MANY_N</size>" as C_MANY_N [[../architecture-many-components.html#C_MANY_N]] #abcdef
component "<size:12>Component</size>\n**Component O**\n<size:10>C_MANY_O</size>" as C_MANY_O [[../architecture-many-components.html#C_MANY_O]] #abcdef
component "<size:12>Component</size>\n**Component P**\n<size:10>C_MANY_P</size>" as C_MANY_P [[../architecture-many-components.html#C_MANY_P]] #abcdef

' Connection definition 


@enduml

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component A**\n<size:10>C_MANY_A</size>" as C_MANY_A [[../architecture-many-components.html#C_MANY_A]] #abcdef
component "<size:12>Component</size>\n**Component B**\n<size:10>C_MANY_B</size>" as C_MANY_B [[../architecture-many-components.html#C_MANY_B]] #abcdef
component "<size:12>Component</size>\n**Component C**\n<size:10>C_MANY_C</size>" as C_MANY_C [[../architecture-many-components.html#C_MANY_C]] #abcdef
component "<size:12>Component</size>\n**Component D**\n<size:10>C_MANY_D</size>" as C_MANY_D [[../architecture-many-components.html#C_MANY_D]] #abcdef
component "<size:12>Component</size>\n**Component E**\n<size:10>C_MANY_E</size>" as C_MANY_E [[../architecture-many-components.html#C_MANY_E]] #abcdef
component "<size:12>Component</size>\n**Component F**\n<size:10>C_MANY_F</size>" as C_MANY_F [[../architecture-many-components.html#C_MANY_F]] #abcdef
component "<size:12>Component</size>\n**Component G**\n<size:10>C_MANY_G</size>" as C_MANY_G [[../architecture-many-components.html#C_MANY_G]] #abcdef
component "<size:12>Component</size>\n**Component H**\n<size:10>C_MANY_H</size>" as C_MANY_H [[../architecture-many-components.html#C_MANY_H]] #abcdef
component "<size:12>Component</size>\n**Component I**\n<size:10>C_MANY_I</size>" as C_MANY_I [[../architecture-many-components.html#C_MANY_I]] #abcdef
component "<size:12>Component</size>\n**Component J**\n<size:10>C_MANY_J</size>" as C_MANY_J [[../architecture-many-components.html#C_MANY_J]] #abcdef
component "<size:12>Component</size>\n**Component K**\n<size:10>C_MANY_K</size>" as C_MANY_K [[../architecture-many-components.html#C_MANY_K]] #abcdef
component "<size:12>Component</size>\n**Component L**\n<size:10>C_MANY_L</size>" as C_MANY_L [[../architecture-many-components.html#C_MANY_L]] #abcdef
component "<size:12>Component</size>\n**Component M**\n<size:10>C_MANY_M</size>" as C_MANY_M [[../architecture-many-components.html#C_MANY_M]] #abcdef
component "<size:12>Component</size>\n**Component N**\n<size:10>C_MANY_N</size>" as C_MANY_N [[../architecture-many-components.html#C_MANY_N]] #abcdef
component "<size:12>Component</size>\n**Component O**\n<size:10>C_MANY_O</size>" as C_MANY_O [[../architecture-many-components.html#C_MANY_O]] #abcdef
component "<size:12>Component</size>\n**Component P**\n<size:10>C_MANY_P</size>" as C_MANY_P [[../architecture-many-components.html#C_MANY_P]] #abcdef

' Connection definition 


@enduml

Example 6: Visualize many elements with needuml I

.. needuml::
   :debug:

   {%- set components = filter("docname == 'architecture-many-components'") -%}
   '{{components}}
   {% for need in filter("docname == 'architecture-many-components'") %}
   {{flow(need.id)}}
   {% endfor %}

@startuml

'[{'docname': 'architecture-many-components', 'lineno': 8, 'lineno_content': 11, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_A', 'title': 'Component A', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_A', 'id_complete': 'C_MANY_A', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L8', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 11, 'lineno_content': 14, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_B', 'title': 'Component B', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_B', 'id_complete': 'C_MANY_B', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L11', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 14, 'lineno_content': 17, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_C', 'title': 'Component C', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_C', 'id_complete': 'C_MANY_C', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L14', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 17, 'lineno_content': 20, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_D', 'title': 'Component D', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_D', 'id_complete': 'C_MANY_D', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L17', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 20, 'lineno_content': 23, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_E', 'title': 'Component E', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_E', 'id_complete': 'C_MANY_E', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L20', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 23, 'lineno_content': 26, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_F', 'title': 'Component F', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_F', 'id_complete': 'C_MANY_F', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L23', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 26, 'lineno_content': 29, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_G', 'title': 'Component G', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_G', 'id_complete': 'C_MANY_G', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L26', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 29, 'lineno_content': 32, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_H', 'title': 'Component H', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_H', 'id_complete': 'C_MANY_H', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L29', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 32, 'lineno_content': 35, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_I', 'title': 'Component I', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_I', 'id_complete': 'C_MANY_I', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L32', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 35, 'lineno_content': 38, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_J', 'title': 'Component J', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_J', 'id_complete': 'C_MANY_J', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L35', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 38, 'lineno_content': 41, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_K', 'title': 'Component K', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_K', 'id_complete': 'C_MANY_K', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L38', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 41, 'lineno_content': 44, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_L', 'title': 'Component L', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_L', 'id_complete': 'C_MANY_L', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L41', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 44, 'lineno_content': 47, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_M', 'title': 'Component M', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_M', 'id_complete': 'C_MANY_M', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L44', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 47, 'lineno_content': 50, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_N', 'title': 'Component N', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_N', 'id_complete': 'C_MANY_N', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L47', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 50, 'lineno_content': 53, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_O', 'title': 'Component O', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_O', 'id_complete': 'C_MANY_O', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L50', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 53, 'lineno_content': 56, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_P', 'title': 'Component P', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_P', 'id_complete': 'C_MANY_P', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L53', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}]

component "<size:12>Component</size>\n**Component A**\n<size:10>C_MANY_A</size>" as C_MANY_A [[../architecture-many-components.html#C_MANY_A]] #abcdef

component "<size:12>Component</size>\n**Component B**\n<size:10>C_MANY_B</size>" as C_MANY_B [[../architecture-many-components.html#C_MANY_B]] #abcdef

component "<size:12>Component</size>\n**Component C**\n<size:10>C_MANY_C</size>" as C_MANY_C [[../architecture-many-components.html#C_MANY_C]] #abcdef

component "<size:12>Component</size>\n**Component D**\n<size:10>C_MANY_D</size>" as C_MANY_D [[../architecture-many-components.html#C_MANY_D]] #abcdef

component "<size:12>Component</size>\n**Component E**\n<size:10>C_MANY_E</size>" as C_MANY_E [[../architecture-many-components.html#C_MANY_E]] #abcdef

component "<size:12>Component</size>\n**Component F**\n<size:10>C_MANY_F</size>" as C_MANY_F [[../architecture-many-components.html#C_MANY_F]] #abcdef

component "<size:12>Component</size>\n**Component G**\n<size:10>C_MANY_G</size>" as C_MANY_G [[../architecture-many-components.html#C_MANY_G]] #abcdef

component "<size:12>Component</size>\n**Component H**\n<size:10>C_MANY_H</size>" as C_MANY_H [[../architecture-many-components.html#C_MANY_H]] #abcdef

component "<size:12>Component</size>\n**Component I**\n<size:10>C_MANY_I</size>" as C_MANY_I [[../architecture-many-components.html#C_MANY_I]] #abcdef

component "<size:12>Component</size>\n**Component J**\n<size:10>C_MANY_J</size>" as C_MANY_J [[../architecture-many-components.html#C_MANY_J]] #abcdef

component "<size:12>Component</size>\n**Component K**\n<size:10>C_MANY_K</size>" as C_MANY_K [[../architecture-many-components.html#C_MANY_K]] #abcdef

component "<size:12>Component</size>\n**Component L**\n<size:10>C_MANY_L</size>" as C_MANY_L [[../architecture-many-components.html#C_MANY_L]] #abcdef

component "<size:12>Component</size>\n**Component M**\n<size:10>C_MANY_M</size>" as C_MANY_M [[../architecture-many-components.html#C_MANY_M]] #abcdef

component "<size:12>Component</size>\n**Component N**\n<size:10>C_MANY_N</size>" as C_MANY_N [[../architecture-many-components.html#C_MANY_N]] #abcdef

component "<size:12>Component</size>\n**Component O**\n<size:10>C_MANY_O</size>" as C_MANY_O [[../architecture-many-components.html#C_MANY_O]] #abcdef

component "<size:12>Component</size>\n**Component P**\n<size:10>C_MANY_P</size>" as C_MANY_P [[../architecture-many-components.html#C_MANY_P]] #abcdef

@enduml

@startuml

'[{'docname': 'architecture-many-components', 'lineno': 8, 'lineno_content': 11, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_A', 'title': 'Component A', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_A', 'id_complete': 'C_MANY_A', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L8', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 11, 'lineno_content': 14, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_B', 'title': 'Component B', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_B', 'id_complete': 'C_MANY_B', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L11', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 14, 'lineno_content': 17, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_C', 'title': 'Component C', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_C', 'id_complete': 'C_MANY_C', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L14', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 17, 'lineno_content': 20, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_D', 'title': 'Component D', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_D', 'id_complete': 'C_MANY_D', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L17', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 20, 'lineno_content': 23, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_E', 'title': 'Component E', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_E', 'id_complete': 'C_MANY_E', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L20', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 23, 'lineno_content': 26, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_F', 'title': 'Component F', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_F', 'id_complete': 'C_MANY_F', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L23', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 26, 'lineno_content': 29, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_G', 'title': 'Component G', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_G', 'id_complete': 'C_MANY_G', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L26', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 29, 'lineno_content': 32, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_H', 'title': 'Component H', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_H', 'id_complete': 'C_MANY_H', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L29', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 32, 'lineno_content': 35, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_I', 'title': 'Component I', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_I', 'id_complete': 'C_MANY_I', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L32', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 35, 'lineno_content': 38, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_J', 'title': 'Component J', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_J', 'id_complete': 'C_MANY_J', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L35', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 38, 'lineno_content': 41, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_K', 'title': 'Component K', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_K', 'id_complete': 'C_MANY_K', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L38', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 41, 'lineno_content': 44, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_L', 'title': 'Component L', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_L', 'id_complete': 'C_MANY_L', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L41', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 44, 'lineno_content': 47, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_M', 'title': 'Component M', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_M', 'id_complete': 'C_MANY_M', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L44', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 47, 'lineno_content': 50, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_N', 'title': 'Component N', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_N', 'id_complete': 'C_MANY_N', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L47', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 50, 'lineno_content': 53, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_O', 'title': 'Component O', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_O', 'id_complete': 'C_MANY_O', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L50', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}, {'docname': 'architecture-many-components', 'lineno': 53, 'lineno_content': 56, 'doctype': '.rst', 'content': '', 'type': 'comp', 'type_name': 'Component', 'type_prefix': 'C_', 'type_color': '#abcdef', 'type_style': 'component', 'status': None, 'tags': [], 'constraints': [], 'constraints_passed': True, 'constraints_results': {}, 'id': 'C_MANY_P', 'title': 'Component P', 'collapse': False, 'arch': {}, 'style': None, 'layout': '', 'template': None, 'pre_template': None, 'post_template': None, 'hide': False, 'jinja_content': False, 'parts': {}, 'is_part': False, 'is_need': True, 'id_parent': 'C_MANY_P', 'id_complete': 'C_MANY_P', 'is_external': False, 'external_url': None, 'external_css': 'external_link', 'is_modified': False, 'modifications': 0, 'has_dead_links': False, 'has_forbidden_dead_links': False, 'sections': ['Definition of many Components'], 'section_name': 'Definition of many Components', 'signature': '', 'parent_need': '', 'author': '', 'safety_level': '', 'security_level': '', 'reject_reason': '', 'coverage': '', 'pathfile': '', 'interface_definition': '', 'test_status': '', 'github_edit_url': 'https://github.com/PhilipPartsch/Howto-Sphinx/edit/main/docs/architecture-many-components.rst#L53', 'duration': '', 'completion': '', 'file': '', 'suite': '', 'case': '', 'case_name': '', 'case_parameter': '', 'classname': '', 'time': '', 'suites': '', 'cases': '', 'passed': '', 'skipped': '', 'failed': '', 'errors': '', 'result': '', 'query': '', 'specific': '', 'max_amount': '', 'max_content_lines': '', 'id_prefix': '', 'user': '', 'created_at': '', 'updated_at': '', 'closed_at': '', 'service': '', 'url': '', 'avatar': '', 'params': '', 'prefix': '', 'url_postfix': '', 'parent_needs': [], 'parent_needs_back': [], 'links': [], 'links_back': [], 'derived': [], 'derived_back': [], 'successor': [], 'successor_back': [], 'activities': [], 'activities_back': [], 'when': [], 'when_back': [], 'instruction': [], 'instruction_back': [], 'input': [], 'input_back': [], 'output': [], 'output_back': [], 'responsible': [], 'responsible_back': [], 'part_of': [], 'part_of_back': [], 'stored_in': [], 'stored_in_back': [], 'blue_print': [], 'blue_print_back': [], 'why': [], 'why_back': [], 'satisfies': [], 'satisfies_back': [], 'tests': [], 'tests_back': [], 'verified_by': [], 'verified_by_back': [], 'implemented_by': [], 'implemented_by_back': [], 'evaluated': [], 'evaluated_back': [], 'uses': [], 'uses_back': [], 'implements': [], 'implements_back': []}]

component "<size:12>Component</size>\n**Component A**\n<size:10>C_MANY_A</size>" as C_MANY_A [[../architecture-many-components.html#C_MANY_A]] #abcdef

component "<size:12>Component</size>\n**Component B**\n<size:10>C_MANY_B</size>" as C_MANY_B [[../architecture-many-components.html#C_MANY_B]] #abcdef

component "<size:12>Component</size>\n**Component C**\n<size:10>C_MANY_C</size>" as C_MANY_C [[../architecture-many-components.html#C_MANY_C]] #abcdef

component "<size:12>Component</size>\n**Component D**\n<size:10>C_MANY_D</size>" as C_MANY_D [[../architecture-many-components.html#C_MANY_D]] #abcdef

component "<size:12>Component</size>\n**Component E**\n<size:10>C_MANY_E</size>" as C_MANY_E [[../architecture-many-components.html#C_MANY_E]] #abcdef

component "<size:12>Component</size>\n**Component F**\n<size:10>C_MANY_F</size>" as C_MANY_F [[../architecture-many-components.html#C_MANY_F]] #abcdef

component "<size:12>Component</size>\n**Component G**\n<size:10>C_MANY_G</size>" as C_MANY_G [[../architecture-many-components.html#C_MANY_G]] #abcdef

component "<size:12>Component</size>\n**Component H**\n<size:10>C_MANY_H</size>" as C_MANY_H [[../architecture-many-components.html#C_MANY_H]] #abcdef

component "<size:12>Component</size>\n**Component I**\n<size:10>C_MANY_I</size>" as C_MANY_I [[../architecture-many-components.html#C_MANY_I]] #abcdef

component "<size:12>Component</size>\n**Component J**\n<size:10>C_MANY_J</size>" as C_MANY_J [[../architecture-many-components.html#C_MANY_J]] #abcdef

component "<size:12>Component</size>\n**Component K**\n<size:10>C_MANY_K</size>" as C_MANY_K [[../architecture-many-components.html#C_MANY_K]] #abcdef

component "<size:12>Component</size>\n**Component L**\n<size:10>C_MANY_L</size>" as C_MANY_L [[../architecture-many-components.html#C_MANY_L]] #abcdef

component "<size:12>Component</size>\n**Component M**\n<size:10>C_MANY_M</size>" as C_MANY_M [[../architecture-many-components.html#C_MANY_M]] #abcdef

component "<size:12>Component</size>\n**Component N**\n<size:10>C_MANY_N</size>" as C_MANY_N [[../architecture-many-components.html#C_MANY_N]] #abcdef

component "<size:12>Component</size>\n**Component O**\n<size:10>C_MANY_O</size>" as C_MANY_O [[../architecture-many-components.html#C_MANY_O]] #abcdef

component "<size:12>Component</size>\n**Component P**\n<size:10>C_MANY_P</size>" as C_MANY_P [[../architecture-many-components.html#C_MANY_P]] #abcdef

@enduml

Example 7: Visualize many elements with needuml II

.. needuml::
   :debug:

   'the packages are project specific and defined in needs_render_context in conf.py
   {% for p in packages %}
   package {{p["name"]}} {
   ' import elements
   {% for e in p["elements"] %}
   {{flow(e)}}
   {% endfor %}
   ' connect elements
   {% for e in p["elements"] %}
   {%- if loop.previtem is defined -%}
   {{loop.previtem}} #-# {{e}}
   {# here it is important to use #-#, as - has a left / right alignment and -- has up / down alignment #}
   {% endif %}
   {% endfor %}
   }
   {% if loop.previtem is defined %}
   ' connect packages with hidden link to nice align elements
   {{loop.previtem["name"]}} --[hidden] {{p["name"]}}
   {% endif %}
   {% endfor %}

@startuml

'the packages are project specific and defined in needs_render_context in conf.py

package P1 {
' import elements

component "<size:12>Component</size>\n**Component A**\n<size:10>C_MANY_A</size>" as C_MANY_A [[../architecture-many-components.html#C_MANY_A]] #abcdef

component "<size:12>Component</size>\n**Component B**\n<size:10>C_MANY_B</size>" as C_MANY_B [[../architecture-many-components.html#C_MANY_B]] #abcdef

component "<size:12>Component</size>\n**Component C**\n<size:10>C_MANY_C</size>" as C_MANY_C [[../architecture-many-components.html#C_MANY_C]] #abcdef

component "<size:12>Component</size>\n**Component D**\n<size:10>C_MANY_D</size>" as C_MANY_D [[../architecture-many-components.html#C_MANY_D]] #abcdef

' connect elements

C_MANY_A #-# C_MANY_B


C_MANY_B #-# C_MANY_C


C_MANY_C #-# C_MANY_D



}


package P2 {
' import elements

component "<size:12>Component</size>\n**Component E**\n<size:10>C_MANY_E</size>" as C_MANY_E [[../architecture-many-components.html#C_MANY_E]] #abcdef

component "<size:12>Component</size>\n**Component F**\n<size:10>C_MANY_F</size>" as C_MANY_F [[../architecture-many-components.html#C_MANY_F]] #abcdef

component "<size:12>Component</size>\n**Component G**\n<size:10>C_MANY_G</size>" as C_MANY_G [[../architecture-many-components.html#C_MANY_G]] #abcdef

' connect elements

C_MANY_E #-# C_MANY_F


C_MANY_F #-# C_MANY_G



}

' connect packages with hidden link to nice align elements
P1 --[hidden] P2


package P3 {
' import elements

component "<size:12>Component</size>\n**Component H**\n<size:10>C_MANY_H</size>" as C_MANY_H [[../architecture-many-components.html#C_MANY_H]] #abcdef

component "<size:12>Component</size>\n**Component I**\n<size:10>C_MANY_I</size>" as C_MANY_I [[../architecture-many-components.html#C_MANY_I]] #abcdef

component "<size:12>Component</size>\n**Component J**\n<size:10>C_MANY_J</size>" as C_MANY_J [[../architecture-many-components.html#C_MANY_J]] #abcdef

component "<size:12>Component</size>\n**Component K**\n<size:10>C_MANY_K</size>" as C_MANY_K [[../architecture-many-components.html#C_MANY_K]] #abcdef

component "<size:12>Component</size>\n**Component L**\n<size:10>C_MANY_L</size>" as C_MANY_L [[../architecture-many-components.html#C_MANY_L]] #abcdef

' connect elements

C_MANY_H #-# C_MANY_I


C_MANY_I #-# C_MANY_J


C_MANY_J #-# C_MANY_K


C_MANY_K #-# C_MANY_L



}

' connect packages with hidden link to nice align elements
P2 --[hidden] P3


package P4 {
' import elements

component "<size:12>Component</size>\n**Component M**\n<size:10>C_MANY_M</size>" as C_MANY_M [[../architecture-many-components.html#C_MANY_M]] #abcdef

component "<size:12>Component</size>\n**Component N**\n<size:10>C_MANY_N</size>" as C_MANY_N [[../architecture-many-components.html#C_MANY_N]] #abcdef

component "<size:12>Component</size>\n**Component O**\n<size:10>C_MANY_O</size>" as C_MANY_O [[../architecture-many-components.html#C_MANY_O]] #abcdef

component "<size:12>Component</size>\n**Component P**\n<size:10>C_MANY_P</size>" as C_MANY_P [[../architecture-many-components.html#C_MANY_P]] #abcdef

' connect elements

C_MANY_M #-# C_MANY_N


C_MANY_N #-# C_MANY_O


C_MANY_O #-# C_MANY_P



}

' connect packages with hidden link to nice align elements
P3 --[hidden] P4


@enduml

@startuml

'the packages are project specific and defined in needs_render_context in conf.py

package P1 {
' import elements

component "<size:12>Component</size>\n**Component A**\n<size:10>C_MANY_A</size>" as C_MANY_A [[../architecture-many-components.html#C_MANY_A]] #abcdef

component "<size:12>Component</size>\n**Component B**\n<size:10>C_MANY_B</size>" as C_MANY_B [[../architecture-many-components.html#C_MANY_B]] #abcdef

component "<size:12>Component</size>\n**Component C**\n<size:10>C_MANY_C</size>" as C_MANY_C [[../architecture-many-components.html#C_MANY_C]] #abcdef

component "<size:12>Component</size>\n**Component D**\n<size:10>C_MANY_D</size>" as C_MANY_D [[../architecture-many-components.html#C_MANY_D]] #abcdef

' connect elements

C_MANY_A #-# C_MANY_B


C_MANY_B #-# C_MANY_C


C_MANY_C #-# C_MANY_D



}


package P2 {
' import elements

component "<size:12>Component</size>\n**Component E**\n<size:10>C_MANY_E</size>" as C_MANY_E [[../architecture-many-components.html#C_MANY_E]] #abcdef

component "<size:12>Component</size>\n**Component F**\n<size:10>C_MANY_F</size>" as C_MANY_F [[../architecture-many-components.html#C_MANY_F]] #abcdef

component "<size:12>Component</size>\n**Component G**\n<size:10>C_MANY_G</size>" as C_MANY_G [[../architecture-many-components.html#C_MANY_G]] #abcdef

' connect elements

C_MANY_E #-# C_MANY_F


C_MANY_F #-# C_MANY_G



}

' connect packages with hidden link to nice align elements
P1 --[hidden] P2


package P3 {
' import elements

component "<size:12>Component</size>\n**Component H**\n<size:10>C_MANY_H</size>" as C_MANY_H [[../architecture-many-components.html#C_MANY_H]] #abcdef

component "<size:12>Component</size>\n**Component I**\n<size:10>C_MANY_I</size>" as C_MANY_I [[../architecture-many-components.html#C_MANY_I]] #abcdef

component "<size:12>Component</size>\n**Component J**\n<size:10>C_MANY_J</size>" as C_MANY_J [[../architecture-many-components.html#C_MANY_J]] #abcdef

component "<size:12>Component</size>\n**Component K**\n<size:10>C_MANY_K</size>" as C_MANY_K [[../architecture-many-components.html#C_MANY_K]] #abcdef

component "<size:12>Component</size>\n**Component L**\n<size:10>C_MANY_L</size>" as C_MANY_L [[../architecture-many-components.html#C_MANY_L]] #abcdef

' connect elements

C_MANY_H #-# C_MANY_I


C_MANY_I #-# C_MANY_J


C_MANY_J #-# C_MANY_K


C_MANY_K #-# C_MANY_L



}

' connect packages with hidden link to nice align elements
P2 --[hidden] P3


package P4 {
' import elements

component "<size:12>Component</size>\n**Component M**\n<size:10>C_MANY_M</size>" as C_MANY_M [[../architecture-many-components.html#C_MANY_M]] #abcdef

component "<size:12>Component</size>\n**Component N**\n<size:10>C_MANY_N</size>" as C_MANY_N [[../architecture-many-components.html#C_MANY_N]] #abcdef

component "<size:12>Component</size>\n**Component O**\n<size:10>C_MANY_O</size>" as C_MANY_O [[../architecture-many-components.html#C_MANY_O]] #abcdef

component "<size:12>Component</size>\n**Component P**\n<size:10>C_MANY_P</size>" as C_MANY_P [[../architecture-many-components.html#C_MANY_P]] #abcdef

' connect elements

C_MANY_M #-# C_MANY_N


C_MANY_N #-# C_MANY_O


C_MANY_O #-# C_MANY_P



}

' connect packages with hidden link to nice align elements
P3 --[hidden] P4


@enduml

Behaviour Model: Sequence-Diagram

Configuration

Here we use monkey patching to get in functions in class JinjaFunctions from sphinx-needs. Currently used functions:

  • sequence

  • sequence2

  • sequence3

The patching is been done in metamodel.py.

Example with sequence

Example 8: Visualize a sequence diagram I

.. needuml::
   :debug:

   'add your needed sphinx-needs elements to the list "components"
   {%- set components = ['C_A', 'C_B', 'C_C', 'C_D',] -%}
   {% for c in components %}
   'c = {{c}}
   {{sequence(needs, c)}} {{ref(c)}}
   {% endfor %}

   'here you can add your plantuml sequence diagramm code.
   'documentation can be found here: https://plantuml.com/en/sequence-diagram

   activate C_C

   'If you want to higlight a group of interactions are part of "port's",
   'you can use "group" as with the following example:
   group "{{ref('OP_C_A_OUT', option='title')}} {{ref('IP_C_C_IN', option='title')}}"
   C_A <- C_C : subscribe for service
   activate C_A
   C_A -> C_C : agree on subscribtion
   C_A -> C_C : send data
   deactivate C_A
   end

   group "{{ref('OP_C_B_OUT', option='title')}} {{ref('IP_C_C_IN2', option='title')}}"
   C_B <- C_C : subscribe for service
   activate C_B
   C_B -> C_C : agree on subscribtion
   C_B -> C_C : send data
   deactivate C_B
   end

   group "{{ref('OP_C_C_OUT', option='title')}} {{ref('IP_C_D_IN', option='title')}}"
   C_C -> C_D : send data
   end

   deactivate C_C

@startuml

'add your needed sphinx-needs elements to the list "components"
'c = C_A
participant "Component A" as C_A [[../architecture-examples.html#C_A]]

'c = C_B
participant "Component B" as C_B [[../architecture-examples.html#C_B]]

'c = C_C
participant "Component C" as C_C [[../architecture-examples.html#C_C]]

'c = C_D
participant "Component D" as C_D [[../architecture-examples.html#C_D]]


'here you can add your plantuml sequence diagramm code.
'documentation can be found here: https://plantuml.com/en/sequence-diagram

activate C_C

'If you want to higlight a group of interactions are part of "port's",
'you can use "group" as with the following example:
group "[[../architecture-examples.html#OP_C_A_OUT out]] [[../architecture-examples.html#IP_C_C_IN in]]"
C_A <- C_C : subscribe for service
activate C_A
C_A -> C_C : agree on subscribtion
C_A -> C_C : send data
deactivate C_A
end

group "[[../architecture-examples.html#OP_C_B_OUT out]] [[../architecture-examples.html#IP_C_C_IN2 in]]"
C_B <- C_C : subscribe for service
activate C_B
C_B -> C_C : agree on subscribtion
C_B -> C_C : send data
deactivate C_B
end

group "[[../architecture-examples.html#OP_C_C_OUT out]] [[../architecture-examples.html#IP_C_D_IN in]]"
C_C -> C_D : send data
end

deactivate C_C
@enduml

@startuml

'add your needed sphinx-needs elements to the list "components"
'c = C_A
participant "Component A" as C_A [[../architecture-examples.html#C_A]]

'c = C_B
participant "Component B" as C_B [[../architecture-examples.html#C_B]]

'c = C_C
participant "Component C" as C_C [[../architecture-examples.html#C_C]]

'c = C_D
participant "Component D" as C_D [[../architecture-examples.html#C_D]]


'here you can add your plantuml sequence diagramm code.
'documentation can be found here: https://plantuml.com/en/sequence-diagram

activate C_C

'If you want to higlight a group of interactions are part of "port's",
'you can use "group" as with the following example:
group "[[../architecture-examples.html#OP_C_A_OUT out]] [[../architecture-examples.html#IP_C_C_IN in]]"
C_A <- C_C : subscribe for service
activate C_A
C_A -> C_C : agree on subscribtion
C_A -> C_C : send data
deactivate C_A
end

group "[[../architecture-examples.html#OP_C_B_OUT out]] [[../architecture-examples.html#IP_C_C_IN2 in]]"
C_B <- C_C : subscribe for service
activate C_B
C_B -> C_C : agree on subscribtion
C_B -> C_C : send data
deactivate C_B
end

group "[[../architecture-examples.html#OP_C_C_OUT out]] [[../architecture-examples.html#IP_C_D_IN in]]"
C_C -> C_D : send data
end

deactivate C_C
@enduml

Example with sequence2

Example 9: Visualize a sequence diagram II

.. needuml::
   :debug:

   'add your needed sphinx-needs elements to the list "components"
   {%- set components = ['C_A', 'C_B', 'C_C', 'C_D',] -%}
   {% for c in components %}
   'c = {{c}}
   {{sequence2(context, c)}} {{ref(c)}}
   {% endfor %}

   'If you want to higlight a group of interactions are part of "port's",
   'you can use "group" as with the following example:
   group "{{ref('OP_C_A_OUT', option='title')}} {{ref('IP_C_C_IN', option='title')}}"
   C_A <- C_C : subscribe for service
   activate C_A
   C_A -> C_C : agree on subscribtion
   C_A -> C_C : send data
   deactivate C_A
   end

@startuml

'add your needed sphinx-needs elements to the list "components"
'c = C_A
participant "Component A" as C_A [[../architecture-examples.html#C_A]]

'c = C_B
participant "Component B" as C_B [[../architecture-examples.html#C_B]]

'c = C_C
participant "Component C" as C_C [[../architecture-examples.html#C_C]]

'c = C_D
participant "Component D" as C_D [[../architecture-examples.html#C_D]]


'If you want to higlight a group of interactions are part of "port's",
'you can use "group" as with the following example:
group "[[../architecture-examples.html#OP_C_A_OUT out]] [[../architecture-examples.html#IP_C_C_IN in]]"
C_A <- C_C : subscribe for service
activate C_A
C_A -> C_C : agree on subscribtion
C_A -> C_C : send data
deactivate C_A
end
@enduml

@startuml

'add your needed sphinx-needs elements to the list "components"
'c = C_A
participant "Component A" as C_A [[../architecture-examples.html#C_A]]

'c = C_B
participant "Component B" as C_B [[../architecture-examples.html#C_B]]

'c = C_C
participant "Component C" as C_C [[../architecture-examples.html#C_C]]

'c = C_D
participant "Component D" as C_D [[../architecture-examples.html#C_D]]


'If you want to higlight a group of interactions are part of "port's",
'you can use "group" as with the following example:
group "[[../architecture-examples.html#OP_C_A_OUT out]] [[../architecture-examples.html#IP_C_C_IN in]]"
C_A <- C_C : subscribe for service
activate C_A
C_A -> C_C : agree on subscribtion
C_A -> C_C : send data
deactivate C_A
end
@enduml

Example with sequence3

Example 10: Visualize a sequence diagram III

.. needuml::
   :debug:

   'add your needed sphinx-needs elements to the list "components"
   {%- set components = ['C_A', 'C_B', 'C_C', 'C_D',] -%}
   {% for c in components %}
   'c = {{c}}
   {{sequence3(c)}} {{ref(c)}}
   {% endfor %}

   'If you want to higlight a group of interactions are part of "port's",
   'you can use "group" as with the following example:
   group "{{ref('OP_C_A_OUT', option='title')}} {{ref('IP_C_C_IN', option='title')}}"
   C_A <- C_C : subscribe for service
   activate C_A
   C_A -> C_C : agree on subscribtion
   C_A -> C_C : send data
   deactivate C_A
   end

@startuml

'add your needed sphinx-needs elements to the list "components"
'c = C_A
participant "Component A" as C_A [[../architecture-examples.html#C_A]]

'c = C_B
participant "Component B" as C_B [[../architecture-examples.html#C_B]]

'c = C_C
participant "Component C" as C_C [[../architecture-examples.html#C_C]]

'c = C_D
participant "Component D" as C_D [[../architecture-examples.html#C_D]]


'If you want to higlight a group of interactions are part of "port's",
'you can use "group" as with the following example:
group "[[../architecture-examples.html#OP_C_A_OUT out]] [[../architecture-examples.html#IP_C_C_IN in]]"
C_A <- C_C : subscribe for service
activate C_A
C_A -> C_C : agree on subscribtion
C_A -> C_C : send data
deactivate C_A
end
@enduml

@startuml

'add your needed sphinx-needs elements to the list "components"
'c = C_A
participant "Component A" as C_A [[../architecture-examples.html#C_A]]

'c = C_B
participant "Component B" as C_B [[../architecture-examples.html#C_B]]

'c = C_C
participant "Component C" as C_C [[../architecture-examples.html#C_C]]

'c = C_D
participant "Component D" as C_D [[../architecture-examples.html#C_D]]


'If you want to higlight a group of interactions are part of "port's",
'you can use "group" as with the following example:
group "[[../architecture-examples.html#OP_C_A_OUT out]] [[../architecture-examples.html#IP_C_C_IN in]]"
C_A <- C_C : subscribe for service
activate C_A
C_A -> C_C : agree on subscribtion
C_A -> C_C : send data
deactivate C_A
end
@enduml

How-to referring to Diagrams within a Need

It is not directly possible to refernce to a needarch (diagram). So we introduce here a needpart in the need, so we can reference to these.

Example 11: How-to referring to Diagrams within a Need

.. comp:: Component with Diagrams
   :id: C_DIAGRAMS

   .. needarch::
      :debug:

      {{flow(need().id)}}

   :np:`(Sequence)` Diagram

   .. needarch::
      :key: Sequence
      :debug:

      participant {{need().id}} {{ref(need().id)}} [
      {{need().title}}
      ----
      Here is a bug in safari, it is been rendered correct in firefox.
      With explicite link text:
      {{ref(need().id + '.Deployment', text="Deployment Diagram")}}
      {{ref(need().id + '.Sequence', text="Sequence Diagram")}}
      With link text from needpart id:
      {{ref(need().id + '.Deployment', option="id")}} Diagram
      {{ref(need().id + '.Sequence', option="id")}} Diagram
      ]

.. comp:: Component linking to Diagrams within another Need
   :id: C_LINK2DIAGRAMS
   :links: C_DIAGRAMS.Deployment, C_DIAGRAMS.Sequence

   Link to the Deployment Diagram of Component :need:`C_DIAGRAMS`: :need:`C_DIAGRAMS.Deployment`

   Link to the Sequence Diagram of Component :need:`C_DIAGRAMS`: :need:`C_DIAGRAMS.Sequence`

   .. needarch::
      :debug:

      {{flow(need().id)}}

   :np:`(Internal)` Diagram

   .. needarch::
      :key: Internal
      :debug:

      {{flow(need().id)}}
      {{uml('C_DIAGRAMS', 'Deployment')}}
      {{need().id}} -> C_DIAGRAMS : uses Deployment Diagram

   :np:`(Sequence)` Diagram

   .. needarch::
      :key: Sequence
      :debug:

      {{sequence3(need().id)}} {{ref(need().id)}}
      {{uml('C_DIAGRAMS', 'Sequence')}}

      {{need().id}} -> C_DIAGRAMS : uses Sequence Diagram

**How it is been in the native datamodel**

Finally a `needflow` to show the datamodel represenatation:

.. needflow::
   :filter: docname == "architecture-examples" and section_name == "How-to referring to Diagrams within a Need"
   :show_link_names:
   :debug:

How it is been in the native datamodel

Finally a needflow to show the datamodel represenatation:

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component with**\n**Diagrams**\n<size:10>C_DIAGRAMS</size>" as C_DIAGRAMS [[../architecture-examples.html#C_DIAGRAMS]] #abcdef{
'parts:
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_DIAGRAMS.**Sequence**</size>" as C_DIAGRAMS.Sequence [[../architecture-examples.html#C_DIAGRAMS.Sequence]] #abcdef
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_DIAGRAMS.**Deployment**</size>" as C_DIAGRAMS.Deployment [[../architecture-examples.html#C_DIAGRAMS.Deployment]] #abcdef
}
component "<size:12>Component</size>\n**Component**\n**linking to**\n**Diagrams within**\n**another Need**\n<size:10>C_LINK2DIAGRAMS</size>" as C_LINK2DIAGRAMS [[../architecture-examples.html#C_LINK2DIAGRAMS]] #abcdef{
'parts:
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_LINK2DIAGRAMS.**Internal**</size>" as C_LINK2DIAGRAMS.Internal [[../architecture-examples.html#C_LINK2DIAGRAMS.Internal]] #abcdef
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_LINK2DIAGRAMS.**Sequence**</size>" as C_LINK2DIAGRAMS.Sequence [[../architecture-examples.html#C_LINK2DIAGRAMS.Sequence]] #abcdef
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_LINK2DIAGRAMS.**Deployment**</size>" as C_LINK2DIAGRAMS.Deployment [[../architecture-examples.html#C_LINK2DIAGRAMS.Deployment]] #abcdef
}

' Connection definition 

C_LINK2DIAGRAMS -[dotted]- C_DIAGRAMS.Deployment: links outgoing\n
C_LINK2DIAGRAMS -[dotted]- C_DIAGRAMS.Sequence: links outgoing\n

@enduml

@startuml

' Nodes definition 

component "<size:12>Component</size>\n**Component with**\n**Diagrams**\n<size:10>C_DIAGRAMS</size>" as C_DIAGRAMS [[../architecture-examples.html#C_DIAGRAMS]] #abcdef{
'parts:
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_DIAGRAMS.**Sequence**</size>" as C_DIAGRAMS.Sequence [[../architecture-examples.html#C_DIAGRAMS.Sequence]] #abcdef
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_DIAGRAMS.**Deployment**</size>" as C_DIAGRAMS.Deployment [[../architecture-examples.html#C_DIAGRAMS.Deployment]] #abcdef
}
component "<size:12>Component</size>\n**Component**\n**linking to**\n**Diagrams within**\n**another Need**\n<size:10>C_LINK2DIAGRAMS</size>" as C_LINK2DIAGRAMS [[../architecture-examples.html#C_LINK2DIAGRAMS]] #abcdef{
'parts:
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_LINK2DIAGRAMS.**Internal**</size>" as C_LINK2DIAGRAMS.Internal [[../architecture-examples.html#C_LINK2DIAGRAMS.Internal]] #abcdef
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_LINK2DIAGRAMS.**Sequence**</size>" as C_LINK2DIAGRAMS.Sequence [[../architecture-examples.html#C_LINK2DIAGRAMS.Sequence]] #abcdef
rectangle "<size:12>Component (part)</size>\n****\n<size:10>C_LINK2DIAGRAMS.**Deployment**</size>" as C_LINK2DIAGRAMS.Deployment [[../architecture-examples.html#C_LINK2DIAGRAMS.Deployment]] #abcdef
}

' Connection definition 

C_LINK2DIAGRAMS -[dotted]- C_DIAGRAMS.Deployment: links outgoing\n
C_LINK2DIAGRAMS -[dotted]- C_DIAGRAMS.Sequence: links outgoing\n

@enduml

Template needarch to needs

It is possible to use needarch [2] and needuml [3] in Sphinx-Needs template [6]. You can set the template explicite in the need element itself or over needs_global_options [7].

Within this file we currently set generic views on needs elements of type comp. This is been done with a needs_global_options [7] configuration within metamodel.py.

As template [6] are jinja templates, even like needarch [2] and needuml [3], we have to escape the jinja templates in the needs_template with `{% raw %} ... {% endraw %}`.

You can find an example in the needs_templates/arch_template.need:

 1{# Place the original content here #}
 2{{content}}
 3
 4**Following needarch is been added with needs template**
 5
 6:np:`(Deployment)` Diagram
 7
 8{% raw %}
 9.. needarch::
10   :key: Deployment
11
12   {{flow(need().id)}} {
13   {% for e in need().parent_needs_back %}
14   {% if needs[e].parent_need == need().id and (needs[e].type == "outport" or needs[e].type == "inport") %}{{uml(e)}}{% endif %}
15   {% endfor %}
16   {% if 'Deployment' in need().parts %}card "Deployment Diagram" as {{need().id + '.Deployment'}} {{ref(need().id + '.Deployment')}}{% endif %}
17   {% if 'Sequence' in need().parts %}card "Sequence Diagram" as {{need().id + '.Sequence'}} {{ref(need().id + '.Sequence')}}{% endif %}
18   }
19{% endraw %}