From 4a0cdafd28b4288b8f9fae9db84b0ebd8dfba8a8 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Thu, 8 Mar 2018 21:07:16 +0100 Subject: Add basic import implementation --- bibtool/cli.py | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'bibtool/cli.py') diff --git a/bibtool/cli.py b/bibtool/cli.py index 23ceaa4..3356d16 100644 --- a/bibtool/cli.py +++ b/bibtool/cli.py @@ -1,6 +1,12 @@ # Copyright (C) 2018 Robin Krahl # SPDX-License-Identifier: MIT +import os +import os.path +import shutil + +import bibtexparser +import bibtool.extract import click @@ -15,6 +21,38 @@ def cli(): @cli.command('import') @click.argument('filename', type=TYPE_FILE) -@click.option('--directory', type=TYPE_DIR) +@click.option('--directory', type=TYPE_DIR, default=os.getcwd()) def _import(filename, directory): - click.echo(filename) + bibtex_data = bibtool.extract.get_bibtex_data(filename) + + if not bibtex_data.entries: + raise Exception('Did not find any Bibtex entry.') + if len(bibtex_data.entries) > 1: + raise Exception('Found more than one Bibtex entries.') + + entry = bibtex_data.entries[0] + click.echo('Found one Bibtex entry: ' + entry['ID']) + if click.confirm('Do you want to edit the entry?'): + edited_data = click.edit(bibtexparser.dumps(bibtex_data)) + if edited_data: + bibtex_data = bibtexparser.loads(edited_data) + if len(bibtex_data.entries) != 1: + raise Exception('The edited data must contain exactly one Bibtex entry.') + entry = bibtex_data.entries[0] + + click.confirm('Add {} to the repository?'.format(entry['ID']), + default=True, abort=True) + + bibfilename = os.path.join(directory, entry['ID'] + '.bib') + outfileext = os.path.splitext(filename)[1] + outfilename = os.path.join(directory, entry['ID'] + outfileext) + + if os.path.exists(bibfilename) or os.path.exists(outfilename): + click.confirm('There is already a document with this ID in the ' + 'repository. Continue anyway?', abort=True) + + with open(bibfilename, 'w') as f: + bibtexparser.dump(bibtex_data, f) + shutil.copy(filename, outfilename) + + click.echo('Added {} to the repository.'.format(entry['ID'])) -- cgit v1.2.1