Pygithub: рдкреНрд░рддрд┐ рдЦреЛрдЬ 1000 рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕реАрдорд╛ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЬреВрди 2018  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: PyGithub/PyGithub

рдЧрд┐рдЯрд╣рдм рдПрдкреАрдЖрдИ рдЦреЛрдЬреЛрдВ рдХреЛ 1000 рдкрд░рд┐рдгрд╛рдореЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рд╕реАрдорд╛ PyGitHub рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЧрдИ рдЦреЛрдЬреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ GitHub.search_issues ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЦреЛрдЬ рдиреЗ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ - рдРрд╕рд╛ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдпрд╛ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрд╡рдЧрдд рд╣реВрдВред рдРрд╕рд╛ рд╣реЛрдиреЗ рдкрд░ рд╢рд╛рдпрдж рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдПрдХрд╛рдзрд┐рдХ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдЬрд╛рд░реА рдХрд░рдХреЗ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХреНрд╡реЗрд░реА рдХреЗ рд╡рд┐рд╢реЗрд╖ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рддрд┐рдерд┐ рд╕реАрдорд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ search_issues рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ - рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ред

рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдХреНрдпрд╛ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рджрд░ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдпрд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдВрдХрди рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ?
рдФрд░ рдЕрдиреНрдп рдЦреЛрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣рд╛рдВ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рддрд┐рдерд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреИрд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рднрд▓реЗ рд╣реА 1000 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВ:

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдЗрд╕реЗ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдЬ рджреЗрддрд╛ рд╣реИ, рд╕рд░рд▓ рд╣реЛрдЧрд╛

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

рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде, рдЕрдм рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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)

рдЦреЛрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Github API рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдкрдврд╝рдирд╛, рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ incomplete_results PyGithub рдореЗрдВ рдЦреЛрдЬ-рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд╛рдпрдм рд╣реИред рд╕рдВрднрд╡рддрдГ рдЙрд╕ рдорд╛рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рднреА рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо (рдЗрди) рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ PyGithub рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ (рдореИрдВ # 606 рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ) рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕рдХреА рдФрд░ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ?
рдФрд░ рдЕрдиреНрдп рдЦреЛрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rthill91 picture rthill91  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PeterJCLaw picture PeterJCLaw  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kodeshpa picture kodeshpa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lwasser picture lwasser  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AdyaAbhra picture AdyaAbhra  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ