-
-
Save taskylizard/502493c63b4602c1f011f0da7b3012b2 to your computer and use it in GitHub Desktop.
Python script to download folders from Github repo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| Downloads folders from github repo | |
| Requires PyGithub | |
| pip install PyGithub | |
| """ | |
| import os | |
| import sys | |
| import base64 | |
| import shutil | |
| import getopt | |
| from github import Github | |
| from github import GithubException | |
| def get_sha_for_tag(repository, tag): | |
| """ | |
| Returns a commit PyGithub object for the specified repository and tag. | |
| """ | |
| branches = repository.get_branches() | |
| matched_branches = [match for match in branches if match.name == tag] | |
| if matched_branches: | |
| return matched_branches[0].commit.sha | |
| tags = repository.get_tags() | |
| matched_tags = [match for match in tags if match.name == tag] | |
| if not matched_tags: | |
| raise ValueError('No Tag or Branch exists with that name') | |
| return matched_tags[0].commit.sha | |
| def download_directory(repository, sha, server_path): | |
| """ | |
| Download all contents at server_path with commit tag sha in | |
| the repository. | |
| """ | |
| if os.path.exists(server_path): | |
| shutil.rmtree(server_path) | |
| os.makedirs(server_path) | |
| contents = repository.get_dir_contents(server_path, ref=sha) | |
| for content in contents: | |
| print "Processing %s" % content.path | |
| if content.type == 'dir': | |
| os.makedirs(content.path) | |
| download_directory(repository, sha, content.path) | |
| else: | |
| try: | |
| path = content.path | |
| file_content = repository.get_contents(path, ref=sha) | |
| file_data = base64.b64decode(file_content.content) | |
| file_out = open(content.path, "w+") | |
| file_out.write(file_data) | |
| file_out.close() | |
| except (GithubException, IOError) as exc: | |
| print('Error processing %s: %s', content.path, exc) | |
| def usage(): | |
| """ | |
| Prints the usage command lines | |
| """ | |
| print "usage: gh-download --token=token --org=org --repo=repo --branch=branch --folder=folder" | |
| def main(argv): | |
| """ | |
| Main function block | |
| """ | |
| try: | |
| opts, args = getopt.getopt(argv, "t:o:r:b:f:", ["token=", "org=", "repo=", "branch=", "folder="]) | |
| except getopt.GetoptError as err: | |
| print str(err) | |
| usage() | |
| sys.exit(2) | |
| for opt, arg in opts: | |
| if opt in ("-t", "--token"): | |
| token = arg | |
| elif opt in ("-o", "--org"): | |
| org = arg | |
| elif opt in ("-r", "--repo"): | |
| repo = arg | |
| elif opt in ("-b", "--branch"): | |
| branch = arg | |
| elif opt in ("-f", "--folder"): | |
| folder = arg | |
| github = Github(token) | |
| organization = github.get_organization(org) | |
| repository = organization.get_repo(repo) | |
| sha = get_sha_for_tag(repository, branch) | |
| download_directory(repository, sha, folder) | |
| if __name__ == "__main__": | |
| """ | |
| Entry point | |
| """ | |
| main(sys.argv[1:]) |
Nice and clean code very helpful for anyone trying to understand this logic quickly! Also, if you need to make images wider or add space around photos for your project, try this: photo expander
A useful AI tool that can help when you want to скачать видео с инстаграм and clean it up by removing unwanted watermarks automatically. It processes videos smoothly and keeps the quality intact, making content ready for reuse or editing.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This script lets you download entire folders from a GitHub repo with ease! You can also try out awesome FNF Mods at fnfmods.io for new music and super fun rhythm challenges.