-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathto_contribs_txt.py
More file actions
98 lines (76 loc) · 2.99 KB
/
to_contribs_txt.py
File metadata and controls
98 lines (76 loc) · 2.99 KB
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
"""
Creates the contribs.txt file from the contributions.yaml file.
"""
import json
import pathlib
import shutil
from collections import defaultdict
from typing import List
from utils import get_valid_contributions
type_list = ['library', 'examples', 'tool', 'mode']
contribs_fields_list = [
'name', 'authors', 'url', 'categories', 'sentence', 'paragraph',
'version', 'prettyVersion', 'minRevision', 'maxRevision', 'imports',
'modes', 'compatibleModesList', 'id', 'type', 'download'
]
def read_contribs_text(filepath):
contribs_list = []
this_contrib = {}
contrib_empty = True
contrib_field_counts = defaultdict(int)
with open(filepath, 'r') as f:
for line in f.readlines():
if line.strip() == "":
if not contrib_empty:
for key in list(this_contrib.keys()):
contrib_field_counts[key] += 1
contribs_list.append(this_contrib)
this_contrib = {}
contrib_empty = True
str_index = line.find("=") # capture first equals,
if str_index >= 0:
field, value = line.split("=", 1)
this_contrib[field.strip()] = value.strip()
contrib_empty = False
with open("contribs_txt_field_counts.json", 'w') as f:
json.dump(contrib_field_counts, f)
return contribs_list
def preprocess_contributions() -> List:
all_contributions = get_valid_contributions()
# sort contributions list by type
def sort_key(d):
return type_list.index(d['type'])
all_contributions = sorted(all_contributions, key=sort_key)
return all_contributions
def write_contribs(all_contributions, fh):
for contribution in all_contributions:
fh.write(contribution['type'] + '\n')
for field in contribs_fields_list:
if field in contribution:
if field == 'id':
fh.write(f'{field}={contribution[field]:03}\n')
elif field == 'categories':
if contribution['type'] == 'library':
fh.write(f'{field}={",".join(contribution[field]) if contribution[field] else ""}\n')
else:
# categories are only relevant for libraries, except for examples with "Books" as category
if contribution[field] and 'Books' in contribution[field]:
fh.write(f'{field}={",".join(contribution[field]) if contribution[field] else ""}\n')
else:
fh.write(f'{field}=\n')
elif field == 'compatibleModesList':
fh.write(f'modes={contribution[field]}\n')
else:
fh.write(f'{field}={"" if contribution[field] is None else contribution[field]}\n')
fh.write('\n')
if __name__ == "__main__":
pde_folder = pathlib.Path(__file__).parent.parent / 'pde/'
# remove sources folder if it already exists
if pde_folder.is_dir():
shutil.rmtree(pde_folder)
pde_folder.mkdir(parents=True, exist_ok=True)
contribs_text_file = pde_folder / 'contribs.txt'
contributions_list = preprocess_contributions()
# write contribs.txt file
with open(contribs_text_file, 'w+') as f:
write_contribs(contributions_list, f)