Skip to content

Commit ff0bad3

Browse files
authored
Merge pull request #115 from nexB/auth-gh
Use authenticated requests for GitHub REST API calls
2 parents 93dbe46 + 630f432 commit ff0bad3

File tree

8 files changed

+10810
-12182
lines changed

8 files changed

+10810
-12182
lines changed

Diff for: .gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,6 @@ tcl
7272

7373
# Ignore Jupyter Notebook related temp files
7474
.ipynb_checkpoints/
75+
76+
# Env Files
77+
.env

Diff for: CHANGELOG.rst

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ Changelog
22
=========
33

44

5+
v0.5.1
6+
-------
7+
- Use authenticated requests for GitHub REST API calls
8+
9+
510
v0.5.0
611
-------
712
- FetchCode now supports retrieving package info for following generic packages:

Diff for: src/fetchcode/package.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,9 @@ class UtilLinuxDirectoryListedSource(DirectoryListedSource):
472472
source_url = "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/"
473473
is_nested = True
474474
# Source archive ex: util-linux-1.2.3.tar.gz
475-
source_archive_regex = re.compile(r"^(util-linux-)(?P<version>[\w.-]*)(.tar.gz)$")
475+
source_archive_regex = re.compile(
476+
r"^(util-linux-|util-linux-ng-)(?P<version>[\w.-]*)(.tar.gz)$"
477+
)
476478
ignored_files_and_dir = []
477479

478480

@@ -666,7 +668,7 @@ class BareboxDirectoryListedSource(DirectoryListedSource):
666668

667669

668670
class LinuxDirectoryListedSource(DirectoryListedSource):
669-
source_url = "https://cdn.kernel.org/pub/linux/kernel/"
671+
source_url = "https://mirrors.edge.kernel.org/pub/linux/kernel/"
670672
# Source archive ex: linux-1.2.3.tar.gz
671673
source_archive_regex = re.compile(r"^(linux-)(?P<version>[\w.-]*)(.tar.gz)$")
672674
is_nested = True

Diff for: src/fetchcode/package_util.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def get_default_package(cls, purl):
5555
namespace = purl.namespace
5656
base_path = "https://api.github.com/repos"
5757
api_url = f"{base_path}/{namespace}/{name}"
58-
response = utils.get_response(api_url)
58+
response = utils.get_github_rest(api_url)
5959
homepage_url = response.get("homepage")
6060
vcs_url = response.get("git_url")
6161
github_url = "https://github.com"
@@ -124,6 +124,12 @@ def _get_github_packages(purl, version_regex, ignored_tag_regex, default_package
124124
version = tag
125125

126126
version = version.strip("Vv").strip()
127+
if "+" in version:
128+
first, last = version.split("+")
129+
first.replace("_", ".")
130+
version = f"{first}+{last}"
131+
else:
132+
version = version.replace("_", ".")
127133
if not version or not version[0].isdigit():
128134
continue
129135

@@ -227,7 +233,7 @@ def get_package_info(cls, gh_purl):
227233
package_dict["type"] = "openssl"
228234
package_dict["namespace"] = None
229235
package_dict["name"] = "openssl"
230-
package_dict["version"] = package_dict["version"].replace("_", ".")
236+
package_dict["version"] = package_dict["version"]
231237

232238
yield package_from_dict(package_dict)
233239

@@ -251,7 +257,7 @@ def get_package_info(cls, gh_purl):
251257
package_dict["type"] = "generic"
252258
package_dict["namespace"] = None
253259
package_dict["name"] = "erofs-utils"
254-
package_dict["version"] = package_dict["version"].replace("_", ".")
260+
package_dict["version"] = package_dict["version"]
255261

256262
yield package_from_dict(package_dict)
257263

@@ -279,7 +285,7 @@ def get_package_info(cls, gh_purl, package_name):
279285
package_dict["type"] = "generic"
280286
package_dict["namespace"] = None
281287
package_dict["name"] = package_name
282-
package_dict["version"] = package_dict["version"].replace("_", ".")
288+
package_dict["version"] = package_dict["version"]
283289

284290
yield package_from_dict(package_dict)
285291

Diff for: src/fetchcode/utils.py

+19-3
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,18 @@ class GraphQLError(Exception):
118118
pass
119119

120120

121-
def github_response(graphql_query):
121+
def get_github_token():
122122
gh_token = os.environ.get("GH_TOKEN", None)
123123
if not gh_token:
124124
from dotenv import load_dotenv
125125

126126
load_dotenv()
127127
gh_token = os.environ.get("GH_TOKEN", None)
128+
return gh_token
129+
130+
131+
def github_response(graphql_query):
132+
gh_token = get_github_token()
128133

129134
if not gh_token:
130135
msg = (
@@ -149,11 +154,22 @@ def github_response(graphql_query):
149154
return response
150155

151156

152-
def get_response(url):
157+
def get_github_rest(url):
158+
headers = None
159+
gh_token = get_github_token()
160+
if gh_token:
161+
headers = {
162+
"Authorization": f"Bearer {gh_token}",
163+
}
164+
165+
return get_response(url, headers)
166+
167+
168+
def get_response(url, headers=None):
153169
"""
154170
Generate `Package` object for a `url` string
155171
"""
156-
resp = requests.get(url)
172+
resp = requests.get(url, headers=headers)
157173
if resp.status_code == 200:
158174
return resp.json()
159175

0 commit comments

Comments
 (0)