Source code for review_recommender.ranker

from . import data_retriveal
from .inverted_files import InvertedFile
from .tokenizer import Tokenizer
from .scorer import Scorer


# def loadingBarCallback(done, total):
#     numOfTicks = 50
#     percentage = int(done/total*100)
#     print('done: ' + '-'* int(done/total* numOfTicks) + f'{percentage} %', end="\r")
#     if percentage == 100: print('\n')

[docs]def getRanking(repo: data_retriveal.RepoRetriveal, pullNumber, numberOfPulls=30, numberOfCommits=30): """ Given a repository and a pull number, returns a rank of possible revisors: Args: repo(data_retriveal.RepoRetriveal) : the repository pullNumber(int): the number of the pull numberOfPulls(int): number of pulls you want to retrieve, defaults to 30 numberOfCommits(int): number of commits you want to retrieve, defaults to 30 Raises: requests.HTTPError: the repository or the pull number is invalid. """ scorer = Scorer() invertedFile = InvertedFile() newPull = repo.getPullByNumber(pullNumber) print('collecting pulls...') for pull in repo.getPullIterable(pullNumber, numberOfPulls): files = repo.getPullFiles(pull) pullTokenFreqs = Tokenizer.getTokenFreqs(files) invertedFile.add(pull, pullTokenFreqs) print('collecting commits...') for commit in repo.getCommitsIterable(newPull.date, numberOfCommits): files = repo.getCommitFiles(commit) commitTokenFreqs = Tokenizer.getTokenFreqs(files) invertedFile.add(commit, commitTokenFreqs) newPullTokenFreqs = Tokenizer.getTokenFreqs(repo.getPullFiles(newPull)) similar = invertedFile.getSimilar(newPullTokenFreqs) print('getting rank...') for item, score in similar.items(): if isinstance(item, data_retriveal.RepoRetriveal.Commit) \ and not item.author_login == newPull.author_login: scorer.addReviewerScore(item.author_login, score) elif isinstance(item, data_retriveal.RepoRetriveal.PullRequest): for reviewer in item.reviewers: if not reviewer == newPull.author_login: scorer.addReviewerScore(reviewer, score) return scorer