summaryrefslogtreecommitdiff
path: root/src/vgstash_cli.py
diff options
context:
space:
mode:
authorzlg <zlg@zlg.space>2018-09-08 19:15:48 -0700
committerzlg <zlg@zlg.space>2018-09-08 19:15:48 -0700
commitb2d47d2ca978e2cd62be4cb6fe0471598427b8b7 (patch)
treee453e5da5f934058dc65bc0b352642305773bea7 /src/vgstash_cli.py
parentAdd remaining filters to vgstash package (diff)
downloadvgstash-b2d47d2ca978e2cd62be4cb6fe0471598427b8b7.tar.gz
vgstash-b2d47d2ca978e2cd62be4cb6fe0471598427b8b7.tar.bz2
vgstash-b2d47d2ca978e2cd62be4cb6fe0471598427b8b7.tar.xz
vgstash-b2d47d2ca978e2cd62be4cb6fe0471598427b8b7.zip
cli: add '--raw' option to list command
Add '--raw' option to the list command, in addition to proper note expansion. Newline characters in notes are escaped to be friendly to scripting. This option may be shortened to '-r' at the user's convenience. In raw output mode, the information is formatted in plain pipe-delimited strings, one line per row: title|system|ownership|progress|notes ownership and progress are printed in their numeric form, consistent with the OWNERSHIP and PROGRESS dictionaries in the vgstash package. An empty notes field will result in a line ending with a pipe and no whitespace following it.
Diffstat (limited to 'src/vgstash_cli.py')
-rw-r--r--src/vgstash_cli.py40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py
index 9f5eef4..3d1d1db 100644
--- a/src/vgstash_cli.py
+++ b/src/vgstash_cli.py
@@ -4,9 +4,10 @@ import click
import sys
def get_db():
- """
- Convenience function to fetch a vgstash DB object from the default location.
- """
+ """Fetch a vgstash DB object from the default location.
+
+ Change DEFAULT_CONFIG['db_location'] before calling this function
+ to alter behavior."""
return vgstash.DB(vgstash.DEFAULT_CONFIG['db_location'])
@@ -24,6 +25,7 @@ def init():
else:
raise sqlite3.OperationalError("Cannot create schema.")
+
@cli.command('add')
@click.argument('title', type=str)
@click.argument('system', type=str)
@@ -49,16 +51,40 @@ def add(title, system, ownership, progress, notes):
"have completed",
)
note_clause = "" if len(game.notes) == 0 else " It also has notes."
- click.echo("Added {} for {}. You {} it and {} it.{}".format(game.title, game.system, own_clause[game.ownership], progress_clause[game.progress], note_clause))
+ click.echo("Added {} for {}. You {} it and {} it.{}".format(
+ game.title,
+ game.system,
+ own_clause[game.ownership],
+ progress_clause[game.progress],
+ note_clause,
+ ))
except sqlite3.IntegrityError as e:
print(e)
click.echo("Couldn't add game.")
@cli.command('list')
-@click.argument('filter', required=False)
-def list_games(filter="allgames"):
+@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):
db = get_db()
res = db.list_games(filter)
for r in res:
- click.echo("{}|{}|{}|{}|{}".format(r['title'], r['system'], r['ownership'], r['progress'], r['notes']))
+ if 'notes' in r.keys() and len(r['notes']) > 0:
+ notes = r['notes'].replace('\n', '\\n')
+ notes = notes.replace('\r', '\\r')
+ else:
+ notes = ''
+
+ if raw:
+ click.echo("|".join((
+ r['title'],
+ r['system'],
+ str(r['ownership']),
+ str(r['progress']),
+ notes
+ )
+ ))
+ else:
+ pass
+ #pretty_print(r)