Pygithub: Hay un límite de 1000 resultados por búsqueda.

Creado en 21 jun. 2018  ·  5Comentarios  ·  Fuente: PyGithub/PyGithub

La API de GitHub limita las búsquedas a 1000 resultados . Este límite afecta las búsquedas realizadas a través de PyGitHub, como GitHub.search_issues .

Parece que no hay indicios de que su búsqueda haya alcanzado este límite; no hay ninguna excepción o error que yo sepa. Quizás debería haber una excepción cuando esto suceda (si se puede detectar).

Es posible evitar este límite emitiendo múltiples consultas de búsqueda, pero dichas consultas deben adaptarse para adaptarse a los objetivos particulares de la consulta, por ejemplo, iterando sobre search_issues por rangos de fechas progresivos, y no puedo pensar en una forma de generalizar esto.

¿Alguna idea sobre cómo abordar esto? ¿Existe una solución general?

Tenga en cuenta que este problema no tiene nada que ver con la limitación de la velocidad o la paginación de los resultados.

stale

Comentario más útil

reabrir este problema?
y para una solución general para otras búsquedas también

Todos 5 comentarios

Aquí hay una solución alternativa que demuestra cómo recuperar todas las solicitudes de extracción en un rango de fechas, incluso si hay más de 1000 resultados:

EDITAR: Reescribiré esto para que sea un método que rinda, en lugar de una clase, será más 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")

Con esta clase, ahora puede hacer este tipo de cosas:

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)

Al leer los documentos de la API de Github sobre la búsqueda, también me doy cuenta de que falta incomplete_results como parte del proceso de resultados de búsqueda en PyGithub. Probablemente, incluir ese valor también podría ayudar a detectar si los resultados de búsqueda podrían estar (in) completos.

Ahora que tengo PyGithub bifurcado y ejecutándose localmente desde la fuente (estoy viendo el n. ° 606) tal vez pueda investigar esto más a fondo.

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.

reabrir este problema?
y para una solución general para otras búsquedas también

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

jacquev6 picture jacquev6  ·  3Comentarios

xpdable picture xpdable  ·  5Comentarios

psychemedia picture psychemedia  ·  5Comentarios

rthill91 picture rthill91  ·  4Comentarios

AdyaAbhra picture AdyaAbhra  ·  5Comentarios