Skip to main content

A python library for making ascii-art into network graphs.

Project description

https://img.shields.io/badge/License-MIT-yellow.svg https://badge.fury.io/py/asciigraf.svg https://img.shields.io/pypi/pyversions/asciigraf.svg Maintainability

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 words, sentences and punctuation (for a look at what is all tested to work, see the node recognition tests). Edges can be composed of -, /, \ and |.

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 graphs, 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 x, y position tuple to each node indicating the line/col position of each node ( 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, as well as a list of positions for each character an edge. In addition, the input data is attached as a graph attribute ascii_string for reference.

print(network.nodes(data=True))
>>> [('NodeA', {'position': (10, 1)}), ('NodeB', {'position': (23, 3)})]

print(network.edges(data=True))
>>> [('NodeA', 'NodeB', OrderedDict([('length', 10), 'points', [...]))]

print(network.edge['NodeA']['NodeB']['points'])
>>> [(15, 1), (16, 1), (17, 1), (18, 1),
     (19, 1), (19, 2), (19, 3), (20, 3), (21, 3), (22, 3)]

print(network.graph["ascii_string"])
>>>
    NodeA-----
             |
             |---NodeB

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---(pebbles)----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"])
>>> pebbles

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asciigraf-1.1.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

asciigraf-1.1.0-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file asciigraf-1.1.0.tar.gz.

File metadata

  • Download URL: asciigraf-1.1.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for asciigraf-1.1.0.tar.gz
Algorithm Hash digest
SHA256 641f8e3c97642ba812d3640246ed236e58b533a1322123ed46f9b06357d9102b
MD5 86a2b1f8a6452a0e7a3fe191c74e4fba
BLAKE2b-256 a7d6a7ba4bd0fdfe71b2d09c0aba4e641b48c698e01edcc7cc67c8c546ec85f9

See more details on using hashes here.

File details

Details for the file asciigraf-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: asciigraf-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for asciigraf-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a308a9a5f785970299255b430d48d1fd2c3addf7a0c4aea749d0957aa09326cc
MD5 be328b907c4e21167e0bffbc0127afd1
BLAKE2b-256 929d79e3ed3170b5116239f308bc42c3a6c5dfe6f114624a36b6243a0c379bfe

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page