in source/msam/chalicelib/tags.py [0:0]
def update_diagrams():
"""
scan for data with tags with MSAM-Diagram name and include in those named diagrams
"""
try:
ddb_table_name = CONTENT_TABLE_NAME
ddb_resource = boto3.resource('dynamodb', config=MSAM_BOTO3_CONFIG)
ddb_table = ddb_resource.Table(ddb_table_name)
# expensive textual scan
response = ddb_table.scan(FilterExpression="contains(#data, :tagname)", ExpressionAttributeNames={"#data": "data"}, ExpressionAttributeValues={":tagname": "MSAM-Diagram"})
items = response["Items"]
# check for paging
while "LastEvaluatedKey" in response:
# scan again with start key
response = ddb_table.scan(
FilterExpression="contains(#data, :tagname)",
ExpressionAttributeNames={"#data": "data"},
ExpressionAttributeValues={":tagname": "MSAM-Diagram"},
ExclusiveStartKey=response['LastEvaluatedKey'])
items = items + response["Items"]
# filter down the results
for record in items:
cloud_resource = json.loads(record["data"])
if "Tags" in cloud_resource:
if "MSAM-Diagram" in cloud_resource["Tags"]:
arn = record["arn"]
diagram_name = cloud_resource["Tags"]["MSAM-Diagram"]
print("arn {} needed on diagram {}".format(arn, diagram_name))
diagrams = settings.get_setting("diagrams")
if not diagrams:
diagrams = []
found_diagram = False
view_id = None
for diagram in diagrams:
if diagram["name"] == diagram_name:
view_id = diagram["view_id"]
found_diagram = True
print("found diagram id {}".format(view_id))
if not found_diagram:
view_id = stringcase.snakecase(diagram_name)
print("new diagram id {}".format(view_id))
diagrams.append({"name": diagram_name, "view_id": view_id})
settings.put_setting("diagrams", diagrams)
print("created diagram id {}".format(view_id))
# check if this node is already on the diagram layout
if not layout.has_node(view_id, arn):
print("adding node {} to diagram id {}".format(arn, view_id))
# add the node arn to the layout
layout_items = [{"view": view_id, "id": arn, "x": 0, "y": 0}]
layout.set_node_layout(layout_items)
else:
print("node {} already on diagram id {}".format(arn, view_id))
except ClientError as error:
print(error)