Pygithub: Il y a une limite de 1000 résultats par recherche.

Créé le 21 juin 2018  ·  5Commentaires  ·  Source: PyGithub/PyGithub

L'API GitHub limite les recherches à 1000 résultats . Cette limite affecte les recherches effectuées via PyGitHub, telles que GitHub.search_issues .

Il semble qu'il n'y ait aucune indication que votre recherche a atteint cette limite - il n'y a pas d'exception ou d'erreur à ma connaissance. Peut-être qu'il devrait y avoir une exception déclenchée lorsque cela se produit (si elle peut être détectée).

Il est possible de contourner cette limite en émettant plusieurs requêtes de recherche, mais ces requêtes doivent être adaptées aux objectifs particuliers de la requête - par exemple en itérant sur search_issues par plages de dates progressives - et je ne peux pas penser à un moyen de généraliser cela.

Des idées sur la façon d'aborder cela? Existe-t-il une solution générale ?

Notez que ce problème n'a rien à voir avec la limitation du débit ou la pagination des résultats.

stale

Commentaire le plus utile

rouvrir ce problème ?
et pour une solution générale pour d'autres recherches aussi

Tous les 5 commentaires

Voici une solution de contournement montrant comment récupérer toutes les demandes d'extraction dans une plage de dates, même s'il y a plus de 1 000 résultats :

EDIT: je vais réécrire ceci pour être une méthode qui rapporte, plutôt qu'une classe, sera plus simple

class PullRequestQuery:
    def __init__(self, git, repo, since, until):
        self.git = git
        self.repo = repo
        self.until = until
        self.issues = self.__query(since, until)

    def __iter__(self):
        skip = False
        while True:
            results = False
            for issue in self.issues:
                if not skip:
                    results = True
                    yield issue.as_pull_request()
                skip = False

            # If no more results then stop iterating.
            if not results:
                break

            # Start new query picking up where we left off. Previous issue will be first one returned, so skip it.
            self.issues = self.__query(issue.closed_at.strftime('%Y-%m-%dT%H:%M:%SZ'), self.until)
            skip = True

    def __query(self, since, until):
        querystring = 'type:pr is:closed repo:%s/%s closed:"%s..%s"' % (self.repo.organization.login, self.repo.name, since, until)
        return self.git.search_issues(query=querystring, sort="updated", order="asc")

Avec cette classe, vous pouvez maintenant faire ce genre de chose :

git = Github(user, passwd)
org = git.get_organization(orgname)
repo = org.get_repo(reponame)
for pull in PullRequestQuery(git, repo, "2017-01-01", "2017-12-31"):
    print "%s: %s" % (pull.number, pull.title)

En lisant la documentation de l'API Github sur la recherche, je remarque également que incomplete_results est manquant dans le cadre du processus de recherche des résultats dans PyGithub. Inclure probablement cette valeur pourrait également déjà aider à détecter si les résultats de la recherche pourraient être (in)complets.

Maintenant que PyGithub est forké et exécuté localement à partir de la source (je regarde # 606), je peux peut-être enquêter davantage.

Ce problème a été automatiquement marqué comme obsolète car il n'a pas eu d'activité récente. Il sera fermé si aucune autre activité ne se produit. Merci pour vos contributions.

rouvrir ce problème ?
et pour une solution générale pour d'autres recherches aussi

Cette page vous a été utile?
0 / 5 - 0 notes