Added scripts to generate projects table

The projects tables tries to organize information about projects including the last commit date that helps evaluating how one project is being mantained.
This commit is contained in:
wilsonfreitas
2022-03-27 21:11:25 -03:00
parent ba3c61ec09
commit 9c8fafcc6e
3 changed files with 689 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
import os
import re
import pandas as pd
from threading import Thread
from github import Github
# using an access token
g = Github(os.environ['GITHUB_ACCESS_TOKEN'])
def extract_repo(url):
reu = re.compile('^https://github.com/([\w-]+/[\w-]+)$')
m = reu.match(url)
if m:
return m.group(1)
else:
return ''
def get_last_commit(repo):
try:
if repo:
r = g.get_repo(repo)
cs = r.get_commits()
return cs[0].commit.author.date.strftime('%Y-%m-%d')
else:
return ''
except:
print('ERROR' + repo)
return 'error'
class Project(Thread):
def __init__(self, match, section):
super().__init__()
self._match = match
self.regs = None
self._section = section
def run(self):
m = self._match
is_github = 'github.com' in m.group(2)
is_cran = 'cran.r-project.org' in m.group(2)
repo = extract_repo(m.group(2))
last_commit = get_last_commit(repo)
self.regs = dict(
project=m.group(1),
section=self._section,
last_commit=last_commit,
url=m.group(2),
description=m.group(3),
github=is_github,
cran=is_cran,
repo=repo
)
projects = []
with open('README.md', 'r', encoding='utf8') as f:
ret = re.compile('^(#+) (.*)$')
rex = re.compile('^\s*- \[(.*)\]\((.*)\) - (.*)$')
m_titles = []
last_head_level = 0
for line in f:
m = rex.match(line)
if m:
p = Project(m, ' > '.join(m_titles[1:]))
p.start()
projects.append(p)
else:
m = ret.match(line)
if m:
hrs = m.group(1)
if len(hrs) > last_head_level:
m_titles.append(m.group(2))
else:
for n in range(last_head_level - len(hrs) + 1):
m_titles.pop()
m_titles.append(m.group(2))
last_head_level = len(hrs)
while True:
checks = [not p.is_alive() for p in projects]
if all(checks):
break
projects = [p.regs for p in projects]
df = pd.DataFrame(projects)
df.to_csv('projects.csv', index=False)
df.to_markdown('projects.md', index=False)