Make wireviz an installable package.
This commit is contained in:
parent
e8318c3286
commit
7663f2b832
1
MANIFEST.in
Normal file
1
MANIFEST.in
Normal file
@ -0,0 +1 @@
|
||||
include AUTHORS CHANGES LICENSE README.rst requirements.txt
|
||||
147
README.rst
Normal file
147
README.rst
Normal file
@ -0,0 +1,147 @@
|
||||
WireViz
|
||||
=======
|
||||
|
||||
Summary
|
||||
-------
|
||||
|
||||
WireViz is a tool for easily documenting cables, wiring harnesses and
|
||||
connector pinouts. It takes plain text, YAML-formatted files as input
|
||||
and produces beautiful graphical output (SVG, PNG, …) thanks to
|
||||
`GraphViz`_. It handles automatic BOM (Bill of Materials) creation and
|
||||
has a lot of extra features.
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
- WireViz input files are fully text based
|
||||
|
||||
- No special editor required
|
||||
- Human readable
|
||||
- Easy version control
|
||||
- YAML syntax
|
||||
|
||||
- Understands and uses color abbreviations as per `IEC 60757`_
|
||||
(black=BK, red=RD, …)
|
||||
|
||||
- Optionally outputs colors as abbreviation (e.g. ‘YE’), full name
|
||||
(e.g. ‘yellow’) or hex value (e.g. ‘#ffff00’), with choice of
|
||||
UPPER or lower case
|
||||
|
||||
- Auto-generates standard wire color schemes and allows custom ones if
|
||||
needed
|
||||
|
||||
- `DIN 47100`_ (WT/BN/GN/YE/GY/PK/BU/RD/BK/VT/…)
|
||||
- `IEC 62`_ (BN/RD/OR/YE/GN/BU/VT/GY/WT/BK/…)
|
||||
|
||||
- Understands wire gauge in mm² or AWG
|
||||
|
||||
- Optionally auto-calculates and displays AWG equivalent when
|
||||
specifying mm²
|
||||
|
||||
- Allows more than one connector per side, as well as loopbacks
|
||||
- Allows for easy-autorouting for 1-to-1 wiring
|
||||
- Generates BOM (Bill of Materials)
|
||||
|
||||
*Note*: WireViz is not designed to represent the complete wiring of a
|
||||
system. Its main aim is to document the construction of individual wires
|
||||
and harnesses.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
Demo 01
|
||||
~~~~~~~
|
||||
|
||||
`WireViz input file`_:
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
connectors:
|
||||
X1:
|
||||
type: D-Sub
|
||||
subtype: female
|
||||
pinout: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS, RI]
|
||||
X2:
|
||||
type: Molex KK 254
|
||||
subtype: female
|
||||
pinout: [GND, RX, TX]
|
||||
|
||||
cables:
|
||||
W1:
|
||||
gauge: 0.25 mm2
|
||||
length: 0.2
|
||||
color_code: DIN
|
||||
wirecount: 3
|
||||
shield: true
|
||||
|
||||
connections:
|
||||
-
|
||||
- X1: [5,2,1]
|
||||
- W1: [1,2,3]
|
||||
- X2: [1,3,2]
|
||||
-
|
||||
- X1: 5
|
||||
- W1: s
|
||||
|
||||
Output file:
|
||||
|
||||
.. figure:: examples/demo01.png
|
||||
:alt: Sample output diagram
|
||||
|
||||
Sample output diagram
|
||||
|
||||
`Bill of Materials`_ (auto-generated)
|
||||
|
||||
Demo 02
|
||||
~~~~~~~
|
||||
|
||||
|image0|
|
||||
|
||||
`Source`_ - `Bill of Materials <examples/demo02.bom.tsv>`__
|
||||
|
||||
Tutorial and example gallery
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
See the `tutorial page`_ for sample code, as well as the `example
|
||||
gallery`_ to see more of what WireViz can do.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
::
|
||||
|
||||
$ python3 wireviz.py ~/path/to/file/mywire.yml
|
||||
|
||||
This will output the following files
|
||||
|
||||
::
|
||||
|
||||
mywire.gv GraphViz output
|
||||
mywire.svg Wiring diagram as vector image
|
||||
mywire.png Wiring diagram as raster image
|
||||
mywire.bom.tsv BOM (bill of materials) as tab-separated text file
|
||||
mywire.html HTML page with wiring diagram and BOM embedded
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
This is very much a `work in progress`_. Source code, API, syntax and
|
||||
functionality may change wildly at any time.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
Developed and tested using Python 3.7; mi
|
||||
|
||||
.. _GraphViz: https://www.graphviz.org/
|
||||
.. _IEC 60757: https://en.wikipedia.org/wiki/Electronic_color_code#Color_band_system
|
||||
.. _DIN 47100: https://en.wikipedia.org/wiki/DIN_47100
|
||||
.. _IEC 62: https://en.wikipedia.org/wiki/Electronic_color_code#Color_band_system
|
||||
.. _WireViz input file: examples/demo01.yml
|
||||
.. _Bill of Materials: examples/demo01.bom.tsv
|
||||
.. _Source: examples/demo02.yml
|
||||
.. _tutorial page: tutorial/readme.md
|
||||
.. _example gallery: examples/readme.md
|
||||
.. _work in progress: todo.md
|
||||
|
||||
.. |image0| image:: examples/demo02.png
|
||||
105
readme.md
105
readme.md
@ -1,105 +0,0 @@
|
||||
# WireViz
|
||||
|
||||
## Summary
|
||||
|
||||
WireViz is a tool for easily documenting cables, wiring harnesses and connector pinouts. It takes plain text, YAML-formatted files as input and produces beautiful graphical output (SVG, PNG, ...) thanks to [GraphViz](https://www.graphviz.org/). It handles automatic BOM (Bill of Materials) creation and has a lot of extra features.
|
||||
|
||||
## Features
|
||||
|
||||
* WireViz input files are fully text based
|
||||
* No special editor required
|
||||
* Human readable
|
||||
* Easy version control
|
||||
* YAML syntax
|
||||
* Understands and uses color abbreviations as per [IEC 60757](https://en.wikipedia.org/wiki/Electronic_color_code#Color_band_system) (black=BK, red=RD, ...)
|
||||
* Optionally outputs colors as abbreviation (e.g. 'YE'), full name (e.g. 'yellow') or hex value (e.g. '#ffff00'), with choice of UPPER or lower case
|
||||
* Auto-generates standard wire color schemes and allows custom ones if needed
|
||||
* [DIN 47100](https://en.wikipedia.org/wiki/DIN_47100) (WT/BN/GN/YE/GY/PK/BU/RD/BK/VT/...)
|
||||
* [IEC 62](https://en.wikipedia.org/wiki/Electronic_color_code#Color_band_system) (BN/RD/OR/YE/GN/BU/VT/GY/WT/BK/...)
|
||||
* Understands wire gauge in mm² or AWG
|
||||
* Optionally auto-calculates and displays AWG equivalent when specifying mm²
|
||||
* Allows more than one connector per side, as well as loopbacks
|
||||
* Allows for easy-autorouting for 1-to-1 wiring
|
||||
* Generates BOM (Bill of Materials)
|
||||
|
||||
_Note_: WireViz is not designed to represent the complete wiring of a system. Its main aim is to document the construction of individual wires and harnesses.
|
||||
|
||||
## Examples
|
||||
|
||||
### Demo 01
|
||||
|
||||
[WireViz input file](examples/demo01.yml):
|
||||
|
||||
```yaml
|
||||
connectors:
|
||||
X1:
|
||||
type: D-Sub
|
||||
subtype: female
|
||||
pinout: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS, RI]
|
||||
X2:
|
||||
type: Molex KK 254
|
||||
subtype: female
|
||||
pinout: [GND, RX, TX]
|
||||
|
||||
cables:
|
||||
W1:
|
||||
gauge: 0.25 mm2
|
||||
length: 0.2
|
||||
color_code: DIN
|
||||
wirecount: 3
|
||||
shield: true
|
||||
|
||||
connections:
|
||||
-
|
||||
- X1: [5,2,1]
|
||||
- W1: [1,2,3]
|
||||
- X2: [1,3,2]
|
||||
-
|
||||
- X1: 5
|
||||
- W1: s
|
||||
```
|
||||
|
||||
Output file:
|
||||
|
||||

|
||||
|
||||
[Bill of Materials](examples/demo01.bom.tsv) (auto-generated)
|
||||
|
||||
### Demo 02
|
||||
|
||||

|
||||
|
||||
[Source](examples/demo02.yml) - [Bill of Materials](examples/demo02.bom.tsv)
|
||||
|
||||
### Tutorial and example gallery
|
||||
|
||||
See the [tutorial page](tutorial/readme.md) for sample code,
|
||||
as well as the [example gallery](examples/readme.md) to see more of what WireViz can do.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
$ python3 wireviz.py ~/path/to/file/mywire.yml
|
||||
```
|
||||
|
||||
This will output the following files
|
||||
|
||||
```
|
||||
mywire.gv GraphViz output
|
||||
mywire.svg Wiring diagram as vector image
|
||||
mywire.png Wiring diagram as raster image
|
||||
mywire.bom.tsv BOM (bill of materials) as tab-separated text file
|
||||
mywire.html HTML page with wiring diagram and BOM embedded
|
||||
```
|
||||
|
||||
## Status
|
||||
|
||||
This is very much a [work in progress](todo.md). Source code, API, syntax and functionality may change wildly at any time.
|
||||
|
||||
## Requirements
|
||||
|
||||
Developed and tested using Python 3.7; might not work with older Python versions.
|
||||
|
||||
## License
|
||||
|
||||
GNU GPLv3
|
||||
2
src/batch.py → scripts/batch
Normal file → Executable file
2
src/batch.py → scripts/batch
Normal file → Executable file
@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import wireviz
|
||||
import os
|
||||
|
||||
16
scripts/wirewiz
Executable file
16
scripts/wirewiz
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Invoke wireviz from the command line."""
|
||||
|
||||
import argparse
|
||||
|
||||
import wireviz
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument('file_input', nargs='?', default='_test/test.yml')
|
||||
ap.add_argument('file_output', nargs='?', default=None)
|
||||
ap.add_argument('--bom', action='store_const', default=True, const=True)
|
||||
args = ap.parse_args()
|
||||
|
||||
wireviz.parse(args.file_input, file_out=args.file_output, gen_bom=args.bom)
|
||||
38
setup.py
Normal file
38
setup.py
Normal file
@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3
|
||||
"""WireViz is a tool for easily documenting wiring harnesses."""
|
||||
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
|
||||
setup(
|
||||
|
||||
name='wireviz',
|
||||
version='0.0.2',
|
||||
|
||||
author='Daniel Rojas',
|
||||
author_email='github@danielrojas.net',
|
||||
maintainer='Daniel Rojas',
|
||||
maintainer_email='github@danielrojas.net',
|
||||
|
||||
url='',
|
||||
description=__doc__,
|
||||
long_description=open('README.rst').read(),
|
||||
install_requires=open('requirements.txt').read().splitlines(),
|
||||
|
||||
packages=find_packages(),
|
||||
include_package_data=True,
|
||||
zip_safe=False,
|
||||
scripts=[
|
||||
'scripts/wirewiz',
|
||||
],
|
||||
|
||||
license='GPL',
|
||||
platforms='any',
|
||||
classifiers=[
|
||||
'Development Status :: 4 - Beta',
|
||||
'Programming Language :: Python',
|
||||
'Programming Language :: Python :: 3',
|
||||
]
|
||||
|
||||
)
|
||||
6
wireviz/__init__.py
Normal file
6
wireviz/__init__.py
Normal file
@ -0,0 +1,6 @@
|
||||
# Copyright 2020 Daniel Rojas. All Rights Reserved.
|
||||
|
||||
from wireviz.core import parse
|
||||
|
||||
|
||||
__all__ = 'parse',
|
||||
20
src/wireviz.py → wireviz/core.py
Executable file → Normal file
20
src/wireviz.py → wireviz/core.py
Executable file → Normal file
@ -1,13 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any, List
|
||||
from collections import Counter
|
||||
import yaml
|
||||
from graphviz import Graph
|
||||
|
||||
import wv_colors
|
||||
from wv_helper import nested, int2tuple, awg_equiv, flatten2d, tuplelist2tsv
|
||||
from graphviz import Graph
|
||||
import yaml
|
||||
|
||||
import wireviz.colors as wv_colors
|
||||
from wireviz.helper import nested, int2tuple, awg_equiv, flatten2d, tuplelist2tsv
|
||||
|
||||
class Harness:
|
||||
|
||||
@ -594,13 +596,3 @@ def parse(file_in, file_out=None, gen_bom=False):
|
||||
raise Exception('Wrong number of connection parameters')
|
||||
|
||||
h.output(filename=file_out, format=('png','svg'), gen_bom=gen_bom, view=False)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import argparse
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument('file_input', nargs='?', default='_test/test.yml')
|
||||
ap.add_argument('file_output', nargs='?', default=None)
|
||||
ap.add_argument('--bom', action='store_const', default=True, const=True)
|
||||
args = ap.parse_args()
|
||||
|
||||
parse(args.file_input, file_out=args.file_output, gen_bom=args.bom)
|
||||
Loading…
x
Reference in New Issue
Block a user