From 7288560c5678991527c7b2c2ed0d7f3979f70c67 Mon Sep 17 00:00:00 2001 From: zlg Date: Sat, 29 Sep 2018 23:27:05 -0700 Subject: cli: Add pretty printing to 'list' command Also add the "--width" option to specify the maximum width of the table. --- src/vgstash_cli.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) (limited to 'src/vgstash_cli.py') diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py index 3d1d1db..e4d1a32 100644 --- a/src/vgstash_cli.py +++ b/src/vgstash_cli.py @@ -1,8 +1,11 @@ import vgstash import sqlite3 import click +import os import sys +from shutil import get_terminal_size + def get_db(): """Fetch a vgstash DB object from the default location. @@ -25,6 +28,43 @@ def init(): else: raise sqlite3.OperationalError("Cannot create schema.") +def row_format(row, width, header): + """ + TODO + """ + # There's another way to do this, involving gathering the entire results and + # *then* formatting them. That is incredibly wasteful of resources imo, so + # it may need some testing to see if it's better. Ideally, we'd only make + # the table as wide as needed; that can't happen unless we know the longest + # title's length... + + twidth = int(width) - 35 + if header == True: + click.echo("{:^4s} | {:<{w}s} | {:<8s} | {:^3s} | {:<7s}".format( + "ID", + "Title", + "System", + "Own", + "Status", + w=twidth) + ) + click.echo("-" * int(width)) + + gidstr = "{: >4d}".format(row['rowid']) + titlestr = "{: <{w}s}".format(row['title'][:twidth], w=twidth) + systemstr = "{: ^8s}".format(row['system'][:8]) + # unowned, physical, digital, both + ownltr = [' ', 'P', ' D', 'P D'] + ownstr = "{: <3s}".format(ownltr[row['ownership']]) + statltr = { + -1: 'U', + 0: 'N', + 1: 'P', + 2: 'B', + 3: 'C' + } + statstr = "{: <7s}".format((" " * row['progress'] * 2) + statltr[row['progress']]) + print(" | ".join((gidstr, titlestr, systemstr, ownstr, statstr))) @cli.command('add') @click.argument('title', type=str) @@ -66,9 +106,11 @@ def add(title, system, ownership, progress, notes): @cli.command('list') @click.argument('filter', required=False, default="allgames") @click.option('--raw', '-r', is_flag=True, show_default=True, default=False, help="Output raw, pipe-delimited lines") -def list_games(filter, raw): +@click.option('--width', '-w', type=str, required=False, default=get_terminal_size(fallback=(80,24)).columns, help="The width of the table to output, in characters.") +def list_games(filter, raw, width): db = get_db() res = db.list_games(filter) + first_pass = True for r in res: if 'notes' in r.keys() and len(r['notes']) > 0: notes = r['notes'].replace('\n', '\\n') @@ -83,8 +125,8 @@ def list_games(filter, raw): str(r['ownership']), str(r['progress']), notes - ) )) + ) else: - pass - #pretty_print(r) + row_format(r, width, first_pass) + first_pass = False -- cgit v1.2.3-54-g00ecf zlg1-2/+1 w=1'>cli: Add "export" commandzlg2-5/+54 2018-10-10cli: Add "import" commandzlg5-1/+76 2018-10-09Bump to 0.3alpha6 for PyPIzlg1-1/+1 2018-10-09cli: Add "notes" commandzlg2-4/+74 2018-10-09update_game: ensure notes are also savedzlg1-2/+2 2018-10-09cli: add 'update' commandzlg3-20/+92 2018-10-06cli: Add "delete" commandzlg2-0/+19 2018-10-06Remove ID field from DBzlg3-38/+46 2018-10-06cli: change "Status" heading to "Progress"zlg2-36/+40 2018-09-29Bump to 0.3alpha5 for PyPIzlg1-1/+1 2018-09-29cli: Add pretty printing to 'list' commandzlg3-17/+107 2018-09-08setup.py: Bump to alpha4 for PyPIzlg1-1/+1 2018-09-08cli: add '--raw' option to list commandzlg2-9/+45 2018-09-08Add remaining filters to vgstash packagezlg1-2/+11 2018-09-04Update LICENSE to match setup.pyzlg1-80/+67 2018-09-03Branch off from master with pytest, tox, clickzlg16-778/+779 2018-03-18Flesh out filter types and ownership statuszlg3-82/+144 2018-03-18README.mdown: break line correctlyzlg1-1/+1 2018-03-18add 'playlog' list filterzlg2-2/+9 2018-03-13Update helpers a bitzlg1-2/+9 2018-03-13Make VGSTASH_DB_LOCATION point to a filezlg2-21/+20 2016-11-18Remove settings from helpers.shZe Libertine Gamer1-5/+0 2016-11-15Correct phrasing in README.Ze Libertine Gamer1-4/+4 2016-11-13DerpZe Libertine Gamer1-0/+1 2016-11-03Improve error handling in shell scriptsZe Libertine Gamer4-3/+23 2016-10-24Correct run_again, add recursionZe Libertine Gamer1-0/+4 2016-10-21Add quotes to correct behavior for arglistZe Libertine Gamer1-1/+1 2016-10-14updater.sh: add recursion, error handlingZe Libertine Gamer1-43/+101 2016-10-14Correct pipe-handling behaviorZe Libertine Gamer1-1/+9 2016-10-12Clarify a method to move between platformsZe Libertine Gamer1-2/+5