22from datetime import datetime
33import os
44import pandas as pd
5+ import argparse
56from common import get_graphql_data , write_text , write_ranking_repo
67import inspect
78
@@ -148,7 +149,7 @@ def get_all_repos(self):
148149
149150
150151class WriteFile (object ):
151- def __init__ (self , repos_stars , repos_forks , repos_languages ):
152+ def __init__ (self , repos_stars , repos_forks , repos_languages , min_stars = None ):
152153 self .repos_stars = repos_stars
153154 self .repos_forks = repos_forks
154155 self .repos_languages = repos_languages
@@ -175,13 +176,19 @@ def __init__(self, repos_stars, repos_forks, repos_languages):
175176 for i in range (len (languages )):
176177 lang = languages [i ]
177178 lang_md = languages_md [i ]
179+ if min_stars is not None :
180+ if lang not in repos_languages or not repos_languages [lang ]:
181+ continue
182+ top_repo_stars = repos_languages [lang ][0 ]['stargazers_count' ]
183+ if top_repo_stars < min_stars :
184+ continue
178185 self .repo_list .append ({
179186 "desc" : "Forks" ,
180187 "desc_md" : "Forks" ,
181188 "title_readme" : lang_md ,
182189 "title_100" : f"Top 100 Stars in { lang_md } " ,
183190 "file_100" : f"{ lang } .md" ,
184- "data" : repos_languages [lang ],
191+ "data" : repos_languages [lang ] if lang in repos_languages else [] ,
185192 "item" : lang ,
186193 })
187194
@@ -247,20 +254,25 @@ def save_to_csv(self):
247254 print ('Save data to Data/github-ranking-' + save_date + '.csv' )
248255
249256
250- def run_by_gql ():
257+ def run_by_gql (min_stars = None ):
251258 ROOT_PATH = os .path .abspath (os .path .join (__file__ , "../../" ))
252259 os .chdir (os .path .join (ROOT_PATH , 'source' ))
253260
254- processor = ProcessorGQL () # use Github GraphQL API v4
261+ processor = ProcessorGQL ()
255262 repos_stars , repos_forks , repos_languages = processor .get_all_repos ()
256- wt_obj = WriteFile (repos_stars , repos_forks , repos_languages )
263+ wt_obj = WriteFile (repos_stars , repos_forks , repos_languages , min_stars = min_stars )
257264 wt_obj .write_head_contents ()
258265 wt_obj .write_readme_lang_md ()
259266 wt_obj .save_to_csv ()
260267
261268
262269if __name__ == "__main__" :
270+ parser = argparse .ArgumentParser (description = 'Generate GitHub ranking' )
271+ parser .add_argument ('--min-stars' , type = int , default = None ,
272+ help = 'Minimum star count threshold for filtering languages' )
273+ args = parser .parse_args ()
274+
263275 t1 = datetime .now ()
264- run_by_gql ()
276+ run_by_gql (min_stars = args . min_stars )
265277 print ("Total time: {}s" .format ((datetime .now () - t1 ).total_seconds ()))
266278
0 commit comments