diff --git a/lib/list.py b/lib/list.py new file mode 100644 index 0000000..6c12ce8 --- /dev/null +++ b/lib/list.py @@ -0,0 +1,83 @@ +import json +import urllib.parse +import os +import csv +import re + +current_dir = os.path.dirname(os.path.abspath(__file__)) +project_dir = os.path.dirname(current_dir) +readme_path = os.path.join(project_dir, '.github/README.md') +templates_path = os.path.join(project_dir, 'templates.json') +sources_path = os.path.join(project_dir, 'sources.csv') + +def load_json_file(file_path): + with open(file_path, 'r') as file: + return json.load(file) + +def load_csv_file(file_path): + with open(file_path, 'r') as file: + return list(csv.reader(file)) + +def generate_app_list(): + templates = load_json_file(templates_path)['templates'] + templates.sort(key=lambda template: template['title'].lower()) + markdown_content = '' + for index, template in enumerate(templates): + name = template['title'].title() + description = re.sub('[^0-9a-zA-Z]+', ' ', (template['description'] or '')) + if 'logo' in template and template['logo']: + logo = f" " + else: + logo = ' ' + markdown_content += f"{index+1}. {logo}**[{name}](https://example.com '{description}')**\n" + return markdown_content + +def generate_sources_list(): + sources = load_csv_file(sources_path) + markdown_content = '' + + for index, source in enumerate(sources): + if len(source) > 1 and source[1].strip(): + url = source[1].strip() + parsed_url = urllib.parse.urlparse(url) + username = parsed_url.path.split('/')[1] + avatar = f'' + markdown_content += f"{index + 1}. {avatar} [template]({url}) by [@{username}](https://github.com/{username})\n" + + return markdown_content + +def insert_content_between_markers(file_path, start_marker, end_marker, content_to_insert): + with open(file_path, 'r') as file: + lines = file.readlines() + + start_index = -1 + end_index = -1 + + for i, line in enumerate(lines): + if start_marker in line: + start_index = i + if end_marker in line: + end_index = i + break + + if start_index >= 0 and end_index >= 0: + lines[start_index + 1:end_index] = [content_to_insert + '\n'] + + with open(file_path, 'w') as file: + file.writelines(lines) + +# Insert sources list into readme +insert_content_between_markers( + readme_path, + '', + '', + generate_sources_list(), +) + +# Insert app list into readme +insert_content_between_markers( + readme_path, + '', + '', + generate_app_list(), +)