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 [] | |