Skip to content

Commit 990478e

Browse files
authored
Added Completion Rate to the READMEs (#4)
* Added programs list code * Removed requests dependency * Added a TODO * Reworked the list header! * Incremented version
1 parent 0df623f commit 990478e

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ SnakeMD==0.7.0
22
subete==0.6.0
33
pytest==6.2.4
44
pytest-cov==2.12.1
5+
setuptools~=57.0.0

ronbun/readme.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
import argparse
22
import logging
3+
import ssl
4+
from urllib import request
5+
from xml.etree import ElementTree
36

47
from snakemd import Document, InlineText, MDList, Paragraph
58
from subete import LanguageCollection, Repo
69

710

11+
logger = logging.getLogger(__name__)
12+
13+
814
def main():
15+
ssl._create_default_https_context = ssl._create_unverified_context
916
args = _get_args()
1017
numeric_level = getattr(logging, args[1].upper(), None)
1118
if not isinstance(numeric_level, int):
@@ -57,7 +64,7 @@ def _get_sample_programs_text() -> str:
5764
"""
5865

5966

60-
def _generate_program_list(language: LanguageCollection) -> MDList:
67+
def _generate_program_list(language: LanguageCollection) -> list:
6168
"""
6269
A helper function which generates a list of programs for the README.
6370
:param language: a language collection
@@ -73,7 +80,22 @@ def _generate_program_list(language: LanguageCollection) -> MDList:
7380
program_line.replace(":white_check_mark:", ":warning:") \
7481
.replace_link(program.documentation_url(), program.article_issue_query_url())
7582
list_items.append(program_line)
76-
return MDList(list_items)
83+
return list_items
84+
85+
86+
def _get_complete_program_list() -> list:
87+
"""
88+
A helper function which retrieves the entire list of eligible programs from the
89+
documentation website.
90+
"""
91+
programs = list()
92+
logger.info(f"Attempting to open https://sample-programs.therenegadecoder.com/sitemap.xml")
93+
xml_data = request.urlopen("https://sample-programs.therenegadecoder.com/sitemap.xml")
94+
for child in ElementTree.parse(xml_data).getroot():
95+
url = child[0].text
96+
if "projects" in url and len(url.split("/")) == 6:
97+
programs.append(url.split("/")[4])
98+
return sorted(programs)
7799

78100

79101
def _generate_credit() -> Paragraph:
@@ -87,6 +109,12 @@ def _generate_credit() -> Paragraph:
87109
return p
88110

89111

112+
def _generate_program_list_header(program_list, total_programs):
113+
i = int(((len(program_list) / len(total_programs)) * 4))
114+
emojis = [":disappointed:", ":thinking:", ":relaxed:", ":smile:", ":partying_face:"]
115+
return f"Sample Programs List — {len(program_list)}/{len(total_programs)} {emojis[i]}"
116+
117+
90118
class ReadMeCatalog:
91119
"""
92120
An representation of the collection of READMEs in the Sample Programs repo.
@@ -99,6 +127,7 @@ def __init__(self, repo: Repo):
99127
"""
100128
self.repo: Repo = repo
101129
self.pages: dict[str, Document] = dict()
130+
self._programs = _get_complete_program_list()
102131
self._build_readmes()
103132

104133
def _build_readme(self, language: LanguageCollection) -> None:
@@ -114,9 +143,10 @@ def _build_readme(self, language: LanguageCollection) -> None:
114143
page.add_element(_get_intro_text(language))
115144

116145
# Sample Programs List
117-
page.add_header("Sample Programs List", level=2)
146+
program_list = _generate_program_list(language)
147+
page.add_header(_generate_program_list_header(program_list, self._programs), level=2)
118148
page.add_paragraph(_get_sample_programs_text())
119-
page.add_element(_generate_program_list(language))
149+
page.add_element(MDList(program_list))
120150

121151
# Testing
122152
page.add_header("Testing", level=2)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="ronbun",
8-
version="0.1.0",
8+
version="0.2.0",
99
author="The Renegade Coder",
1010
author_email="jeremy.grifski@therenegadecoder.com",
1111
description="The Sample Programs README Automation Tool",

0 commit comments

Comments
 (0)