summaryrefslogtreecommitdiff
path: root/src/vgstash_cli.py
diff options
context:
space:
mode:
authorzlg <zlg@zlg.space>2018-10-10 19:44:18 -0700
committerzlg <zlg@zlg.space>2018-10-10 19:44:18 -0700
commit669aed9ec7261c49c49ed26c31f218e42faa491a (patch)
treef1f3588bd8430bee3d98d745db720da981e43d06 /src/vgstash_cli.py
parentBump to 0.3alpha6 for PyPI (diff)
downloadvgstash-669aed9ec7261c49c49ed26c31f218e42faa491a.tar.gz
vgstash-669aed9ec7261c49c49ed26c31f218e42faa491a.tar.bz2
vgstash-669aed9ec7261c49c49ed26c31f218e42faa491a.tar.xz
vgstash-669aed9ec7261c49c49ed26c31f218e42faa491a.zip
cli: Add "import" command
Currently the import command will only accept YAML files, but is ready for expansion to other formats as needed.
Diffstat (limited to '')
-rw-r--r--src/vgstash_cli.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py
index 6289dba..5f69c47 100644
--- a/src/vgstash_cli.py
+++ b/src/vgstash_cli.py
@@ -5,6 +5,7 @@ import os
import subprocess
import sys
import tempfile
+import yaml
# Click also has this, but it doesn't support a fallback value.
from shutil import get_terminal_size
@@ -196,3 +197,42 @@ def notes(title, system, edit):
click.echo("Notes for {} on {}:".format(target_game.title, target_game.system))
click.echo()
click.echo(target_game.notes)
+
+
+@cli.command("import")
+@click.option("--format", "-f", type=click.Choice(["yaml"]), required=False, default="yaml")
+@click.option("--update", "-u", is_flag=True, default=False, help="Overwrite existing games with the file's data")
+@click.argument("filepath",
+ type=click.Path(
+ readable=True,
+ resolve_path=True,
+ dir_okay=False,
+ file_okay=True),
+ default=sys.stdin,
+ )
+def import_file(format, filepath, update):
+ """
+ Import game data from an external file matching the chosen format.
+
+ The default format is YAML.
+ """
+ if format == "yaml":
+ with open(filepath) as fp:
+ data = yaml.safe_load(fp)
+ db = get_db()
+ count = len(data)
+ for game in data:
+ try:
+ db.add_game(
+ vgstash.Game(
+ game["title"],
+ game["system"],
+ game["ownership"],
+ game["progress"],
+ game["notes"]
+ ),
+ update=update
+ )
+ except sqlite3.IntegrityError as e:
+ count -= 1
+ click.echo("Successfully imported {} games from {}.".format(count, filepath))
700'>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