from shutil import copyfile import os def render_book_line(book_object): book = book_object book['rating'] = '?' if not 'rating' in book else book['rating'] book['url'] = '' if not 'url' in book else book['url'] book['year'] = '' if not 'year' in book else book['year'] return '| {} | {} | [{}]({}) | {} | \n'.format(book['title'], book['author'], book['rating'], book['url'], book['year']) # TODO: refine this logic def render(in_file, out_file, library): """ This renders the file to the out_file location savig the new file to tmp_file location, the copying it to out-file and deleting tmp_file this is done to prevent issues if the in and the out file are the same """ tmp_file = './.tmp-file.md' open(tmp_file, 'a').close() books_not_reached = True with open(tmp_file, 'w') as out_file_tmp: with open(in_file) as original_file: for line in original_file: if line.strip() in library: if not books_not_reached: out_file_tmp.write('\n') books_not_reached = False # render chapter and start of the table out_file_tmp.write(line) if len(library[line.strip()]) > 0: out_file_tmp.write('| Name | Author | Goodreads Rating | Year Published | \n') out_file_tmp.write('|------|--------|------------------|----------------| \n') # render books for book in library[line.strip()]: out_file_tmp.write(render_book_line(book)) elif books_not_reached: out_file_tmp.write(line) elif line.startswith('## License'): out_file_tmp.write('\n') out_file_tmp.write('\n') out_file_tmp.write(line) books_not_reached = True copyfile(tmp_file, out_file) os.remove(tmp_file)