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 :
@@ -282,20 +291,22 @@ def get_path(obj, path):
282291 del filtered_resp ['languages_url' ]
283292
284293 # get default README
285- readme_info , date = rate_limit_get (repo_api_base_url + "/readme" ,
286294 headers = topics_headers ,
287- 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' ]
295+ #readme_info, date = rate_limit_get(repo_api_base_url + "/readme",
296+ # headers=topics_headers,
297+ # params=ref_param)
298+ #if 'message' in readme_info.keys():
299+ # print("README Error: " + readme_info['message'])
300+ # text = ""
301+ #else:
302+ # readme = base64.b64decode(readme_info['content']).decode("utf-8")
303+ # text = readme
304+ # filtered_resp['readmeUrl'] = readme_info['html_url']
295305
296306 # get full git repository
297307 # todo: maybe it should be optional, as this could take some time?
298308
309+ text = ""
299310 # create a temporary directory
300311 with tempfile .TemporaryDirectory () as temp_dir :
301312
@@ -334,6 +345,19 @@ def get_path(obj, path):
334345 dockerfiles .append (repo_relative_path + "/" + filename )
335346 if filename .lower ().endswith (".ipynb" ):
336347 notebooks .append (os .path .join (repo_relative_path , filename ))
348+ if "README" == filename .upper () or "README.MD" == filename .upper ():
349+ if (repo_relative_path == "." ):
350+ try :
351+ with open (os .path .join (dirpath , filename ), "rb" ) as data_file :
352+ data_file_text = data_file .read ()
353+ text = data_file_text .decode ("utf-8" )
354+ if repository_url .endswith ("/" ):
355+ filtered_resp ['readmeUrl' ] = repository_url + filename
356+ else :
357+ filtered_resp ['readmeUrl' ] = repository_url + "/" + filename
358+ except :
359+ print ("README Error: error while reading file content" )
360+
337361 if "LICENSE" == filename .upper () or "LICENSE.MD" == filename .upper ():
338362 try :
339363 with open (os .path .join (dirpath , filename ), "rb" ) as data_file :
@@ -1686,7 +1710,7 @@ def cli_get_data(threshold, ignore_classifiers, repo_url=None, doc_src=None, loc
16861710 except GithubUrlError :
16871711 return None
16881712 elif local_repo is not None :
1689- # assert (local_repo is not None)
1713+ assert (local_repo is not None )
16901714 try :
16911715 text , github_data = load_local_repository_metadata (local_repo )
16921716 if text == "" :
0 commit comments