Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/spookylukey/table-format
Format Python code (list of lists) as a fixed width table.
https://github.com/spookylukey/table-format
Last synced: 2 months ago
JSON representation
Format Python code (list of lists) as a fixed width table.
- Host: GitHub
- URL: https://github.com/spookylukey/table-format
- Owner: spookylukey
- License: mit
- Created: 2021-04-06T13:14:36.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-10-05T11:39:31.000Z (about 2 years ago)
- Last Synced: 2024-08-09T02:38:34.153Z (5 months ago)
- Language: Python
- Size: 67.4 KB
- Stars: 17
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
table-formatFormat Python code (list of lists) as a fixed width table.
## Motivation and usage
You've got some tests or other code like this:
```pythondef test_the_table():
assert generate_the_table() == [
['Date', 'Description', 'Amount', 'Balance'],
['2021-04-06', 'Account opened', 0, 0],
['2021-04-07', 'Cash deposit at 123 Main St, Newtown', 1000, 1000],
['2021-04-08', 'ACME anvils', -300, 700],
]
```Or maybe even worse like this:
```python
assert generate_the_table() == [
[
"Date",
"Description",
"Amount",
"Balance",
],
[
"2021-04-06",
"Account opened",
0,
0,
],
[
"2021-04-07",
"Cash deposit at 123 Main St, Newtown",
1000,
1000,
],
[
"2021-04-08",
"ACME anvils",
-300,
700,
],
]
```Wouldn't it be nice to have readable tests with columns all lined up?
```python
[
['Date', 'Description', 'Amount', 'Balance'],
['2021-04-06', 'Account opened', 0, 0 ],
['2021-04-07', 'Cash deposit at 123 Main St, Newtown', 1000, 1000 ],
['2021-04-08', 'ACME anvils', -300, 700 ],
]
```To reformat, copy the whole list of lists to the clipboard, then pipe to ``table-format
--guess-indent``:* on Linux you can use `xsel` or `xclip`
* on MacOS you can use `pbpaste`
* on Windows Powershell you can use `Get-Clipboard`Linux example:
```shell
$ xsel | table-format --guess-indent
```The output should be ready to paste back into your editor. You might do better
with some editor integration — see the tips below.### Options
Pass the `--help` flag to show all options:
```shell
$ table-format --help
```## ⬇️ Installation
The most recent release can be installed from
[PyPI](https://pypi.org/project/table-format/) with:```bash
$ pip install table-format
```You can also use [pipx](https://pipxproject.github.io/pipx/) to install it more
conveniently in an isolated environment:```bash
$ pipx install table-format
```
See [CHANGES](CHANGES.md) for changelog.The most recent code and data can be installed directly from GitHub with:
```bash
$ pip install git+https://github.com/spookylukey/table-format.git
```To install in development mode, use the following:
```bash
$ git clone git+https://github.com/spookylukey/table-format.git
$ cd table-format
$ pip install -e .
```## Other tips
### Tuples
It also supports having lists of tuples as well as lists of lists, and this will
be preserved.### Black
Black will revert code formatted like this. But you can use `# fmt: off` and `#
fmt: on` commands to stop black reformatting these blocks.To format quotes more similarly to Black style, use ``--quote-style=double``
(this won’t be exactly the same as Black, it just switches to double quotes
instead of single).### Flake8
Flake8 might complain about:
- E202 - whitespace before `]`
- E241 - multiple spaces after comma
- E501 - line too longThe simplest solution is to silence those flake8 errors globally in your config,
especially if you are using a formatter like Black which will enforce those same
rules for you automatically.Otherwise, you can silence the errors on a per-line basis using
`noqa:E202,E241,E501`, which you can automatically add to the end of each line
like this:```bash
$ table-format --add-noqa=E202,E241,E501
```Other ``noqa`` items and other end of line comments will be preserved.
### Emacs
With default keybindings, doing `C-u` `M-|` `table-format --guess-indent` `ENTER` will
replace the current region with the formatted version from `table-format`.You can wrap it up in a nice function like this:
```elisp
(defun align-python-table ()
(interactive)
(shell-command-on-region
;; beginning and end of region
(region-beginning)
(region-end)
;; command and parameters
"table-format --guess-indent"
;; output buffer
(current-buffer)
;; replace?
t
;; name of the error buffer
"*Table-Format Error Buffer*"
;; show error buffer?
t))
```### Other editors
Contributions of instructions to make this easy to use in other editors are very
welcome!## ⚖️ License
The code in this package is licensed under the MIT License.
## 🙏 Contributing
Contributions, whether filing an issue, making a pull request, or forking, are appreciated. See
[CONTRIBUTING.rst](https://github.com/spookylukey/table-format/blob/master/CONTRIBUTING.rst) for more information on getting
involved.## 🛠️ Development
The final section of the README is you for if you want to get involved by making
a code contribution.### ❓ Testing
After cloning the repository, install dev requirements:
```shell
pip install -r requirements-dev.txt
```And run pytest:
```shell
pytest
```To test across all environments:
```shell
$ tox
```Additionally, these tests are automatically re-run with each commit in a [GitHub
Action](https://github.com/spookylukey/table-format/actions?query=workflow%3ATests).## 🍪 Cookiecutter Acknowledgement
This package was created with
[@audreyfeldroy](https://github.com/audreyfeldroy)'s
[cookiecutter](https://github.com/cookiecutter/cookiecutter) package using
[@cthoyt](https://github.com/cthoyt)'s
[cookiecutter-snekpack](https://github.com/cthoyt/cookiecutter-snekpack)
template.