A python library for making ascii-art into network graphs.
Project description
Asciigraf is a python library that turns ascii diagrams of networks into network objects. It returns a networkx graph of nodes for each alpha-numeric element in the input text; nodes are connected in the graph to match the edges represented in the diagram by -, /, \ and |.
Installation
Asciigraf can be installed from pypi using pip:
~/$ pip install asciigraf
Usage
Asciigraf expects a string containg a 2-d ascii diagram. Nodes can be an alphanumeric string composed of characters in A-Z, a-z, 0-9, and _, {, }. Edges can be composed of -, /, \ and | (with some restrictions on how corners work — see the tests).
import asciigraf
network = asciigraf.graph_from_ascii("""
NodeA-----
|
|---NodeB
""")
print(network)
>>> <networkx.classes.graph.Graph at 0x7f24c3a8b470>
print(network.edges())
>>> [('NodeA', 'NodeB')]
print(network.nodes())
>>> ['NodeA', 'NodeB']
Networkx provides tools to attach data to nodes and edges, and asciigraf leverages these in a number of ways; in the example below you can see that asciigraf uses this to attach a Point object to each node indicating where on the (x, y) plane each node starts ( 0,0 is at the top-left). It also attaches a length attribute to each edge which matches the number of characters in that edge.
print(network.nodes(data=True))
>>> [('NodeA', {'position': Point(1, 10)}), ('NodeB', {'position': Point(3, 23)})]
print(network.edges(data=True))
>>> [('NodeA', 'NodeB', OrderedDict([('length', 10)]))]
Asciigraf also lets you annotate the edges of graphs using in-line labels — denoted by parentheses. The contents of the label will be attached to the edge on which it is drawn with the attribute name label.
network = asciigraf.graph_from_ascii("""
A---(nuts)----B----(string)---C
|
|
|
D---(string)----E
""")
print(network.get_edge_data("A", "B")["label"])
>>> nuts
print(network.get_edge_data("B", "C")["label"])
>>> string
print(network.get_edge_data("D", "E")["label"])
>>> string
print(hasattr(network.get_edge_data("B", "D"), "label"))
>>> False
Have fun!
import asciigraf
network = asciigraf.graph_from_ascii("""
s---p----1---nx
/ | |
/ | 0---f
6l-a c--
/ | \--k
/ ua | 9e
q \ | /
\-r7z jud
\ |
m y
\ |
v-ow
""")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file asciigraf-0.3.0.tar.gz.
File metadata
- Download URL: asciigraf-0.3.0.tar.gz
- Upload date:
- Size: 4.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6858814fdca4c0178a3042bfde092172b6f54b4240b7fda562bf2f218130c4ad
|
|
| MD5 |
b072dfb9a4a624850b5b0b56c31ae4ce
|
|
| BLAKE2b-256 |
9a5f92d8b13e3730d65da5e4a730c4537eb85eac716281f1453c999eb061769f
|