Pygithub: github.PaginatedList.PaginatedList totalCount العائد لا شيء

تم إنشاؤها على ٢ يوليو ٢٠١٦  ·  14تعليقات  ·  مصدر: PyGithub/PyGithub

سؤالي هو لماذا يؤدي استدعاء totalCount مباشرة إلى إرجاع "بلا" ، ولكن التكرار سيحصل على الرقم.

            repo_commits = repo.get_commits()
            repo_total = 0
            for _ in repo_commits:
                repo_total = repo_total + 1
            repo_total = repo.get_commits().totalCount

التعليق الأكثر فائدة

للجوهر:

    from github import Github
    gh = Github()
    gists = gh.get_user('gil9red').get_gists()
    print(gists.totalCount)  # None
    print(len(list(gists)))  # 7

ال 14 كومينتر

أنا ألصق الكود الخاص بي

import json
import os

import github
from github import Github

# First create a Github instance:

g = Github("grapebaba", "heatonn1",per_page=1000)


def main():
    '''
    Use small data for this application
    :return:
    '''
    with open(os.path.join(os.path.expanduser("~"),'recruitbot_data.txt'),'w') as f:
        for user in g.search_users("type:user")[0:10000]:
            user_dict = {}
            user_dict['username'] = user.login
            user_dict['id'] = user.id
            user_dict['profile_url'] = user.html_url
            user_dict['location'] = user.location
            user_dict['followers'] = user.followers
            user_dict['private_gists'] = user.private_gists
            user_dict['public_gists'] = user.public_gists
            user_dict['name'] = user.name
            user_dict['company'] = user.company
            user_dict['blog_url'] = user.blog
            user_dict['email'] = user.email
            user_dict['id'] = user.id
            user_dict['contributions']={}
            for repo in user.get_watched():
                try:
                    repo_total = 0
                    for _ in repo.get_commits():
                        repo_total = repo_total + 1
                    if repo.get_stats_contributors() is not None:
                        for contributor in repo.get_stats_contributors():
                            if contributor is not None and contributor.author.id == user_dict['id']:
                                user_dict['contributions'][repo.name]={}
                                user_dict['contributions'][repo.name]['contributor_commits']=contributor.total
                                user_dict['contributions'][repo.name]['repo_commits']=repo_total
                                user_dict['contributions'][repo.name]['language']=repo.language
                                user_dict['contributions'][repo.name]['stars']=repo.stargazers_count
                                print user_dict
                                break
                except github.GithubException as e:
                    print e

            f.write(json.dumps(user_dict)+"\n")

if __name__ == '__main__':
    main()

لدي مشكلة أخرى ، وأحيانًا أتلقى خطأ SSL

Traceback (most recent call last):
  File "/tmp/collector.py", line 54, in <module>
    main()
  File "/tmp/collector.py", line 36, in main
    for _ in repo.get_commits():
  File "/usr/local/lib/python2.7/dist-packages/github/PaginatedList.py", line 48, in __iter__
    newElements = self._grow()
  File "/usr/local/lib/python2.7/dist-packages/github/PaginatedList.py", line 60, in _grow
    newElements = self._fetchNextPage()
  File "/usr/local/lib/python2.7/dist-packages/github/PaginatedList.py", line 161, in _fetchNextPage
    headers=self.__headers
  File "/usr/local/lib/python2.7/dist-packages/github/Requester.py", line 171, in requestJsonAndCheck
    return self.__check(*self.requestJson(verb, url, parameters, headers, input, cnx))
  File "/usr/local/lib/python2.7/dist-packages/github/Requester.py", line 212, in requestJson
    return self.__requestEncode(cnx, verb, url, parameters, headers, input, encode)
  File "/usr/local/lib/python2.7/dist-packages/github/Requester.py", line 251, in __requestEncode
    status, responseHeaders, output = self.__requestRaw(cnx, verb, url, requestHeaders, encoded_input)
  File "/usr/local/lib/python2.7/dist-packages/github/Requester.py", line 281, in __requestRaw
    output = response.read()
  File "/usr/lib/python2.7/httplib.py", line 557, in read
    s = self._safe_read(self.length)
  File "/usr/lib/python2.7/httplib.py", line 664, in _safe_read
    chunk = self.fp.read(min(amt, MAXAMOUNT))
  File "/usr/lib/python2.7/socket.py", line 380, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/ssl.py", line 341, in recv
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 260, in read
    return self._sslobj.read(len)

مرحبا،
بخصوص حساب totalCount الخاص بك بأنه لا شيء ، لدي نفس الشيء مع repo.get_pulls (). totalCount.
أعتقد أن المشكلة تكمن في أن JSON الذي تم إرجاعه لا يحتوي على بيانات ['total_count'].
ربما يجب أن تقوم القائمة المرقمة بتطبيق __len__ مع:

if self.__totalCount:
    return self.__totalCount
else:
   return len(self.__elements)

pgmillon هذا يبدو عادلاً.
إذا كنت ترغب في صياغة علاقات عامة صغيرة تقوم بذلك ، فسأكون على استعداد لدمجها.

لاحظت نفس الشيء ، PaginatedList لا تحدد totalCount. إعادة مجموعة من العناصر ليس ما أبحث عنه ، أريد أن أعرف عدد العناصر الموجودة بالفعل التي يمكن جلبها.

موافق ولكن AFAIK API لا تعطي أي طريقة لمعرفة ذلك. لذا فإن الطريقة الوحيدة هي الحل الحالي:

opened_pulls = repository.get_pulls()
pulls_count = 0
# Fix no count available on pulls list
for _ in opened_pulls:
    pulls_count += 1

للجوهر:

    from github import Github
    gh = Github()
    gists = gh.get_user('gil9red').get_gists()
    print(gists.totalCount)  # None
    print(len(list(gists)))  # 7

لا تزال نفس المشكلة:

from github import Github
g = Github()
repos = g.get_repos()
print(repos.totalCount) # None

@ gil9redTigralt هل تحاول الحصول على عدد من البنود وهذا ما عاد من بالتكرار عبر PaginatedList؟ إذا كان الأمر كذلك ، فلا توجد طريقة للقيام بذلك دون تكرار القائمة المرقمة وزيادة العدد. انظر المستندات هنا (على الرغم من أنها قديمة فهي صحيحة)

لا يوفر GitHub أي طريقة لمعرفة عدد العناصر التي سيعيدها الطلب المرقّم ، لذلك ليس للقائمة المرقمة طول:
...
إذا كنت تقصد حقًا أخذ طول القائمة المرقمة ، فيجب عليك إنشاء قائمة بشكل واضح [كذا] ثم استخدام طولها:

إذا كنت تحاول الحصول على عدد العناصر في صفحة واحدة في قائمة الصفحات ، يبدو أن هذا العلاقات العامة لا يزال مفتوحًا ويتم مناقشته.

النظر في بعض القضايا ذات الصلة # 433 # 487 # 596

أعتقد أن total_count من استجابة Github API القديمة؟ يجب علينا إزالة السمة TotalCount على PaginatedList نظرًا لأن تنفيذها معطل وإرجاع دائمًا None . بدلاً من ذلك ، يمكننا إضافة شيء ما في المستندات مثل:

# To get the total number of available elements in PaginatedList
repos = g.get_user().get_repos()
print(len(list(repos)))  # we can't avoid to iterate through the whole set to get total count

وربما يمكننا تنفيذ __len__ لإرجاع عدد العناصر الحالية؟

أعتقد أن Github API سيعيد العدد الإجمالي للصفحات لاستعلام ما ، لذلك إذا قمت بتعيين per_page=1 يجب أن تكون قادرًا على الحصول على العدد الإجمالي للعناصر من طلب واحد. يمكن أن يكون هذا أكثر كفاءة من التكرار (لمجموعات النتائج الكبيرة).

@ Tommos0 أرى ، ربما تكون هذه فكرة جيدة. يمكننا حتى عمل HEAD بدلاً من GET فقط لاسترداد رأس Link .

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.

ثابت في # 820

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

xpdable picture xpdable  ·  5تعليقات

diegotejadav picture diegotejadav  ·  5تعليقات

grayaii picture grayaii  ·  4تعليقات

rthill91 picture rthill91  ·  4تعليقات

psychemedia picture psychemedia  ·  5تعليقات