-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcreateReadme.py
executable file
·138 lines (105 loc) · 4.3 KB
/
createReadme.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env python
''' Simple script to auto-generate the README.md file for a til project.
NOTE: Someone who wanted to be fancy would actually use a template engine
for this, but this seemed like a task for which it is best to only require
python. This is not a general purpose script, but tailored for the format
being used for "Today I Learned" repos.
Apply as a git hook by running the following command in linux:
cd .git/hooks/ && ln -s ../../createReadme.py pre-commit && cd -
'''
from __future__ import print_function
import os
HEADER = '''# TIL
> Today I Learned
A collection of concise write-ups on small things I learn day to day across a
variety of languages and technologies. These are things that don't really
warrant a full blog post.
'''
FOOTER = '''## Usage
After creating a new entry, run `./createReadme.py > README.md` to regenerate
the readme with the new data.
If you are using git, you can install this script as a pre-commit git hook so
that it is autogenerated on each commit. Use the following command:
cd .git/hooks/ && ln -s ../../createReadme.py pre-commit && cd -
## About
I shamelessly stole this idea from
[jbranchaud/til](https://github.com/jbranchaud/til) who claims to have stolen
it from others.
## Other TIL Collections
* [jbranchaud/til](https://github.com/jbranchaud/til) who claims to have stolen
* [Today I Learned by Hashrocket](https://til.hashrocket.com)
* [jwworth/til](https://github.com/jwworth/til)
* [thoughtbot/til](https://github.com/thoughtbot/til)
## License
© 2017-2018 Jim Anderson
This repository is licensed under the MIT license. See `LICENSE` for
details.'''
def get_list_of_categories():
''' Walk the current directory and get a list of all subdirectories at that
level. These are the "categories" in which there are TILs.'''
dirs = [x for x in os.listdir('.') if os.path.isdir(x) and
'.git' not in x]
return dirs
def get_title(til_file):
''' Read the file until we hit the first line that starts with a #
indicating a title in markdown. We'll use that as the title for this
entry. '''
with open(til_file) as _file:
for line in _file:
line = line.strip()
if line.startswith('#'):
return line[1:].lstrip() # text after # and whitespace
def get_tils(category):
''' For a given category, get the list of TIL titles. '''
til_files = [x for x in os.listdir(category)]
titles = []
for filename in til_files:
fullname = os.path.join(category, filename)
if (os.path.isfile(fullname)) and fullname.endswith('.md'):
title = get_title(fullname)
titles.append((title, fullname))
return titles
def get_category_dict(category_names):
categories = {}
count = 0
for category in category_names:
titles = get_tils(category)
categories[category] = titles
count += len(titles)
return count, categories
def print_file(category_names, count, categories):
''' Now we have all the information, print it out in markdown format. '''
with open('README.md', 'w') as file_:
file_.write(HEADER)
file_.write('\n')
file_.write('_{0} TILs and counting..._'.format(count))
file_.write('\n')
file_.write('''
---
### Categories
''')
# print the list of categories with links
for category in sorted(category_names):
file_.write('* [{0}](#{1})\n'.format(category.capitalize(),
category))
# print the section for each category
file_.write('''
---
''')
for category in sorted(category_names):
file_.write('### {0}\n'.format(category.capitalize()))
file_.write('\n')
tils = categories[category]
for (title, filename) in sorted(tils):
file_.write('- [{0}]({1})\n'.format(title, filename))
file_.write('\n')
file_.write(FOOTER)
def create_readme():
''' Create a TIL README.md file with a nice index for using it directly
from github. '''
category_names = get_list_of_categories()
count, categories = get_category_dict(category_names)
print_file(category_names, count, categories)
if __name__ == '__main__':
create_readme()
os.system('git add README.md')