Added an option to edit entries
This commit is contained in:
parent
60e8678680
commit
bd91fa2e49
@ -107,12 +107,11 @@ Here are some sources of inspirations for this project :
|
|||||||
|
|
||||||
A list of ideas and TODO. Don't hesitate to give feedback on the ones you really want or to propose your owns.
|
A list of ideas and TODO. Don't hesitate to give feedback on the ones you really want or to propose your owns.
|
||||||
|
|
||||||
|
40. Categories
|
||||||
45. Doc / Man
|
45. Doc / Man
|
||||||
50. Webserver interface
|
50. Webserver interface
|
||||||
60. Categories
|
60. Automatic download of new arXiv version
|
||||||
70. Edit an entry instead of deleting it and adding it again
|
70. No DOI for HAL => thanks all for metadata with SOAP API… don't want to handle it for now :/
|
||||||
80. Automatic download of new arXiv version
|
|
||||||
90. No DOI for HAL => thanks all for metadata with SOAP API… don't want to handle it for now :/
|
|
||||||
|
|
||||||
## Issues ?
|
## Issues ?
|
||||||
|
|
||||||
|
30
backend.py
30
backend.py
@ -159,7 +159,6 @@ def diffFilesIndex():
|
|||||||
* full bibtex entry with file='' if file is not found
|
* full bibtex entry with file='' if file is not found
|
||||||
* only file entry if file with missing bibtex entry
|
* only file entry if file with missing bibtex entry
|
||||||
"""
|
"""
|
||||||
|
|
||||||
files = tools.listDir(params.folder)
|
files = tools.listDir(params.folder)
|
||||||
try:
|
try:
|
||||||
with open(params.folder+'index.bib', 'r') as fh:
|
with open(params.folder+'index.bib', 'r') as fh:
|
||||||
@ -180,3 +179,32 @@ def diffFilesIndex():
|
|||||||
index_diff[filename] = {'file': filename}
|
index_diff[filename] = {'file': filename}
|
||||||
|
|
||||||
return index
|
return index
|
||||||
|
|
||||||
|
|
||||||
|
def getBibtex(entry, file_id = 'both'):
|
||||||
|
"""Returns the bibtex entry corresponding to entry, as a dict
|
||||||
|
|
||||||
|
entry is either a filename or a bibtex ident
|
||||||
|
file_id is file or id or both to search for a file / id / both
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
with open(params.folder+'index.bib', 'r') as fh:
|
||||||
|
bibtex = BibTexParser(fh.read(),
|
||||||
|
customization=homogeneize_latex_encoding)
|
||||||
|
bibtex = bibtex.get_entry_dict()
|
||||||
|
except:
|
||||||
|
tools.warning("Unable to open index file.")
|
||||||
|
return False
|
||||||
|
|
||||||
|
bibtex_entry = False
|
||||||
|
if file_id == 'both' or file_id == 'id':
|
||||||
|
try:
|
||||||
|
bibtex_entry = bibtex[entry]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
elif file_id == 'both' or file_id == 'file':
|
||||||
|
for key in bibtex.keys():
|
||||||
|
if bibtex[key]['file'] == filename:
|
||||||
|
bibtex_entry = bibtex[key]
|
||||||
|
break
|
||||||
|
return bibtex_entry
|
||||||
|
61
main.py
61
main.py
@ -145,6 +145,31 @@ def addFile(src, filetype, manual):
|
|||||||
return new_name
|
return new_name
|
||||||
|
|
||||||
|
|
||||||
|
def editEntry(entry, file_id = 'both'):
|
||||||
|
bibtex = backend.getBibtex(entry, file_id)
|
||||||
|
if bibtex is False:
|
||||||
|
tools.warning("Entry "+entry+" does not exist.")
|
||||||
|
|
||||||
|
if file_id == 'file':
|
||||||
|
filename = entry
|
||||||
|
else:
|
||||||
|
filename = bibtex['file']
|
||||||
|
bibtex = checkBibtex(filename, bibtex)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(params.folder+'index.bib', 'r') as fh:
|
||||||
|
index = BibTexParser(fh.read(),
|
||||||
|
customization=homogeneize_latex_encoding)
|
||||||
|
index = index.get_entry_dict()
|
||||||
|
except:
|
||||||
|
tools.warning("Unable to open index file.")
|
||||||
|
return False
|
||||||
|
|
||||||
|
index[bibtex['id']] = bibtex
|
||||||
|
backend.bibtexRewrite(index)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def downloadFile(url, filetype, manual):
|
def downloadFile(url, filetype, manual):
|
||||||
dl, contenttype = fetcher.download(url)
|
dl, contenttype = fetcher.download(url)
|
||||||
|
|
||||||
@ -280,13 +305,28 @@ if __name__ == '__main__':
|
|||||||
parser_import.set_defaults(func='import')
|
parser_import.set_defaults(func='import')
|
||||||
|
|
||||||
parser_delete = subparsers.add_parser('delete', help="delete help")
|
parser_delete = subparsers.add_parser('delete', help="delete help")
|
||||||
parser_delete.add_argument('files', metavar='entry', nargs='+',
|
parser_delete.add_argument('entries', metavar='entry', nargs='+',
|
||||||
help="a filename or an identifier")
|
help="a filename or an identifier")
|
||||||
|
group = parser_delete.add_mutually_exclusive_group()
|
||||||
|
group.add_argument('--id', action="store_true", default=False,
|
||||||
|
help="id based deletion")
|
||||||
|
group.add_argument('--file', action="store_true", default=False,
|
||||||
|
help="file based deletion")
|
||||||
parser_delete.add_argument('-f', '--force', default=False,
|
parser_delete.add_argument('-f', '--force', default=False,
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help="delete without confirmation")
|
help="delete without confirmation")
|
||||||
parser_delete.set_defaults(func='delete')
|
parser_delete.set_defaults(func='delete')
|
||||||
|
|
||||||
|
parser_edit = subparsers.add_parser('edit', help="edit help")
|
||||||
|
parser_edit.add_argument('entries', metavar='entry', nargs='+',
|
||||||
|
help="a filename or an identifier")
|
||||||
|
group = parser_edit.add_mutually_exclusive_group()
|
||||||
|
group.add_argument('--id', action="store_true", default=False,
|
||||||
|
help="id based deletion")
|
||||||
|
group.add_argument('--file', action="store_true", default=False,
|
||||||
|
help="file based deletion")
|
||||||
|
parser_edit.set_defaults(func='edit')
|
||||||
|
|
||||||
parser_list = subparsers.add_parser('list', help="list help")
|
parser_list = subparsers.add_parser('list', help="list help")
|
||||||
parser_list.set_defaults(func='list')
|
parser_list.set_defaults(func='list')
|
||||||
|
|
||||||
@ -324,7 +364,7 @@ if __name__ == '__main__':
|
|||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
elif args.func == 'delete':
|
elif args.func == 'delete':
|
||||||
for filename in args.file:
|
for filename in args.entries:
|
||||||
if not args.force:
|
if not args.force:
|
||||||
confirm = tools.rawInput("Are you sure you want to " +
|
confirm = tools.rawInput("Are you sure you want to " +
|
||||||
"delete "+filename+" ? [y/N] ")
|
"delete "+filename+" ? [y/N] ")
|
||||||
@ -332,14 +372,25 @@ if __name__ == '__main__':
|
|||||||
confirm = 'y'
|
confirm = 'y'
|
||||||
|
|
||||||
if confirm.lower() == 'y':
|
if confirm.lower() == 'y':
|
||||||
if not backend.deleteId(filename):
|
if args.file or not backend.deleteId(filename):
|
||||||
if not backend.deleteFile(filename):
|
if args.id or not backend.deleteFile(filename):
|
||||||
tools.warning("Unable to delete "+filename)
|
tools.warning("Unable to delete "+filename)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
print(filename+" successfully deleted.")
|
print(filename+" successfully deleted.")
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
elif args.fund == 'edit':
|
||||||
|
for filename in args.entries:
|
||||||
|
if args.file:
|
||||||
|
file_id = 'file'
|
||||||
|
elif args.id:
|
||||||
|
file_id = 'id'
|
||||||
|
else:
|
||||||
|
file_id = 'both'
|
||||||
|
editEntry(filename, file_id)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
elif args.func == 'list':
|
elif args.func == 'list':
|
||||||
raise Exception('TODO')
|
raise Exception('TODO')
|
||||||
|
|
||||||
@ -351,11 +402,13 @@ if __name__ == '__main__':
|
|||||||
if not openFile(filename):
|
if not openFile(filename):
|
||||||
sys.exit("Unable to open file associated " +
|
sys.exit("Unable to open file associated " +
|
||||||
"to ident "+filename)
|
"to ident "+filename)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
elif args.func == 'resync':
|
elif args.func == 'resync':
|
||||||
confirm = tools.rawInput("Resync files and bibtex index? [y/N] ")
|
confirm = tools.rawInput("Resync files and bibtex index? [y/N] ")
|
||||||
if confirm.lower() == 'y':
|
if confirm.lower() == 'y':
|
||||||
resync()
|
resync()
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
Loading…
Reference in New Issue
Block a user