diff --git a/SNT/03_Internet/Simulation/build.py b/SNT/03_Internet/Simulation/build.py index 7dee5e3..b734e3e 100644 --- a/SNT/03_Internet/Simulation/build.py +++ b/SNT/03_Internet/Simulation/build.py @@ -1,13 +1,12 @@ import yaml -import cairosvg +#import cairosvg +from weasyprint import HTML, CSS import jinja2 from pathlib import Path import networkx as nx import matplotlib.pyplot as plt -#cairosvg.svg2pdf(url="role.svg", write_to="role.pdf") - def graph(roles): g = nx.Graph() g.add_nodes_from([str(role["num"]) for role in roles]) @@ -16,30 +15,42 @@ def graph(roles): g.add_edge(str(role["num"]), str(list(lien.keys())[0])) return g +def build_topo(topo, roles): + plt.figure(figsize=(2,2)) + ax = plt.gca() + #ax.set_title(f"Forme du réseau: {topo}") + g = graph(roles) + nx.draw(g, + node_color='white', + node_size=100, + ax=ax) + _ = ax.axis('off') + plt.margins(0.2) + plt.subplots_adjust(left=0, right=1, top=1, bottom=0) + plt.savefig(f"{topo}/forme.png", + transparent=True, + ) + plt.cla() + +def role_card(role, topo, template, css): + card = template.render(topo=topo, **role) + Path(topo).mkdir(exist_ok=True) + dest = f"{topo}/role{role['num']}.html" + with open(dest, "w") as f: + f.write(card) + #cairosvg.svg2pdf(url=dest, write_to=dest.replace("svg", "pdf")) + HTML(dest).write_pdf(dest.replace("html", "pdf"), stylesheets=[css]) + with open("roles.yml", "r") as f: topos = yaml.load(f, Loader=yaml.SafeLoader) -with open("role.svg", "r") as f: - template = jinja2.Template(f.read()) +with open("role.html", "r") as f: + template = jinja2.Template(f.read(), undefined=jinja2.StrictUndefined) +css = CSS("role.css") for topo, desc in topos.items(): - for role in desc["roles"]: - card = template.render(**role) - Path(topo).mkdir(exist_ok=True) - dest = f"{topo}/role{role['num']}.svg" - with open(dest, "w") as f: - f.write(card) - cairosvg.svg2pdf(url=dest, write_to=dest.replace("svg", "pdf")) + build_topo(topo, desc["roles"]) + + for role in desc["roles"]: + role_card(role, topo, template, css) - plt.figure(figsize=(5,5)) - ax = plt.gca() - ax.set_title('Random graph') - ax.set_title(f"Forme du réseau: {topo}") - g = graph(desc['roles']) - nx.draw(g, with_labels=True, - node_color='lightgreen', - node_size=700, - ax=ax) - _ = ax.axis('off') - plt.savefig(f"{topo}/forme.pdf") - plt.cla() diff --git a/SNT/03_Internet/Simulation/role.css b/SNT/03_Internet/Simulation/role.css index 597892f..762b2a5 100644 --- a/SNT/03_Internet/Simulation/role.css +++ b/SNT/03_Internet/Simulation/role.css @@ -1,7 +1,6 @@ @page { margin: 0; - height: 8cm; - width: 25cm; + size: A5; } html { height: 100%; @@ -11,7 +10,61 @@ body { box-sizing: border-box; color: #2A3239; display: flex; - flex-wrap: rows; - justify-content: space-between; + flex-direction: column; margin: 0; } + +header { + display: flex; + flex-direction: row; + background-color: #D9411E; + justify-content: space-between; +} + +header > * { + padding: 10px; +} + +#layout { + width: 15%; + background-color: #333; +} +#layout > img { + width: 4em; + height: 4em; + min-height: 100%; + min-width: 100%; + vertical-align: middle; +} +#ip { + font-size: 2em; + display: flex; + justify-content: center; + text-align: center; +} +#number { + background-color: #333; + color: #fff; + width: 15%; + font-size: 2em; + display: flex; + justify-content: center; + text-align: center; +} + +main { + display: flex; + flex-direction: column; + justify-content: space-between; +} +main > * { + padding: 10px; +} + +#links { + background-color: #eeeeee; + border: solid black; + border-width: medium 0 medium 0; + } + + diff --git a/SNT/03_Internet/Simulation/role.html b/SNT/03_Internet/Simulation/role.html new file mode 100644 index 0000000..c0e4621 --- /dev/null +++ b/SNT/03_Internet/Simulation/role.html @@ -0,0 +1,57 @@ + + + + + + Role {{num}} + + + + +
+ + + + +

IP: {{IP}}

+
+ +

# {{ num }}

+
+
+
+
+

Objectifs:

+ {% if objectifs %} + + {% endif %} +
+
+

Particularités:

+ {% if particularites %} + + {% else %} + ∅ + {% endif %} +
+ +
+ +