structurizr-python icon indicating copy to clipboard operation
structurizr-python copied to clipboard

Support association of child elements through Python context blocks

Open yt-ms opened this issue 4 years ago • 2 comments

Checklist

Is your feature related to a problem? Please describe it.

Constructing a tree of elements from Python is quite verbose today:

system = model.add_software_system(name="My System")
container1 = system.add_container(name="Container 1")
component1 = container1.add_component(name="Component 1")
component2 = container1.add_component(name="Component 2")
component1.add_relationship(description="Sends events to", destination=component2)
etc.

Describe the solution you would like.

Using Python context, we could achieve the same outcome in an easier to read manner:

with model:
  with SoftwareSystem("My System"):
    with Container("Container 1") as container1:
      Component("Component 1") >> "Sends events to" >> Component("Component 2")

This would involve establishing appropriate ContextVars in __enter__()/__exit__() and checking for those during constructors to auto-register via the parent's add().

Additional context

This is inspired by mingrammer/diagrams.

yt-ms avatar Sep 27 '20 10:09 yt-ms

I'm less enthusiastic about this feature request. In mingrammer it makes more sense to me because the context provides a logical block to add elements to a diagram or sub-cluster. However, even there it is very implicit that every instance and relationship is automatically added to the context object.

Additionally, It seems to me like nesting levels would escalate rather quickly. In my opinion, it will actually make it harder to understand because I have to parse every statement keeping in mind which element is in the active context. I think the other syntax elements that you proposed in #28 and #13 already improve the situation a lot.

So I'm not convinced this is an improvement and I'd rather prioritize adding missing behaviour to the classes.

Midnighter avatar Sep 27 '20 14:09 Midnighter

OK, fair enough.

yt-ms avatar Sep 27 '20 16:09 yt-ms