Spaces:
Runtime error
Runtime error
"""CodeFetcher deals with every detail of | |
how to get all python files in the given directory | |
""" | |
import requests | |
def construct_fetch_repo_content_api_url(owner, repo, tree_sha, recursive): | |
import os | |
# to increase api rate limiting | |
# https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting | |
USER = os.environ.get("USER", "") | |
PERSONAL_ACCESS_TOKEN = os.environ.get("PERSONAL_ACCESS_TOKEN", "") | |
api_url = f"api.github.com/repos/{owner}/{repo}/git/trees/{tree_sha}" | |
if USER and PERSONAL_ACCESS_TOKEN: | |
api_url = f"{USER}:{PERSONAL_ACCESS_TOKEN}@{api_url}" | |
if recursive: | |
api_url += "?recursive=1" | |
return "https://" + api_url | |
class CodeFetcher: | |
def get_python_files( | |
cls, | |
owner: str, | |
repo: str, | |
tree_sha: str, | |
recursive: bool = True, | |
): | |
"""https://docs.github.com/en/rest/git/trees#get-a-tree""" | |
# TODO: deal with truncated api results | |
api_url = construct_fetch_repo_content_api_url(owner, repo, tree_sha, recursive) | |
response = requests.get( | |
api_url, headers={"Accept": "application/vnd.github.v3+json"} | |
) | |
api_results = response.json() | |
if response.status_code == requests.codes.ok: | |
python_files = [ | |
result | |
for result in api_results["tree"] | |
if type(result) is dict | |
and result["type"] == "blob" | |
and result["path"].endswith(".py") | |
] | |
return python_files | |
else: | |
print(api_results) | |
return [] | |