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