当前位置:   article > 正文

PyGithub的实现

pygithub

https://github.com/PyGithub/PyGithub

github/__init__.py

from github.MainClass import Github
  • 1

在这里插入图片描述
github/MainClass.py

from Requester import Requester
  • 1

在这里插入图片描述
github/Requester.py
在这里插入图片描述
使用将账号密码base64,然后加入到Header中进行Basic 认证。

API:
search_repositories():使用GET /search/repositories
search_users()
search_issues():使用GET /search/issues
search_code():使用GET /search/code
search_commits()

搜索代码,实际发出请求的是:

github/MainClass.py中的search_code()

最后的return语句:
在这里插入图片描述
github/PaginatedList.py中,只有手动调用get_page()时才发出了HTTP请求。
在这里插入图片描述
看看requestJsonAndCheck()具体怎么实现的:
在这里插入图片描述
可见,其实其Requester也是通过requests这个库来实现的。
在这里插入图片描述
最终通过__requestRaw() 实现。
在这里插入图片描述
ContentFile 有这些属性:

content、decoded_content、download_url、encoding、git_url、html_url、license、name、path、repository、sha、size、type、url
  • 1

参考:

https://github.com/PyGithub/PyGithub/blob/78d283b9b5c5222dd0ca2750db7b56a2a5545a39/github/ContentFile.py

再看一下token是如何传递的:
github/Requester.py中,
token是拼接之后放到了这个请求头中。
在这里插入图片描述

最终调用HTTP请求的是这个方法:
__requestEncode

    def __requestEncode(self, cnx, verb, url, parameters, requestHeaders, input, encode):
        # 限定HTTP请求动词只有这几个
        assert verb in ["HEAD", "GET", "POST", "PATCH", "PUT", "DELETE"]
        if parameters is None:
            parameters = dict()
        if requestHeaders is None:
            requestHeaders = dict()
        
        #进行认证
        self.__authenticate(url, requestHeaders, parameters)
        requestHeaders["User-Agent"] = self.__userAgent
        if self.__apiPreview:
            requestHeaders["Accept"] = "application/vnd.github.moondragon+json"

        url = self.__makeAbsoluteUrl(url)
        url = self.__addParametersToUrl(url, parameters)

        encoded_input = None
        if input is not None:
            requestHeaders["Content-Type"], encoded_input = encode(input)

        self.NEW_DEBUG_FRAME(requestHeaders)

        # 发出请求
        status, responseHeaders, output = self.__requestRaw(cnx, verb, url, requestHeaders, encoded_input)

        if Consts.headerRateRemaining in responseHeaders and Consts.headerRateLimit in responseHeaders:
            self.rate_limiting = (int(responseHeaders[Consts.headerRateRemaining]), int(responseHeaders[Consts.headerRateLimit]))
        if Consts.headerRateReset in responseHeaders:
            self.rate_limiting_resettime = int(responseHeaders[Consts.headerRateReset])

        if Consts.headerOAuthScopes in responseHeaders:
            self.oauth_scopes = responseHeaders[Consts.headerOAuthScopes].split(", ")

        self.DEBUG_ON_RESPONSE(status, responseHeaders, output)

        return status, responseHeaders, output
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在这里插入图片描述
__authenticate()方法中,会判断若__authorizationHeader不为None,则将请求头设置为 __authorizationHeader
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/902848
推荐阅读
相关标签
  

闽ICP备14008679号