Pygithub: Es gibt ein Limit von 1000 Ergebnissen pro Suche.

Erstellt am 21. Juni 2018  ·  5Kommentare  ·  Quelle: PyGithub/PyGithub

Die GitHub-API beschränkt die Suche auf 1000 Ergebnisse . Dieses Limit betrifft Suchen, die über PyGitHub durchgeführt werden, z. B. GitHub.search_issues .

Es scheint kein Hinweis darauf zu geben, dass Ihre Suche dieses Limit erreicht hat - mir ist keine Ausnahme oder kein Fehler bekannt. Vielleicht sollte in diesem Fall eine Ausnahme ausgelöst werden (wenn sie erkannt werden kann).

Es ist möglich, dieses Limit zu umgehen, indem mehrere Suchabfragen ausgegeben werden, aber solche Abfragen müssen auf die jeweiligen Ziele der Abfrage zugeschnitten sein - zum Beispiel das Durchlaufen von search_issues nach progressiven Datumsbereichen - und ich kann mir keine Möglichkeit vorstellen, dies zu verallgemeinern.

Irgendwelche Gedanken, wie man das angeht? Gibt es eine allgemeine Lösung?

Beachten Sie, dass dieses Problem nichts mit der Geschwindigkeitsbegrenzung oder der Paginierung von Ergebnissen zu tun hat.

stale

Hilfreichster Kommentar

dieses Thema erneut öffnen?
und für eine allgemeine Lösung auch für andere Suchen

Alle 5 Kommentare

Hier ist eine Problemumgehung, die zeigt, wie alle Pull-Requests in einem Datumsbereich abgerufen werden, auch wenn mehr als 1000 Ergebnisse vorliegen:

BEARBEITEN: Ich werde dies umschreiben, um eine Methode zu sein, die eher als eine Klasse liefert, die einfacher ist

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")

Mit dieser Klasse können Sie jetzt Folgendes tun:

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)

Beim Lesen der Github-API-Dokumentation über die Suche stelle ich auch fest, dass incomplete_results als Teil der Suchergebnisverarbeitung in PyGithub fehlt. Wahrscheinlich kann die Einbeziehung dieses Wertes auch schon dabei helfen, zu erkennen, ob Suchergebnisse (un-)vollständig sind.

Jetzt, da ich PyGithub gegabelt habe und lokal aus dem Quellcode ausgeführt habe (ich schaue mir # 606) an, kann ich dies vielleicht weiter untersuchen.

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.

dieses Thema erneut öffnen?
und für eine allgemeine Lösung auch für andere Suchen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen