move_doc in docbroker + consequences + remove_cmd remove notes too
This commit is contained in:
parent
29897cc0ad
commit
148917c70c
@ -23,5 +23,5 @@ def command(args):
|
||||
ui.error("citekey {} not found".format(args.citekey))
|
||||
ui.exit(1)
|
||||
|
||||
notepath = rp.databroker.real_notepath('notesdir://{}.txt'.format(args.citekey))
|
||||
notepath = rp.databroker.real_notepath(args.citekey)
|
||||
content.edit_file(config().edit_cmd, notepath, temporary=False)
|
||||
|
@ -56,26 +56,29 @@ class DataBroker(object):
|
||||
def in_docsdir(self, docpath):
|
||||
return self.docbroker.in_docsdir(docpath)
|
||||
|
||||
def copy_doc(self, citekey, source_path, overwrite=False):
|
||||
return self.docbroker.copy_doc(citekey, source_path, overwrite=overwrite)
|
||||
def real_docpath(self, docpath):
|
||||
return self.docbroker.real_docpath(docpath)
|
||||
|
||||
def add_doc(self, citekey, source_path, overwrite=False):
|
||||
return self.docbroker.add_doc(citekey, source_path, overwrite=overwrite)
|
||||
|
||||
def remove_doc(self, docpath, silent=True):
|
||||
return self.docbroker.remove_doc(docpath, silent=silent)
|
||||
|
||||
def real_docpath(self, docpath):
|
||||
return self.docbroker.real_docpath(docpath)
|
||||
def rename_doc(self, docpath, new_citekey):
|
||||
return self.docbroker.rename_doc(docpath, new_citekey)
|
||||
|
||||
# notesbroker
|
||||
|
||||
def in_notesdir(self, docpath):
|
||||
return self.notebroker.in_docsdir(docpath)
|
||||
def real_notepath(self, citekey):
|
||||
notepath = 'notesdir://{}.txt'.format(citekey)
|
||||
return self.notebroker.real_docpath(notepath)
|
||||
|
||||
def copy_note(self, citekey, source_path, overwrite=False):
|
||||
return self.notebroker.copy_doc(citekey, source_path, overwrite=overwrite)
|
||||
def remove_note(self, citekey, silent=True):
|
||||
notepath = 'notesdir://{}.txt'.format(citekey)
|
||||
return self.notebroker.remove_doc(notepath, silent=silent)
|
||||
|
||||
def remove_note(self, docpath, silent=True):
|
||||
return self.notebroker.remove_doc(docpath, silent=silent)
|
||||
def rename_note(self, old_citekey, new_citekey):
|
||||
notepath = 'notesdir://{}.txt'.format(old_citekey)
|
||||
return self.notebroker.rename_doc(notepath, new_citekey)
|
||||
|
||||
|
||||
def real_notepath(self, docpath):
|
||||
return self.notebroker.real_docpath(docpath)
|
@ -65,28 +65,28 @@ class DataCache(object):
|
||||
def in_docsdir(self, docpath):
|
||||
return self.databroker.in_docsdir(docpath)
|
||||
|
||||
def real_docpath(self, docpath):
|
||||
return self.databroker.real_docpath(docpath)
|
||||
|
||||
def copy_doc(self, citekey, source_path, overwrite=False):
|
||||
return self.databroker.copy_doc(citekey, source_path, overwrite=overwrite)
|
||||
return self.databroker.add_doc(citekey, source_path, overwrite=overwrite)
|
||||
|
||||
def remove_doc(self, docpath, silent=True):
|
||||
return self.databroker.remove_doc(docpath, silent=silent)
|
||||
|
||||
def real_docpath(self, docpath):
|
||||
return self.databroker.real_docpath(docpath)
|
||||
def rename_doc(self, docpath, new_citekey):
|
||||
return self.databroker.rename_doc(docpath, new_citekey)
|
||||
|
||||
# notesbroker
|
||||
|
||||
def in_notesdir(self, docpath):
|
||||
return self.databroker.in_notesdir(docpath)
|
||||
def real_notepath(self, citekey):
|
||||
return self.databroker.real_notepath(citekey)
|
||||
|
||||
def copy_note(self, citekey, source_path, overwrite=False):
|
||||
return self.databroker.copy_note(citekey, source_path, overwrite=overwrite)
|
||||
def remove_note(self, citekey, silent=True):
|
||||
return self.databroker.remove_note(citekey, silent=True)
|
||||
|
||||
def remove_note(self, docpath, silent=True):
|
||||
return self.databroker.remove_note(docpath, silent=silent)
|
||||
|
||||
def real_notepath(self, docpath):
|
||||
return self.databroker.real_notepath(docpath)
|
||||
def rename_note(self, old_citekey, new_citekey):
|
||||
return self.databroker.rename_note(old_citekey, new_citekey)
|
||||
|
||||
|
||||
# class ChangeTracker(object):
|
||||
|
@ -110,7 +110,7 @@ class DocBroker(object):
|
||||
* these document have an adress of the type "docsdir://citekey.pdf"
|
||||
* docsdir:// correspond to /path/to/pubsdir/doc (configurable)
|
||||
* document outside of the repository will not be removed.
|
||||
* deliberately, there is no move_doc method.
|
||||
* move_doc only applies from inside to inside the docsdir
|
||||
"""
|
||||
|
||||
def __init__(self, directory, scheme='docsdir', subdir='doc'):
|
||||
@ -129,8 +129,21 @@ class DocBroker(object):
|
||||
# def doc_exists(self, citekey, ext='.txt'):
|
||||
# return check_file(os.path.join(self.docdir, citekey + ext), fail=False)
|
||||
|
||||
def copy_doc(self, citekey, source_path, overwrite=False):
|
||||
""" Copy a document to the pubsdir/doc, and return the location
|
||||
def real_docpath(self, docpath):
|
||||
"""Return the full path
|
||||
Essentially transform pubsdir://doc/{citekey}.{ext} to /path/to/pubsdir/doc/{citekey}.{ext}.
|
||||
Return absoluted paths of regular ones otherwise.
|
||||
"""
|
||||
if self.in_docsdir(docpath):
|
||||
parsed = urlparse.urlparse(docpath)
|
||||
if parsed.path == '':
|
||||
docpath = os.path.join(self.docdir, parsed.netloc)
|
||||
else:
|
||||
docpath = os.path.join(self.docdir, parsed.netloc, parsed.path[1:])
|
||||
return os.path.normpath(os.path.abspath(docpath))
|
||||
|
||||
def add_doc(self, citekey, source_path, overwrite=False):
|
||||
""" Add a document to the docsdir, and return its location.
|
||||
|
||||
The document will be named {citekey}.{ext}.
|
||||
The location will be docsdir://{citekey}.{ext}.
|
||||
@ -162,15 +175,17 @@ class DocBroker(object):
|
||||
if check_file(filepath):
|
||||
os.remove(filepath)
|
||||
|
||||
def real_docpath(self, docpath):
|
||||
"""Return the full path
|
||||
Essentially transform pubsdir://doc/{citekey}.{ext} to /path/to/pubsdir/doc/{citekey}.{ext}.
|
||||
Return absoluted paths of regular ones otherwise.
|
||||
def rename_doc(self, docpath, new_citekey):
|
||||
""" Move a document inside the docsdir
|
||||
|
||||
:raise IOError: if docpath doesn't point to a file
|
||||
if new_citekey doc exists already.
|
||||
:raise ValueError: if docpath is not in docsdir().
|
||||
|
||||
if an exception is raised, the files on disk haven't changed.
|
||||
"""
|
||||
if self.in_docsdir(docpath):
|
||||
parsed = urlparse.urlparse(docpath)
|
||||
if parsed.path == '':
|
||||
docpath = os.path.join(self.docdir, parsed.netloc)
|
||||
else:
|
||||
docpath = os.path.join(self.docdir, parsed.netloc, parsed.path[1:])
|
||||
return os.path.normpath(os.path.abspath(docpath))
|
||||
if not self.in_docsdir(docpath):
|
||||
raise ValueError('cannot rename an external file ({}).'.format(docpath))
|
||||
|
||||
new_notepath = self.add_doc(new_citekey, docpath)
|
||||
self.remove_doc(docpath)
|
@ -87,6 +87,7 @@ class Repository(object):
|
||||
metadata = self.databroker.pull_metadata(citekey)
|
||||
docpath = metadata.get('docfile')
|
||||
self.databroker.remove_doc(docpath, silent=True)
|
||||
self.databroker.remove_note(citekey, silent=True)
|
||||
except IOError:
|
||||
pass # FXME: if IOError is about being unable to
|
||||
# remove the file, we need to issue an error.I
|
||||
@ -103,6 +104,7 @@ class Repository(object):
|
||||
# check if new_citekey does not exists
|
||||
if self.databroker.exists(new_citekey, both=False):
|
||||
raise IOError("can't rename paper to {}, conflicting files exists".format(new_citekey))
|
||||
|
||||
# modify bibdata (__delitem__ not implementd by pybtex)
|
||||
new_bibdata = BibliographyData()
|
||||
new_bibdata.entries[new_citekey] = paper.bibdata.entries[old_citekey]
|
||||
@ -110,17 +112,13 @@ class Repository(object):
|
||||
|
||||
# move doc file if necessary
|
||||
if self.databroker.in_docsdir(paper.docpath):
|
||||
new_docpath = self.databroker.copy_doc(new_citekey, paper.docpath)
|
||||
self.databroker.remove_doc(paper.docpath)
|
||||
paper.docpath = new_docpath
|
||||
paper.docpath = self.databroker.rename_doc(paper.docpath, new_citekey)
|
||||
|
||||
# move note file if necessary
|
||||
try:
|
||||
old_notepath = 'notesdir://{}.txt'.format(old_citekey)
|
||||
new_notepath = self.databroker.copy_note(new_citekey, old_notepath)
|
||||
self.databroker.remove_notei(old_notepath)
|
||||
self.databroker.rename_note(old_citekey, new_citekey)
|
||||
except IOError:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
pass
|
||||
|
||||
# push_paper to new_citekey
|
||||
paper.citekey = new_citekey
|
||||
|
Loading…
x
Reference in New Issue
Block a user