Skip to content

Commit

Permalink
feat: added layers support for edges
Browse files Browse the repository at this point in the history
  • Loading branch information
tsypuk committed Sep 26, 2023
1 parent 311e0fb commit 4ed040e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 12 deletions.
25 changes: 19 additions & 6 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ def add_vertex_list(self, vertexes, distribution: Distribution = None):
for vertex in vertexes:
self.add_vertex(**vertex)

def add_connection(self, src_node_id, dst_node_id, edge_style=None, labels=None, label_style=None):
def add_connection(self, src_node_id, dst_node_id, edge_style=None, labels=None, label_style=None, layer_name=None, layer_id=None):
if labels is None:
labels = []
if edge_style is None:
Expand Down Expand Up @@ -356,11 +356,12 @@ def add_connection(self, src_node_id, dst_node_id, edge_style=None, labels=None,
node_template = self.get_node_template('edge')
customize(node_template=node_template, style=edge_style)

parent_id = str(self.get_layer_id(layer_name, layer_id))
mx_cell = Et.SubElement(self.root,
'mxCell',
id=f'edge:{src_node_id}:to:{dst_node_id}',
style=node_template['style'],
parent="1",
parent=parent_id,
source=f'vertex:{src_node_id}',
target=f'vertex:{dst_node_id}',
edge="2")
Expand Down Expand Up @@ -403,12 +404,13 @@ def add_connection(self, src_node_id, dst_node_id, edge_style=None, labels=None,
logging.error(
f'Not both vertexes present to build Edge between them (expected vertex:{src_node_id} & vertex:{dst_node_id})')

def add_link(self, src_node_id, dst_node_id, action=None):
def add_link(self, src_node_id, dst_node_id, action=None, layer_name=None, layer_id=None):

style = {
'startArrow': 'none',
'endArrow': 'none'
}
self.add_connection(src_node_id=src_node_id, dst_node_id=dst_node_id, labels=action, edge_style=style)
self.add_connection(src_node_id=src_node_id, dst_node_id=dst_node_id, labels=action, edge_style=style, layer_name=layer_name, layer_id=layer_id)

def add_bidirectional_link(self, src_node_id, dst_node_id, action=None):
style = {
Expand Down Expand Up @@ -537,7 +539,9 @@ def read_uml_from_file(self, file_name):
for actor in actors:
print(actor)

self.extract_message(sequence_diagram, actors)
# create Layer with UML file name
self.add_layer(file_name)
self.extract_messages_from_uml(sequence_diagram, actors, layer_name=file_name)

def extract_actors(self, sequence_diagram):
actors = []
Expand All @@ -549,13 +553,22 @@ def extract_actors(self, sequence_diagram):
actors.append(actor)
return actors

def extract_message(self, sequence_diagram, actors):
def extract_messages_from_uml(self, sequence_diagram, actors, layer_name):
lines = sequence_diagram.split('\n')
for line in lines:
strip = line.strip()
if any(strip.startswith(actor) for actor in actors):
data = self.extract_info(line)
print(data)
try:
# connect vertex of actor1 actor2 using arrow and message
self.add_link(
self.actors_to_nodes[data[0]],
self.actors_to_nodes[data[1]],
action=[data[2]],
layer_name=layer_name)
except:
print('No such node')

# [Actor][Arrow][Actor]:Message text

Expand Down
12 changes: 6 additions & 6 deletions samples/samples/uml_mapping.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
nodes:
- actor: S3Bucket
node_id: arn:aws:s3:::bucket_name/key_name
node_id: s3:arn:aws:s3:::bucket_name/key_name
- actor: LambdaFunction1
node_id: arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda
node_id: lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda
- actor: LambdaFunction2
node_id: arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda
node_id: lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda
- actor: SNS
node_id: arn:aws:sns:eu-west-1:123456789012:internal.fifo
node_id: sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo
- actor: SQS
node_id: arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo
node_id: sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo
- actor: Storage
node_id: arn:aws:dynamodb:eu-west-1:123456789012:table/table1
node_id: dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1

0 comments on commit 4ed040e

Please sign in to comment.