Basic tag handling.
This commit is contained in:
parent
bea8c99187
commit
7c3ce78f70
@ -1,6 +1,6 @@
|
||||
from ..files import editor_input
|
||||
from .. import repo
|
||||
from ..paper import get_bibentry_from_string
|
||||
from ..paper import get_bibentry_from_string, get_safe_metadata_from_content
|
||||
|
||||
|
||||
def parser(subparsers, config):
|
||||
@ -8,26 +8,34 @@ def parser(subparsers, config):
|
||||
help='open the paper bibliographic file in an editor')
|
||||
parser.add_argument('reference',
|
||||
help='reference to the paper (citekey or number)')
|
||||
parser.add_argument('-m', '--meta', action='store_true', default=False,
|
||||
help='edit metadata')
|
||||
return parser
|
||||
|
||||
|
||||
def command(config, ui, reference):
|
||||
def command(config, ui, reference, meta):
|
||||
rp = repo.Repository.from_directory()
|
||||
key = rp.citekey_from_ref(reference, fatal=True)
|
||||
paper = rp.paper_from_citekey(key)
|
||||
filepath = rp.path_to_paper_file(key, 'bib')
|
||||
to_edit = 'bib'
|
||||
if meta:
|
||||
to_edit = 'meta'
|
||||
filepath = rp.path_to_paper_file(key, to_edit)
|
||||
editor = config.get('papers', 'edit-cmd')
|
||||
with open(filepath) as f:
|
||||
content = f.read()
|
||||
while True:
|
||||
# Get new content from user
|
||||
content = editor_input(editor, content)
|
||||
new_key = key
|
||||
bib = None
|
||||
metadata = None
|
||||
# Parse new content
|
||||
new_key, bib = get_bibentry_from_string(content)
|
||||
paper.update(key=key, bib=bib)
|
||||
# TODO merge into an update method
|
||||
paper.citekey = new_key
|
||||
paper.bibentry = bib
|
||||
if meta:
|
||||
metadata = get_safe_metadata_from_content(content)
|
||||
else:
|
||||
new_key, bib = get_bibentry_from_string(content)
|
||||
paper.update(key=key, bib=bib, meta=metadata)
|
||||
try:
|
||||
rp.update(paper, old_citekey=key)
|
||||
break
|
||||
|
@ -17,8 +17,7 @@ def parser(subparsers, config):
|
||||
|
||||
def command(config, ui, bibpath, copy):
|
||||
"""
|
||||
:param pdffilepath path (no url yet) to a pdf or ps file
|
||||
:param bibtex bibtex file (in .bib, .bibml or .yaml format.
|
||||
:param bibpath: path (no url yet) to a bibliography file
|
||||
"""
|
||||
if copy is None:
|
||||
copy = config.get('papers', 'import-copy')
|
||||
|
@ -3,6 +3,7 @@ import os
|
||||
import unicodedata
|
||||
import re
|
||||
from cStringIO import StringIO
|
||||
import yaml
|
||||
|
||||
from pybtex.database import Entry, BibliographyData, FieldDict, Person
|
||||
|
||||
@ -19,7 +20,8 @@ CITEKEY_EXCLUDE_RE = re.compile('[%s]'
|
||||
|
||||
BASE_META = {
|
||||
'external-document': None,
|
||||
'notes': []
|
||||
'labels': [],
|
||||
'notes': [],
|
||||
}
|
||||
|
||||
|
||||
@ -63,11 +65,21 @@ def copy_bibentry(entry):
|
||||
return Entry(entry.type, fields=fd, persons=persons)
|
||||
|
||||
|
||||
def get_safe_metadata(metapath):
|
||||
if metapath is None:
|
||||
return None
|
||||
else:
|
||||
return files.read_yamlfile(metapath)
|
||||
def get_safe_metadata(meta):
|
||||
base_meta = Paper.create_meta()
|
||||
if meta is not None:
|
||||
base_meta.update(meta)
|
||||
return base_meta
|
||||
|
||||
|
||||
def get_safe_metadata_from_content(content):
|
||||
return get_safe_metadata(yaml.load(content))
|
||||
|
||||
|
||||
def get_safe_metadata_from_path(metapath):
|
||||
if metapath is not None:
|
||||
content = files.read_yamlfile(metapath)
|
||||
return get_safe_metadata(content)
|
||||
|
||||
|
||||
def check_citekey(citekey):
|
||||
@ -89,10 +101,10 @@ class Paper(object):
|
||||
"""
|
||||
|
||||
def __init__(self, bibentry=None, metadata=None, citekey=None):
|
||||
if not bibentry:
|
||||
if bibentry is None:
|
||||
bibentry = Entry(DEFAULT_TYPE)
|
||||
self.bibentry = bibentry
|
||||
if not metadata:
|
||||
if metadata is None:
|
||||
metadata = Paper.create_meta()
|
||||
self.metadata = metadata
|
||||
check_citekey(citekey)
|
||||
@ -203,7 +215,7 @@ class Paper(object):
|
||||
@classmethod
|
||||
def load(cls, bibpath, metapath=None):
|
||||
key, entry = get_bibentry_from_file(bibpath)
|
||||
metadata = get_safe_metadata(metapath)
|
||||
metadata = get_safe_metadata_from_path(metapath)
|
||||
p = Paper(bibentry=entry, metadata=metadata, citekey=key)
|
||||
return p
|
||||
|
||||
@ -262,7 +274,7 @@ class PaperInRepo(Paper):
|
||||
@classmethod
|
||||
def load(cls, repo, bibpath, metapath=None):
|
||||
key, entry = get_bibentry_from_file(bibpath)
|
||||
metadata = get_safe_metadata(metapath)
|
||||
metadata = get_safe_metadata_from_path(metapath)
|
||||
p = PaperInRepo(repo, bibentry=entry, metadata=metadata,
|
||||
citekey=key)
|
||||
return p
|
||||
|
@ -36,7 +36,7 @@ def bib_oneliner(bibentry):
|
||||
field = 'booktitle'
|
||||
journal = bibtex_purify(bibentry.fields.get(field, ''))
|
||||
return u'{authors} \"{title}\" {journal} ({year})'.format(
|
||||
authors=colored(authors, 'green'),
|
||||
authors=colored(authors, 'cyan'),
|
||||
title=title,
|
||||
journal=colored(journal, 'yellow'),
|
||||
year=year,
|
||||
|
@ -24,6 +24,7 @@ entries:
|
||||
META = """
|
||||
external-document: null
|
||||
notes: []
|
||||
labels: []
|
||||
"""
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user