1313import tempfile
1414import time
1515import urllib
16+ from datetime import datetime
1617
1718import markdown
1819import validators
@@ -111,6 +112,10 @@ def rate_limit_get(*args, backoff_rate=2, initial_backoff=1, **kwargs):
111112 response = requests .get (* args , ** kwargs )
112113 data = response
113114 date = data .headers ["date" ]
115+ rate_limit_remaining = data .headers ["x-ratelimit-remaining" ]
116+ epochtime = int (data .headers ["x-ratelimit-reset" ])
117+ date_reset = datetime .fromtimestamp (epochtime )
118+ print ("Rate limit ramaining: " + rate_limit_remaining + " ### Next rate limit reset at: " + str (date_reset ))
114119 response = response .json ()
115120 if 'message' in response and 'API rate limit exceeded' in response ['message' ]:
116121 rate_limited = True
@@ -245,16 +250,20 @@ def get_path(obj, path):
245250 if len (license_info ) > 0 :
246251 filtered_resp ['license' ] = license_info
247252
248- # get keywords / topics
249253 topics_headers = header
250- topics_headers ['accept' ] = 'application/vnd.github.mercy-preview+json'
251- topics_resp , date = rate_limit_get (repo_api_base_url + "/topics" ,
252- headers = topics_headers )
253-
254- if 'message' in topics_resp .keys ():
255- print ("Topics Error: " + topics_resp ['message' ])
256- elif topics_resp and 'names' in topics_resp .keys ():
257- filtered_resp ['topics' ] = topics_resp ['names' ]
254+ # get keywords / topics
255+ if 'topics' in general_resp .keys ():
256+ filtered_resp ['topics' ] = general_resp ['topics' ]
257+ #else:
258+ # topics_headers = header
259+ # topics_headers['accept'] = 'application/vnd.github.mercy-preview+json'
260+ # topics_resp, date = rate_limit_get(repo_api_base_url + "/topics",
261+ # headers=topics_headers)
262+
263+ # if 'message' in topics_resp.keys():
264+ # print("Topics Error: " + topics_resp['message'])
265+ # elif topics_resp and 'names' in topics_resp.keys():
266+ # filtered_resp['topics'] = topics_resp['names']
258267
259268 # get social features: stargazers_count
260269 stargazers_info = {}
@@ -273,7 +282,7 @@ def get_path(obj, path):
273282 filtered_resp ['forksCount' ] = forks_info
274283
275284 ## get languages
276- languages , date = rate_limit_get (filtered_resp ['languages_url' ])
285+ languages , date = rate_limit_get (filtered_resp ['languages_url' ], headers = header )
277286 if "message" in languages :
278287 print ("Languages Error: " + languages ["message" ])
279288 else :
@@ -285,17 +294,18 @@ def get_path(obj, path):
285294 readme_info , date = rate_limit_get (repo_api_base_url + "/readme" ,
286295 headers = topics_headers ,
287296 params = ref_param )
288- if 'message' in readme_info .keys ():
289- print ("README Error: " + readme_info ['message' ])
290- text = ""
291- else :
292- readme = base64 .b64decode (readme_info ['content' ]).decode ("utf-8" )
293- text = readme
294- filtered_resp ['readmeUrl' ] = readme_info ['html_url' ]
297+ # if 'message' in readme_info.keys():
298+ # print("README Error: " + readme_info['message'])
299+ # text = ""
300+ # else:
301+ # readme = base64.b64decode(readme_info['content']).decode("utf-8")
302+ # text = readme
303+ # filtered_resp['readmeUrl'] = readme_info['html_url']
295304
296305 # get full git repository
297306 # todo: maybe it should be optional, as this could take some time?
298307
308+ text = ""
299309 # create a temporary directory
300310 with tempfile .TemporaryDirectory () as temp_dir :
301311
@@ -334,6 +344,19 @@ def get_path(obj, path):
334344 dockerfiles .append (repo_relative_path + "/" + filename )
335345 if filename .lower ().endswith (".ipynb" ):
336346 notebooks .append (os .path .join (repo_relative_path , filename ))
347+ if "README" == filename .upper () or "README.MD" == filename .upper ():
348+ if (repo_relative_path == "." ):
349+ try :
350+ with open (os .path .join (dirpath , filename ), "rb" ) as data_file :
351+ data_file_text = data_file .read ()
352+ text = data_file_text .decode ("utf-8" )
353+ if repository_url .endswith ("/" ):
354+ filtered_resp ['readmeUrl' ] = repository_url + filename
355+ else :
356+ filtered_resp ['readmeUrl' ] = repository_url + "/" + filename
357+ except :
358+ print ("README Error: error while reading file content" )
359+
337360 if "LICENSE" == filename .upper () or "LICENSE.MD" == filename .upper ():
338361 try :
339362 with open (os .path .join (dirpath , filename ), "rb" ) as data_file :
@@ -786,7 +809,7 @@ def load_local_repository_metadata(local_repo):
786809 with open (os .path .join (os .path .join (repo_dir , "README.MD" )), "r" , encoding = 'utf-8' ) as data_file :
787810 text = data_file .read ()
788811 elif os .path .exists (os .path .join (repo_dir , "README.md" )):
789- with open (os .path .join (os .path .join (repo_dir , "README.md " )), "r" , encoding = 'utf-8' ) as data_file :
812+ with open (os .path .join (os .path .join (repo_dir , "README.MD " )), "r" , encoding = 'utf-8' ) as data_file :
790813 text = data_file .read ()
791814 for dirpath , dirnames , filenames in os .walk (repo_dir ):
792815 repo_relative_path = os .path .relpath (dirpath , repo_dir )
@@ -1686,7 +1709,7 @@ def cli_get_data(threshold, ignore_classifiers, repo_url=None, doc_src=None, loc
16861709 except GithubUrlError :
16871710 return None
16881711 elif local_repo is not None :
1689- # assert (local_repo is not None)
1712+ assert (local_repo is not None )
16901713 try :
16911714 text , github_data = load_local_repository_metadata (local_repo )
16921715 if text == "" :
0 commit comments