@@ -232,10 +232,12 @@ class Stats(object):
232232 def __init__ (self , username : str , access_token : str ,
233233 session : aiohttp .ClientSession ,
234234 exclude_repos : Optional [Set ] = None ,
235- exclude_langs : Optional [Set ] = None ):
235+ exclude_langs : Optional [Set ] = None ,
236+ ignore_forked_repos : bool = False ):
236237 self .username = username
237238 self ._exclude_repos = set () if exclude_repos is None else exclude_repos
238239 self ._exclude_langs = set () if exclude_langs is None else exclude_langs
240+ self ._ignore_forked_repos = ignore_forked_repos
239241 self .queries = Queries (username , access_token , session )
240242
241243 self ._name = None
@@ -245,11 +247,7 @@ def __init__(self, username: str, access_token: str,
245247 self ._languages = None
246248 self ._repos = None
247249 self ._lines_changed = None
248- self ._views = None
249-
250- self ._ignore_forked_repositories = False
251- if len (os .getenv ("IGNORE_FORKED_REPOSITORIES" )) != 0 :
252- self ._ignore_forked_repositories = True
250+ self ._views = None
253251
254252 async def to_str (self ) -> str :
255253 """
@@ -264,7 +262,7 @@ async def to_str(self) -> str:
264262Stargazers: { await self .stargazers :,}
265263Forks: { await self .forks :,}
266264All-time contributions: { await self .total_contributions :,}
267- Repositories with contributions: { len (await self .repos )}
265+ Repositories with contributions: { len (await self .all_repos )}
268266Lines of code added: { lines_changed [0 ]:,}
269267Lines of code deleted: { lines_changed [1 ]:,}
270268Lines of code changed: { lines_changed [0 ] + lines_changed [1 ]:,}
@@ -280,7 +278,8 @@ async def get_stats(self) -> None:
280278 self ._forks = 0
281279 self ._languages = dict ()
282280 self ._repos = set ()
283-
281+ self ._ignored_repos = set ()
282+
284283 next_owned = None
285284 next_contrib = None
286285 while True :
@@ -310,9 +309,14 @@ async def get_stats(self) -> None:
310309 .get ("repositories" , {}))
311310
312311 repos = owned_repos .get ("nodes" , [])
313- if not self ._ignore_forked_repositories :
312+ if not self ._ignore_forked_repos :
314313 repos += contrib_repos .get ("nodes" , [])
315-
314+ else :
315+ for repo in contrib_repos .get ("nodes" , []):
316+ name = repo .get ("nameWithOwner" )
317+ if name in self ._ignored_repos or name in self ._exclude_repos :
318+ continue
319+ self ._ignored_repos .add (name )
316320
317321 for repo in repos :
318322 name = repo .get ("nameWithOwner" )
@@ -418,6 +422,19 @@ async def repos(self) -> List[str]:
418422 await self .get_stats ()
419423 assert (self ._repos is not None )
420424 return self ._repos
425+
426+ @property
427+ async def all_repos (self ) -> List [str ]:
428+ """
429+ :return: list of names of user's repos with contributed repos included
430+ irrespective of whether the ignore flag is set or not
431+ """
432+ if self ._repos is not None and self ._ignored_repos is not None :
433+ return self ._repos | self ._ignored_repos
434+ await self .get_stats ()
435+ assert (self ._repos is not None )
436+ assert (self ._ignored_repos is not None )
437+ return self ._repos | self ._ignored_repos
421438
422439 @property
423440 async def total_contributions (self ) -> int :
0 commit comments