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.
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
Comentários muito úteis
reabrir este problema?
e para uma solução geral para outras pesquisas também