Skip to content

Commit 7957062

Browse files
author
Maximilian Karl
authored
add get mutiple repos (#49)
* add get_repos * add test to get_repos
1 parent 37cf772 commit 7957062

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

github2pandas/utility.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class Utility():
2727
Save a data list to a pandas table.
2828
get_repo_informations(data_root_dir)
2929
Get a repository data (owner and name).
30+
get_repos(repo_name_pattern, blacklist_pattern, token, data_root_dir)
31+
Get mutiple repositorys by pattern and token.
3032
get_repo(repo_owner, repo_name, token, data_root_dir)
3133
Get a repository by owner, name and token.
3234
apply_datetime_format(pd_table, source_column, destination_column=None)
@@ -171,6 +173,47 @@ def get_repo_informations(data_root_dir):
171173
return (repo_data["repo_owner"], repo_data["repo_name"])
172174
return None, None
173175

176+
@staticmethod
177+
def get_repos(whitelist_pattern, blacklist_pattern, token, data_root_dir):
178+
"""
179+
get_repos(repo_name_pattern, blacklist_pattern, token, data_root_dir)
180+
181+
Get mutiple repositorys by pattern and token.
182+
183+
Parameters
184+
----------
185+
whitelist_pattern : str
186+
the whitelist pattern of the desired repository.
187+
blacklist_pattern : str
188+
the blacklist pattern of the desired repository.
189+
token : str
190+
A valid Github Token.
191+
data_root_dir : str
192+
Data root directory for the repositorys.
193+
194+
Returns
195+
-------
196+
List
197+
List of Repository objects from pygithub.
198+
199+
Notes
200+
-----
201+
PyGithub Repository object structure: https://pygithub.readthedocs.io/en/latest/github_objects/Repository.html
202+
203+
"""
204+
g = github.Github(token)
205+
relevant_repos = []
206+
for repo in g.get_user().get_repos():
207+
if whitelist_pattern == "" or whitelist_pattern == None or whitelist_pattern in repo.name:
208+
if blacklist_pattern == "" or blacklist_pattern == None or not blacklist_pattern in repo.name:
209+
repo_dir = Path(data_root_dir, repo.owner.login + "/" + repo.name)
210+
repo_dir.mkdir(parents=True, exist_ok=True)
211+
repo_file = Path(repo_dir, Utility.REPO)
212+
with open(repo_file, 'w') as json_file:
213+
json.dump({"repo_owner": repo.owner.login,"repo_name":repo.name}, json_file)
214+
relevant_repos.append(repo)
215+
return relevant_repos
216+
174217
@staticmethod
175218
def get_repo(repo_owner, repo_name, token, data_root_dir):
176219
"""

tests/test_utility.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ def test_get_repo_informations(self):
127127
self.assertIsNone(owner)
128128
self.assertIsNone(name)
129129

130+
def test_get_repos(self):
131+
warnings.simplefilter ("ignore", ResourceWarning)
132+
repos = Utility.get_repos("github2pandas",None,self.github_token, "test_data")
133+
self.assertNotEqual(repos,[])
134+
130135
def test_get_repo(self):
131136
warnings.simplefilter ("ignore", ResourceWarning)
132137
repo = Utility.get_repo(self.git_repo_owner, self.git_repo_name, self.github_token, self.default_data_folder)

0 commit comments

Comments
 (0)