Skip to content
Snippets Groups Projects
Commit cffbda19 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

Merge branch 'f-plantuml' into 'dev'

ENH: Provide further information in the plantuml diagram

See merge request caosdb/caosdb-pylib!15
parents c560db8a 7ccf49f8
Branches
Tags
No related merge requests found
......@@ -44,13 +44,16 @@ def get_description(description_str):
words = description_str.split()
lines = []
lines.append("")
for w in words:
if len(lines[-1] + w) > 60:
lines.append("")
if len(lines[-1]) > 0:
lines[-1] += " "
lines[-1] += w
description = "\n".join(lines)
return description + "\n"
......@@ -89,22 +92,28 @@ def recordtypes_to_plantuml_string(iterable):
def _add_properties(c, importance=None):
result = ""
for p in c.get_properties():
if importance is None or c.get_properties().get_importance(p) == importance:
if importance is not None and len(result) == 0:
result += ".." + importance.lower() + "..\n"
name = p.name
p_type = p.datatype
if p_type is None:
# get type from properties
for p2 in properties:
if p2.name == p.name:
p_type = p2.datatype
if p_type is None:
# is reference?
for p2 in classes:
if p2.name == p.name:
p_type = p2
if isinstance(p_type, db.Entity):
p_type = p_type.name
dependencies[c].append(p_type)
......@@ -114,20 +123,24 @@ def recordtypes_to_plantuml_string(iterable):
dependencies[c].append(c2.name)
result += ' {name} ({type})\n'.format(
name=name, type=p_type)
return result
result = "@startuml\n\n"
result += "skinparam classAttributeIconSize 0\n"
result += "package Properties #DDDDDD {\n"
for p in properties:
inheritances[p] = p.get_parents()
dependencies[p] = []
result += "class \"{klass}\" << (P,#008800) >> {{\n".format(klass=p.name)
if p.description is not None:
result += get_description(p.description)
result += "\n..\n"
if isinstance(p.datatype, str):
result += "datatype: " + p.datatype + "\n"
elif isinstance(p.datatype, db.Entity):
......@@ -138,10 +151,12 @@ def recordtypes_to_plantuml_string(iterable):
result += "}\n\n"
result += "package RecordTypes #DDDDDD {\n"
for c in classes:
inheritances[c] = c.get_parents()
dependencies[c] = []
result += "class \"{klass}\" << (C,#FF1111) >> {{\n".format(klass=c.name)
if c.description is not None:
result += get_description(c.description)
......@@ -156,6 +171,7 @@ def recordtypes_to_plantuml_string(iterable):
else:
result += "\n..\n"
result += "}\n\n"
for g in grouped:
inheritances[g] = g.get_parents()
result += "class \"{klass}\" << (G,#0000FF) >> {{\n".format(klass=g.name)
......@@ -165,14 +181,30 @@ def recordtypes_to_plantuml_string(iterable):
for par in parents:
result += "\"{par}\" <|-- \"{klass}\"\n".format(
klass=c.name, par=par.name)
for c, deps in dependencies.items():
for dep in deps:
result += "\"{klass}\" *-- \"{dep}\"\n".format(
klass=c.name, dep=dep)
result += "\n"
result += "package \"B is a subtype of A\" <<Rectangle>> {\n A <|-- B\n}\n\n"
result += "package \"The property P references an instance of D\" <<Rectangle>> {\nclass C {\nP(D)\n}\n\n C *-- D\n}\n\n"
result += """
package \"B is a subtype of A\" <<Rectangle>> {
A <|-right- B
note "This determines what you find when you query for the RecordType.\\n'FIND RECORD A' will provide Records which have a parent\\nA or B, while 'FIND RECORD B' will provide only Records which have a parent B." as N1
}
"""
result += """
package \"The property P references an instance of D\" <<Rectangle>> {
class C {
P(D)
}
C *-right- D
note "Employ this when searching for C: 'FIND RECORD C WITH D'\\nOr if the value of D is a Record: 'FIND RECORD C WHICH REFERENCES D' is possible.\\nEmploying this while searching for D: 'FIND RECORD D WHICH IS REFERENCED BY C" as N2
}
"""
result += "\n@enduml\n"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment