diff --git a/rank_hugo_themes.py b/rank_hugo_themes.py index 3888ad1..7d342c9 100755 --- a/rank_hugo_themes.py +++ b/rank_hugo_themes.py @@ -1,29 +1,29 @@ #!/usr/bin/env python3 # rank_hugo_themes.py -from jinja2 import Environment, FileSystemLoader import re -import toml -from calendar import timegm -from time import strptime -from requests import get -from sys import argv as sys_argv -from base64 import b64decode from ast import literal_eval +from base64 import b64decode +from calendar import timegm +from sys import argv as sys_argv +from time import strptime -from sqlalchemy import create_engine, Column, Integer, VARCHAR, TEXT +import toml +from jinja2 import Environment, FileSystemLoader +from requests import get +from sqlalchemy import TEXT, VARCHAR, Column, Integer, create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import deferred, sessionmaker -engine = create_engine('sqlite:///hugothemes.db', echo=False) +engine = create_engine("sqlite:///hugothemes.db", echo=False) Base = declarative_base() -file_loader = FileSystemLoader('templates') +file_loader = FileSystemLoader("templates") env = Environment(loader=file_loader) -template = env.get_template('base.html') +template = env.get_template("base.html") class Hugothemes_from_gitlab(Base): - __tablename__ = 'hugothemes_from_gitlab' + __tablename__ = "hugothemes_from_gitlab" name = Column(VARCHAR, primary_key=True) url = Column(TEXT) @@ -40,7 +40,7 @@ class Hugothemes_from_gitlab(Base): class Hugothemes(Base): - __tablename__ = 'hugothemes' + __tablename__ = "hugothemes" name = Column(VARCHAR, primary_key=True) ETag = Column(TEXT) @@ -66,8 +66,8 @@ class Hugothemes(Base): return f"" -OLDTHEMESLISTREPO = 'gohugoio/hugoThemes' -THEMESLISTREPO = 'gohugoio/hugoThemesSiteBuilder' +OLDTHEMESLISTREPO = "gohugoio/hugoThemes" +THEMESLISTREPO = "gohugoio/hugoThemesSiteBuilder" THEMESLIST = [] @@ -76,19 +76,19 @@ def get_themes_name_list(): def get_gitlab_themes_list(): - return [x for x in THEMESLIST if x[0:10] == 'gitlab.com'] + return [x for x in THEMESLIST if x[0:10] == "gitlab.com"] def get_gitlab_themes_name_list(): - return [x[11:] for x in THEMESLIST if x[0:10] == 'gitlab.com'] + return [x[11:] for x in THEMESLIST if x[0:10] == "gitlab.com"] def get_github_themes_name_list(): - return [x[11:] for x in THEMESLIST if x[0:10] == 'github.com'] + return [x[11:] for x in THEMESLIST if x[0:10] == "github.com"] if len(sys_argv) == 2: - headers = {'Authorization': 'token ' + sys_argv[1]} + headers = {"Authorization": "token " + sys_argv[1]} else: headers = {} @@ -101,7 +101,7 @@ def get_hugo_themes_list(): if response.status_code == 200: lower_case_themes_list = [] for x in response.text.splitlines(): - if (x[0:10] == 'gitlab.com' or x[0:10] == 'github.com'): + if x[0:10] == "gitlab.com" or x[0:10] == "github.com": if x.lower() not in lower_case_themes_list: THEMESLIST.append(x) lower_case_themes_list.append(x.lower()) @@ -112,22 +112,22 @@ def get_hugo_themes_list(): def clean_up(): themes_name_list = get_themes_name_list() session = sessionmaker(bind=engine)() - hugo_themes_name_list = [ - theme[0] for theme in session.query(Hugothemes.name).all()] + hugo_themes_name_list = [theme[0] for theme in session.query(Hugothemes.name).all()] for theme_name in hugo_themes_name_list: if theme_name not in themes_name_list: - removed_theme = session.query( - Hugothemes).filter_by(name=theme_name).first() + removed_theme = session.query(Hugothemes).filter_by(name=theme_name).first() session.delete(removed_theme) session.commit() gitlab_themes_name_list = get_gitlab_themes_name_list() hugo_themes_from_gitlab_name_list = [ - theme[0] for theme in session.query(Hugothemes_from_gitlab.name).all()] + theme[0] for theme in session.query(Hugothemes_from_gitlab.name).all() + ] for theme in hugo_themes_from_gitlab_name_list: if theme not in gitlab_themes_name_list: - removed_theme = session.query( - Hugothemes_from_gitlab).filter_by(name=theme).first() + removed_theme = ( + session.query(Hugothemes_from_gitlab).filter_by(name=theme).first() + ) session.delete(removed_theme) session.commit() @@ -135,29 +135,28 @@ def clean_up(): def dedup_database(): session = sessionmaker(bind=engine)() hugo_themes_sha_list = [ - theme[0] for theme in session.query(Hugothemes.commit_sha).all()] + theme[0] for theme in session.query(Hugothemes.commit_sha).all() + ] sha_list = [ - sha for sha in hugo_themes_sha_list if hugo_themes_sha_list.count( - sha - ) > 1 + sha for sha in hugo_themes_sha_list if hugo_themes_sha_list.count(sha) > 1 ] for sha in sha_list: - removed_theme = session.query( - Hugothemes).filter_by(commit_sha=sha).first() + removed_theme = session.query(Hugothemes).filter_by(commit_sha=sha).first() session.delete(removed_theme) session.commit() - hugo_themes_sha_list_from_gitlab = [theme[0] for theme in session.query( - Hugothemes_from_gitlab.commit_sha).all()] + hugo_themes_sha_list_from_gitlab = [ + theme[0] for theme in session.query(Hugothemes_from_gitlab.commit_sha).all() + ] sha_list_from_gitlab = [ - sha for sha in hugo_themes_sha_list_from_gitlab - if hugo_themes_sha_list_from_gitlab.count( - sha - ) > 1 + sha + for sha in hugo_themes_sha_list_from_gitlab + if hugo_themes_sha_list_from_gitlab.count(sha) > 1 ] for sha in sha_list_from_gitlab: - removed_theme = session.query( - Hugothemes_from_gitlab).filter_by(commit_sha=sha).first() + removed_theme = ( + session.query(Hugothemes_from_gitlab).filter_by(commit_sha=sha).first() + ) session.delete(removed_theme) session.commit() @@ -167,8 +166,9 @@ def parse_gitlab_hugo_themes_list(): gitlab_themes_list = get_gitlab_themes_list() for theme in gitlab_themes_list: theme_name = theme[11:] - existing_theme = session.query( - Hugothemes_from_gitlab).filter_by(name=theme_name).first() + existing_theme = ( + session.query(Hugothemes_from_gitlab).filter_by(name=theme_name).first() + ) if existing_theme is None: session.add(Hugothemes_from_gitlab(name=theme_name, url=theme)) session.commit() @@ -179,10 +179,10 @@ def parse_gitlab_hugo_themes_list(): def get_corrected_url(x): - if 'neofeed-theme' in x: - return x.rstrip('/v2') - elif 'docuapi' in x: - return x.rstrip('/v2') + if "neofeed-theme" in x: + return x.rstrip("/v2") + elif "docuapi" in x: + return x.rstrip("/v2") else: return x @@ -192,8 +192,7 @@ def parse_hugo_themes_list(): for theme in THEMESLIST: theme_name = theme[11:] theme_url = get_corrected_url(theme) - existing_theme = session.query( - Hugothemes).filter_by(name=theme_name).first() + existing_theme = session.query(Hugothemes).filter_by(name=theme_name).first() if existing_theme is None: session.add(Hugothemes(name=theme_name, url=theme_url)) session.commit() @@ -205,29 +204,27 @@ def parse_hugo_themes_list(): def get_gitlab_project_ids(): session = sessionmaker(bind=engine)() - themes = (theme[0] for theme in session.query( - Hugothemes_from_gitlab.name).all()) - match = re.compile(r'(Project ID: )(\d{5,})') + themes = (theme[0] for theme in session.query(Hugothemes_from_gitlab.name).all()) + match = re.compile(r"(Project ID: )(\d{5,})") for theme in themes: - gitlab_theme = session.query( - Hugothemes_from_gitlab).filter_by(name=theme).one() + gitlab_theme = session.query(Hugothemes_from_gitlab).filter_by(name=theme).one() if gitlab_theme.gitlab_id is None: response = get(f"https://{gitlab_theme.url}") if response.status_code == 200: gitlab_theme.gitlab_id = match.search(response.text).group(2) session.commit() if response.status_code == 404: - print( - response.status_code, - get_gitlab_project_ids.__name__, theme) + print(response.status_code, get_gitlab_project_ids.__name__, theme) print(response.status_code, get_gitlab_project_ids.__name__) def get_corrected_theme_name(x): - if 'neofeed-theme' in x: - return x.rstrip('/v2') - elif 'docuapi' in x: - return x.rstrip('/v2') + if "neofeed-theme" in x: + return x.rstrip("/v2") + elif "docuapi" in x: + return x.rstrip("/v2") + elif "osprey-delight" in x: + return x.rstrip("/v5") else: return x @@ -238,14 +235,14 @@ def get_commit_info_for_hugo_themes(): for hugo_theme in theme_names_from_github: theme = session.query(Hugothemes).filter_by(name=hugo_theme).one() theme_name = get_corrected_theme_name(theme.name) - api_call_url = 'https://api.github.com/repos/' - api_call_url += f'{theme_name}/commits/{theme.default_branch}' + api_call_url = "https://api.github.com/repos/" + api_call_url += f"{theme_name}/commits/{theme.default_branch}" if theme.ETag is not None: - headers['If-None-Match'] = theme.ETag + headers["If-None-Match"] = theme.ETag else: - if 'If-None-Match' in headers: - del headers['If-None-Match'] + if "If-None-Match" in headers: + del headers["If-None-Match"] if len(headers) == 0: response = get(api_call_url) @@ -255,21 +252,23 @@ def get_commit_info_for_hugo_themes(): print(hugo_theme) quit() if response.status_code == 200: - theme.ETag = response.headers['ETag'].lstrip('W/') + theme.ETag = response.headers["ETag"].lstrip("W/") result = response.json() - theme.commit_date = result['commit']['author']['date'] + theme.commit_date = result["commit"]["author"]["date"] theme.commit_date_in_seconds = timegm( - strptime(theme.commit_date, '%Y-%m-%dT%H:%M:%SZ')) - theme.commit_sha = result['commit']['tree']['sha'] + strptime(theme.commit_date, "%Y-%m-%dT%H:%M:%SZ") + ) + theme.commit_sha = result["commit"]["tree"]["sha"] session.commit() elif response.status_code == 403: - print( - response.status_code, get_commit_info_for_hugo_themes.__name__) + print(response.status_code, get_commit_info_for_hugo_themes.__name__) quit() elif response.status_code == 404: print( response.status_code, - get_commit_info_for_hugo_themes.__name__, hugo_theme) + get_commit_info_for_hugo_themes.__name__, + hugo_theme, + ) print(response.status_code, get_commit_info_for_hugo_themes.__name__) @@ -278,36 +277,37 @@ def get_commit_info_for_hugo_themes_from_gitlab(): theme_names_from_gitlab = get_gitlab_themes_name_list() # match = re.compile(r'(\.\d{3})(Z$)') for hugo_theme in theme_names_from_gitlab: - theme = session.query( - Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() - api_call_url = 'https://gitlab.com/api/v4/projects/' - api_call_url += f'{theme.gitlab_id}/repository/' - api_call_url += f'commits/{theme.default_branch}' + theme = session.query(Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() + api_call_url = "https://gitlab.com/api/v4/projects/" + api_call_url += f"{theme.gitlab_id}/repository/" + api_call_url += f"commits/{theme.default_branch}" response = get(api_call_url) if response.status_code == 200: result = response.json() # theme.commit_date = (match.sub(r'\2', result[ # 'created_at']))[0:19] + 'Z' - theme.commit_date = result['created_at'][0:19] + 'Z' + theme.commit_date = result["created_at"][0:19] + "Z" theme.commit_date_in_seconds = timegm( - strptime(theme.commit_date, '%Y-%m-%dT%H:%M:%SZ')) - theme.commit_sha = result['id'] + strptime(theme.commit_date, "%Y-%m-%dT%H:%M:%SZ") + ) + theme.commit_sha = result["id"] session.commit() elif response.status_code == 403: print( response.status_code, - get_commit_info_for_hugo_themes_from_gitlab.__name__) + get_commit_info_for_hugo_themes_from_gitlab.__name__, + ) quit() elif response.status_code == 404: print( response.status_code, get_commit_info_for_hugo_themes_from_gitlab.__name__, - hugo_theme + hugo_theme, ) print( - response.status_code, - get_commit_info_for_hugo_themes_from_gitlab.__name__) + response.status_code, get_commit_info_for_hugo_themes_from_gitlab.__name__ + ) def get_repo_info_for_hugo_themes(): @@ -316,31 +316,31 @@ def get_repo_info_for_hugo_themes(): for hugo_theme in theme_names_from_github: theme = session.query(Hugothemes).filter_by(name=hugo_theme).one() theme_name = get_corrected_theme_name(theme.name) - api_call_url = 'https://api.github.com/repos/' + theme_name + api_call_url = "https://api.github.com/repos/" + theme_name if theme.repo_ETag is not None: - headers['If-None-Match'] = theme.repo_ETag + headers["If-None-Match"] = theme.repo_ETag else: - if 'If-None-Match' in headers: - del headers['If-None-Match'] + if "If-None-Match" in headers: + del headers["If-None-Match"] if len(headers) == 0: response = get(api_call_url) else: response = get(api_call_url, headers=headers) if response.status_code == 200: - theme.repo_ETag = response.headers['ETag'].lstrip('W/') + theme.repo_ETag = response.headers["ETag"].lstrip("W/") result = response.json() - theme.stargazers_count = result['stargazers_count'] - theme.default_branch = result['default_branch'] + theme.stargazers_count = result["stargazers_count"] + theme.default_branch = result["default_branch"] session.commit() elif response.status_code == 403: print(response.status_code, get_repo_info_for_hugo_themes.__name__) quit() elif response.status_code == 404: print( - response.status_code, - get_repo_info_for_hugo_themes.__name__, hugo_theme) + response.status_code, get_repo_info_for_hugo_themes.__name__, hugo_theme + ) print(response.status_code, get_repo_info_for_hugo_themes.__name__) @@ -348,29 +348,28 @@ def get_repo_info_for_hugo_themes_from_gitlab(): session = sessionmaker(bind=engine)() theme_names_from_gitlab = get_gitlab_themes_name_list() for hugo_theme in theme_names_from_gitlab: - theme = session.query(Hugothemes_from_gitlab).filter_by( - name=hugo_theme).one() - api_call_url = f'https://gitlab.com/api/v4/projects/{theme.gitlab_id}' + theme = session.query(Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() + api_call_url = f"https://gitlab.com/api/v4/projects/{theme.gitlab_id}" response = get(api_call_url) if response.status_code == 200: result = response.json() - if theme.star_count != result['star_count']: - theme.star_count = result['star_count'] - if theme.default_branch != result['default_branch']: - theme.default_branch = result['default_branch'] + if theme.star_count != result["star_count"]: + theme.star_count = result["star_count"] + if theme.default_branch != result["default_branch"]: + theme.default_branch = result["default_branch"] session.commit() elif response.status_code == 403: print( - response.status_code, - get_repo_info_for_hugo_themes_from_gitlab.__name__) + response.status_code, get_repo_info_for_hugo_themes_from_gitlab.__name__ + ) quit() elif response.status_code == 404: print( response.status_code, - get_repo_info_for_hugo_themes_from_gitlab.__name__, hugo_theme) - print( - response.status_code, - get_repo_info_for_hugo_themes_from_gitlab.__name__) + get_repo_info_for_hugo_themes_from_gitlab.__name__, + hugo_theme, + ) + print(response.status_code, get_repo_info_for_hugo_themes_from_gitlab.__name__) def get_theme_dot_toml_for_each_hugo_themes(): @@ -378,88 +377,94 @@ def get_theme_dot_toml_for_each_hugo_themes(): theme_names_from_github = get_github_themes_name_list() for hugo_theme in theme_names_from_github: theme = session.query(Hugothemes).filter_by(name=hugo_theme).one() - if theme.name == 'gcushen/hugo-academic': - theme_toml = 'wowchemy/theme.toml' + if theme.name == "gcushen/hugo-academic": + theme_toml = "wowchemy/theme.toml" else: - theme_toml = 'theme.toml' + theme_toml = "theme.toml" theme_name = get_corrected_theme_name(theme.name) api_call_url = "https://api.github.com/repos/" api_call_url += f"{theme_name}/contents/{theme_toml}" if theme.themes_toml_ETag is not None: - headers['If-None-Match'] = theme.themes_toml_ETag + headers["If-None-Match"] = theme.themes_toml_ETag else: - if 'If-None-Match' in headers: - del headers['If-None-Match'] + if "If-None-Match" in headers: + del headers["If-None-Match"] if len(headers) == 0: response = get(api_call_url) else: response = get(api_call_url, headers=headers) if response.status_code == 200: - theme.themes_toml_ETag = response.headers['ETag'].lstrip('W/') + theme.themes_toml_ETag = response.headers["ETag"].lstrip("W/") result = response.json() - theme.themes_toml_content = result['content'] + theme.themes_toml_content = result["content"] session.commit() elif response.status_code == 403: print( - response.status_code, - get_theme_dot_toml_for_each_hugo_themes.__name__) + response.status_code, get_theme_dot_toml_for_each_hugo_themes.__name__ + ) quit() elif response.status_code == 404: print( response.status_code, - get_theme_dot_toml_for_each_hugo_themes.__name__, hugo_theme) - print( - response.status_code, - get_theme_dot_toml_for_each_hugo_themes.__name__) + get_theme_dot_toml_for_each_hugo_themes.__name__, + hugo_theme, + ) + print(response.status_code, get_theme_dot_toml_for_each_hugo_themes.__name__) def get_theme_dot_toml_for_each_hugo_themes_from_gitlab(): session = sessionmaker(bind=engine)() theme_names_from_gitlab = get_gitlab_themes_name_list() for hugo_theme in theme_names_from_gitlab: - theme = session.query( - Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() - api_call_url = 'https://gitlab.com/api/v4/projects/' - api_call_url += f'{theme.gitlab_id}/repository/files/' - api_call_url += f'theme.toml?ref={theme.default_branch}' + theme = session.query(Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() + api_call_url = "https://gitlab.com/api/v4/projects/" + api_call_url += f"{theme.gitlab_id}/repository/files/" + api_call_url += f"theme.toml?ref={theme.default_branch}" response = get(api_call_url) if response.status_code == 200: result = response.json() - theme.themes_toml_content = result['content'] + theme.themes_toml_content = result["content"] session.commit() elif response.status_code == 403: print( response.status_code, - get_theme_dot_toml_for_each_hugo_themes_from_gitlab.__name__) + get_theme_dot_toml_for_each_hugo_themes_from_gitlab.__name__, + ) quit() elif response.status_code == 404: print( response.status_code, get_theme_dot_toml_for_each_hugo_themes_from_gitlab.__name__, - hugo_theme) + hugo_theme, + ) print( response.status_code, - get_theme_dot_toml_for_each_hugo_themes_from_gitlab.__name__) + get_theme_dot_toml_for_each_hugo_themes_from_gitlab.__name__, + ) def coalesce_themes(): session = sessionmaker(bind=engine)() theme_names_from_gitlab = get_gitlab_themes_name_list() for hugo_theme in theme_names_from_gitlab: - htfgitlab = session.query( - Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() + htfgitlab = ( + session.query(Hugothemes_from_gitlab).filter_by(name=hugo_theme).one() + ) theme = session.query(Hugothemes).filter_by(name=hugo_theme).first() if theme is None: - session.add(Hugothemes( - name=hugo_theme, url=htfgitlab.url, - commit_sha=htfgitlab.commit_sha, - commit_date=htfgitlab.commit_date, - commit_date_in_seconds=htfgitlab.commit_date_in_seconds, - stargazers_count=htfgitlab.star_count, - themes_toml_content=htfgitlab.themes_toml_content, - )) + session.add( + Hugothemes( + name=hugo_theme, + url=htfgitlab.url, + commit_sha=htfgitlab.commit_sha, + commit_date=htfgitlab.commit_date, + commit_date_in_seconds=htfgitlab.commit_date_in_seconds, + stargazers_count=htfgitlab.star_count, + themes_toml_content=htfgitlab.themes_toml_content, + ) + ) else: if theme.url != htfgitlab.url: theme.url = htfgitlab.url @@ -480,11 +485,11 @@ def get_corrected_tags(tags): result = [] correct = True for tag in tags: - if (len(tag) > 50): + if len(tag) > 50: correct = False if not correct: for tag in tags: - result += [x.lstrip() for x in tag.split(',')] + result += [x.lstrip() for x in tag.split(",")] return result else: return tags @@ -493,21 +498,19 @@ def get_corrected_tags(tags): def parse_themes_toml_for_each_hugo_themes(): session = sessionmaker(bind=engine)() themes = [theme[0] for theme in session.query(Hugothemes.name).all()] - match = re.compile(r'\s(\d+\.\d+\.\d+)\s') + match = re.compile(r"\s(\d+\.\d+\.\d+)\s") for hugo_theme in themes: theme = session.query(Hugothemes).filter_by(name=hugo_theme).one() if theme.themes_toml_content is not None: - content = b64decode(theme.themes_toml_content).decode('utf-8') + content = b64decode(theme.themes_toml_content).decode("utf-8") # put quotes around any unquoted double-dotted version numbers # (and add a newline afterwards) # because python toml libraries will error out on those theme_toml = toml.loads(match.sub(r'"\1"\n', content)) - if 'tags' in theme_toml: - if len(theme_toml['tags']) > 0: - corrected_tags = get_corrected_tags(theme_toml['tags']) - tt = [ - tag.lower() for tag in corrected_tags if len(tag) > 1 - ] + if "tags" in theme_toml: + if len(theme_toml["tags"]) > 0: + corrected_tags = get_corrected_tags(theme_toml["tags"]) + tt = [tag.lower() for tag in corrected_tags if len(tag) > 1] theme_tags = list(set(tt)) if theme.num_tags != len(theme_tags): theme.num_tags = len(theme_tags) @@ -527,11 +530,12 @@ def parse_themes_toml_for_each_hugo_themes(): theme.tags_list = None if theme.num_tags != 0: theme.num_tags = 0 - if 'features' in theme_toml: - if len(theme_toml['features']) > 0: + if "features" in theme_toml: + if len(theme_toml["features"]) > 0: tf = [ - feature.lower() for feature in - theme_toml['features'] if len(feature) > 1 + feature.lower() + for feature in theme_toml["features"] + if len(feature) > 1 ] theme_features = list(set(tf)) if theme.num_features != len(theme_features): @@ -552,28 +556,28 @@ def parse_themes_toml_for_each_hugo_themes(): theme.features_list = None if theme.num_features != 0: theme.num_features = 0 - if 'license' in theme_toml: - if theme.theme_license != theme_toml['license']: - theme.theme_license = theme_toml['license'] + if "license" in theme_toml: + if theme.theme_license != theme_toml["license"]: + theme.theme_license = theme_toml["license"] else: if theme.theme_license is not None: theme.theme_license = None - if 'min_version' in theme_toml: - corrected_mv = get_corrected_min_ver(theme_toml['min_version']) + if "min_version" in theme_toml: + corrected_mv = get_corrected_min_ver(theme_toml["min_version"]) if theme.min_ver != corrected_mv: theme.min_ver = corrected_mv else: if theme.min_ver is not None: theme.min_ver = None - if 'description' in theme_toml: - if theme.desc != theme_toml['description']: - theme.desc = theme_toml['description'] + if "description" in theme_toml: + if theme.desc != theme_toml["description"]: + theme.desc = theme_toml["description"] else: if theme.desc is not None: theme.desc = None - if 'name' in theme_toml: - if theme.cname != theme_toml['name']: - theme.cname = theme_toml['name'] + if "name" in theme_toml: + if theme.cname != theme_toml["name"]: + theme.cname = theme_toml["name"] else: if theme.cname is not None: theme.cname = None @@ -598,8 +602,8 @@ def parse_themes_toml_for_each_hugo_themes(): def get_corrected_min_ver(x): - if 'o' in str(x): - return x.replace('o', '0') + if "o" in str(x): + return x.replace("o", "0") else: return x @@ -608,41 +612,43 @@ def generate_report(): session = sessionmaker(bind=engine)() hugo_themes = [ { - 'name': theme.name, - 'commit': theme.commit_sha[0:6], - 'date': theme.commit_date[0:10], - 'date_in_seconds': theme.commit_date_in_seconds, - 'url': f'https://{theme.url}', - 'short_name': theme.name.split('/')[1], - 'num_stars': theme.stargazers_count, - 'tags': literal_eval( - theme.tags_list) if theme.tags_list is not None else [], - 'features': literal_eval( - theme.features_list - ) if theme.features_list is not None else [], - 'license': theme.theme_license if - theme.theme_license is not None else '', - 'min_ver': theme.min_ver if theme.min_ver is not None else '', - 'desc': theme.desc if theme.desc is not None else '', - 'cname': theme.cname if - theme.cname is not None else theme.name.split('/')[1], - } for theme in session.query(Hugothemes).all() + "name": theme.name, + "commit": theme.commit_sha[0:6], + "date": theme.commit_date[0:10], + "date_in_seconds": theme.commit_date_in_seconds, + "url": f"https://{theme.url}", + "short_name": theme.name.split("/")[1], + "num_stars": theme.stargazers_count, + "tags": literal_eval(theme.tags_list) + if theme.tags_list is not None + else [], + "features": literal_eval(theme.features_list) + if theme.features_list is not None + else [], + "license": theme.theme_license if theme.theme_license is not None else "", + "min_ver": theme.min_ver if theme.min_ver is not None else "", + "desc": theme.desc if theme.desc is not None else "", + "cname": theme.cname + if theme.cname is not None + else theme.name.split("/")[1], + } + for theme in session.query(Hugothemes).all() ] output = template.render(themes=hugo_themes) - index_page = open('hugo-themes-report/hugo-themes-report.html', 'w') + index_page = open("hugo-themes-report/hugo-themes-report.html", "w") index_page.write(output) index_page.close() if __name__ == "__main__": - ''' + """ or test with ` python3 -c'import rank_hugo_themes; rank_hugo_themes .parse_themes_toml_for_each_hugo_themes() ; rank_hugo_themes.generate_report()' ` - ''' + """ dedup_database() get_hugo_themes_list() if len(THEMESLIST) > 300: