Skip to content

Commit 92d4231

Browse files
committed
Work done related to issue 288
Also added encoding to setup to try to fix encoding error when running somef at Windows OS
1 parent 36a38cc commit 92d4231

File tree

2 files changed

+43
-20
lines changed

2 files changed

+43
-20
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
# Utility function to read the README file.
2727
def read(fname):
28-
return open(os.path.join(os.path.dirname(__file__), fname)).read()
28+
return open(os.path.join(os.path.dirname(__file__), fname), encoding='utf-8').read()
2929

3030

3131
def find_package_data(dirname):

src/somef/cli.py

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import tempfile
1414
import time
1515
import urllib
16+
from datetime import datetime
1617

1718
import markdown
1819
import 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

Comments
 (0)