Pygithub: Existe um limite de 1000 resultados por pesquisa.

Criado em 21 jun. 2018  ·  5Comentários  ·  Fonte: PyGithub/PyGithub

A API do GitHub limita as pesquisas a 1000 resultados . Esse limite afeta as pesquisas realizadas por meio do PyGitHub, como GitHub.search_issues .

Parece que não há indicação de que sua pesquisa atingiu esse limite - não há exceção ou erro que eu saiba. Talvez deva haver uma exceção levantada quando isso acontecer (se puder ser detectado).

É possível contornar esse limite emitindo várias consultas de pesquisa, mas tais consultas devem ser adaptadas para atender aos objetivos específicos da consulta - por exemplo, iterar search_issues por intervalos de datas progressivos - e não consigo pensar em uma maneira de generalizar isso.

Alguma ideia de como lidar com isso? Existe uma solução geral?

Observe que esse problema não tem nada a ver com limitação de taxa ou paginação de resultados.

stale

Comentários muito úteis

reabrir este problema?
e para uma solução geral para outras pesquisas também

Todos 5 comentários

Esta é uma solução alternativa que demonstra como recuperar todas as solicitações pull em um intervalo de datas, mesmo se houver mais de 1000 resultados:

EDIT: Vou reescrever isso para ser um método que produz, ao invés de uma classe, será mais simples

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

Com esta classe, agora você pode fazer este tipo de coisa:

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)

Lendo os documentos da API do Github sobre pesquisa, também noto que incomplete_results está faltando como parte do processo de resultados de pesquisa no PyGithub. Provavelmente, incluir esse valor também pode ajudar a detectar se os resultados da pesquisa podem estar (in) completos.

Agora que tenho o PyGithub bifurcado e executado localmente a partir da fonte (estou olhando para # 606), talvez eu possa investigar isso mais a fundo.

Este problema foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.

reabrir este problema?
e para uma solução geral para outras pesquisas também

Esta página foi útil?
0 / 5 - 0 avaliações