-
Notifications
You must be signed in to change notification settings - Fork 3
/
awesome_bib_builder.py
71 lines (51 loc) · 1.84 KB
/
awesome_bib_builder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Copyright © 2019 Alexander L. Hayes
# MIT License
"""
awesome_bib_builder
===================
Parses contents of ``bib/*.bib`` files, creating citations.
"""
from .reference import Reference
from .bibliography import Bibliography
from liquid import Liquid
import os
def run(
template="static/README.md", bib_directory="bib", output="README.md", quiet=False
):
"""
Parse .bib files (bib_directory), sort them, insert them into the template
(template), then write them to a file (output).
:arg quiet: If true, silence all status messages.
"""
_verbose = not quiet
if _verbose:
print("📖 Reading *.bib files in {0}".format(bib_directory))
_references = []
for dir in os.listdir(bib_directory):
for file in os.listdir(os.path.join(bib_directory, dir)):
_references.append(Reference.load(os.path.join(bib_directory, dir), file))
biblio = Bibliography(_references, verbose=_verbose)
TOC_PAPERS_BY_YEAR = biblio.create_toc_papers_by_year()
TOC_PAPERS_BY_TOPIC = biblio.create_toc_topics()
PAPERS_BY_YEAR = biblio.create_papers_by_year_list()
PAPERS_BY_TOPIC = biblio.create_topics_list()
# TODO: Create a section for `Algorithms`
ALGORITHMS = []
if _verbose:
print("📜 Reading template: {0}".format(template))
with open(template, "r") as fh:
readme = fh.read()
if _verbose:
print("✍️ Rendering new copy of {0}".format(output))
liq = Liquid(readme)
ret = liq.render(
toc_papers_by_year=TOC_PAPERS_BY_YEAR,
toc_papers_by_topic=TOC_PAPERS_BY_TOPIC,
papers_by_year=PAPERS_BY_YEAR,
papers_by_topic=PAPERS_BY_TOPIC,
)
if _verbose:
print("💾 Saving {0}".format(output))
# TODO: Use the built-in file handler for liquid.
with open(output, "w") as fh:
fh.write(ret)