Pygithub: كائن الفرع يفتقد معظم السمات والأساليب

تم إنشاؤها على ١٧ أغسطس ٢٠١٨  ·  11تعليقات  ·  مصدر: PyGithub/PyGithub

أنا ألعب بهذه المكتبة على أمل أن أتمكن من أتمتة الأشياء على Github Enterprise. من أول الأشياء التي أحتاج إلى القيام بها هو تعيين حماية الفروع لمستودعاتنا. ومع ذلك ، عندما أقوم ببدء كائن فرع من مستودع اختبار (تم تعيين حماية فرع له بالفعل) ، فإن السمة الوحيدة التي عينتها هي "الاسم" ، ومعظم الطرق المدرجة في الوثائق غير موجودة في موضوع:

import github
github.enable_console_debug_logging()
Github = github.Github

Github("myuser",
'mycreds',
base_url="https://ghe.workworkwork.com/api/v3")

master = g.get_user("myuser").get_repo('cookbook1').get_branch('master')
print master
print master.protection_url

الإخراج:

...
GET https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/branches/master {'Authorization': 'Basic (login and password removed)', 'User-Agent': 'PyGithub/Python'} None ==> 200 {'status': '200 OK', 'content-length': '2925', 'x-github-media-type': 'github.v3', 'x-content-type-options': 'nosniff', 'content-security-policy': "default-src 'none'", 'access-control-expose-headers': 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval', 'x-github-request-id': '0ec6f4e8-2355-41dc-859d-0e7076a294b1', 'strict-transport-security': 'max-age=31536000; includeSubdomains', 'vary': 'Accept, Authorization, Cookie, X-GitHub-OTP', 'server': 'GitHub.com', 'access-control-allow-origin': '*', 'etag': '"965449c848ed3319d7e028c2a587f414"', 'x-xss-protection': '1; mode=block', 'cache-control': 'private, max-age=60, s-maxage=60', 'date': 'Thu, 16 Aug 2018 23:41:19 GMT', 'x-frame-options': 'deny', 'x-oauth-scopes': 'admin:org_hook, admin:pre_receive_hook, admin:repo_hook, repo', 'content-type': 'application/json; charset=utf-8', 'x-accepted-oauth-scopes': ''} {"name":"master","commit":{"sha":"3548233b67c8ec4cad703ff947fa0ba022df7c66","commit":{"author":{"name":"Garrett Anderson","email":"[email protected]","date":"2018-08-16T18:44:44Z"},"committer":{"name":"GitHub Enterprise","email":"[email protected]","date":"2018-08-16T18:44:44Z"},"message":"Merge pull request #8 from myuser/newfork\n\nwhat","tree":{"sha":"44b3a300094b2ccbbfb79ea7df5f82e627c12b42","url":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/git/trees/44b3a300094b2ccbbfb79ea7df5f82e627c12b42"},"url":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/git/commits/3548233b67c8ec4cad703ff947fa0ba022df7c66","comment_count":0},"url":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/commits/3548233b67c8ec4cad703ff947fa0ba022df7c66","html_url":"https://ghe.workworkwork.com/myuser/cookbook1/commit/3548233b67c8ec4cad703ff947fa0ba022df7c66","comments_url":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/commits/3548233b67c8ec4cad703ff947fa0ba022df7c66/comments","author":{"login":"myuser","id":593,"avatar_url":"https://ghe.workworkwork.com/avatars/u/593?","gravatar_id":"","url":"https://ghe.workworkwork.com/api/v3/users/myuser","html_url":"https://ghe.workworkwork.com/myuser","followers_url":"https://ghe.workworkwork.com/api/v3/users/myuser/followers","following_url":"https://ghe.workworkwork.com/api/v3/users/myuser/following{/other_user}","gists_url":"https://ghe.workworkwork.com/api/v3/users/myuser/gists{/gist_id}","starred_url":"https://ghe.workworkwork.com/api/v3/users/myuser/starred{/owner}{/repo}","subscriptions_url":"https://ghe.workworkwork.com/api/v3/users/myuser/subscriptions","organizations_url":"https://ghe.workworkwork.com/api/v3/users/myuser/orgs","repos_url":"https://ghe.workworkwork.com/api/v3/users/myuser/repos","events_url":"https://ghe.workworkwork.com/api/v3/users/myuser/events{/privacy}","received_events_url":"https://ghe.workworkwork.com/api/v3/users/myuser/received_events","type":"User","site_admin":true},"committer":null,"parents":[{"sha":"067642113fe45ee77160ee28cafc4870f2c06b6a","url":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/commits/067642113fe45ee77160ee28cafc4870f2c06b6a","html_url":"https://ghe.workworkwork.com/myuser/cookbook1/commit/067642113fe45ee77160ee28cafc4870f2c06b6a"},{"sha":"3a9479c605617a9035cd986a4bf77880ac5dde64","url":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/commits/3a9479c605617a9035cd986a4bf77880ac5dde64","html_url":"https://ghe.workworkwork.com/myuser/cookbook1/commit/3a9479c605617a9035cd986a4bf77880ac5dde64"}]},"_links":{"self":"https://ghe.workworkwork.com/api/v3/repos/myuser/cookbook1/branches/master","html":"https://ghe.workworkwork.com/myuser/cookbook1/tree/master"}}

Branch(name="master")

AttributeError: 'Branch' object has no attribute 'protection_url'

لا توجد أي من الطرق أيضًا:

print master.get_required_status_checks()
OUTPUT:
AttributeError: 'Branch' object has no attribute 'get_required_status_checks'

أو هذه السمة:

print master.protection
OUTPUT:
return self._protected.value
AttributeError: 'Branch' object has no attribute '_protected'

الكائن يبدو كالتالي:

print dir(master)
OUTPUT:
['CHECK_AFTER_INIT_FLAG', '_GithubObject__makeSimpleAttribute', '_GithubObject__makeSimpleListAttribute', '_GithubObject__makeTransformedAttribute', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_commit', '_completeIfNeeded', '_headers', '_initAttributes', '_makeBoolAttribute', '_makeClassAttribute', '_makeDatetimeAttribute', '_makeDictAttribute', '_makeDictOfStringsToClassesAttribute', '_makeIntAttribute', '_makeListOfClassesAttribute', '_makeListOfIntsAttribute', '_makeListOfListOfStringsAttribute', '_makeListOfStringsAttribute', '_makeStringAttribute', '_makeTimestampAttribute', '_name', '_parentUrl', '_rawData', '_requester', '_storeAndUseAttributes', '_useAttributes', 'commit', 'contexts', 'enforcement_level', 'etag', 'get__repr__', 'last_modified', 'name', 'protected', 'raw_data', 'raw_headers', 'setCheckAfterInitFlag']

يبدو أن الكائن لم يتم إنشاؤه بشكل صحيح.

bug stale

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

لقد واجهت هذه المشكلة عند تطوير كود حماية الفرع - Repository.get_branches () يقوم بإرجاع قائمة
من الفروع ، لكن GitHub لا يُرجع معلومات كافية عن الطرق الموجودة على الفرع لتكون مفيدة. إذا كنت ترغب في الاستفادة من ميزات الحماية ، يجب عليك الاتصال بـ Repository.get_branch ("الاسم").

ال 11 كومينتر

ما هو إصدار PyGithub الذي تستخدمه؟ لاحظ أنه تم دمج # 790 مؤخرًا فقط ولكن لم يتم إصداره بعد.

أنا أستخدم PyGithub-1.40 و Github Enterprise 2.8.6.
https://github.com/PyGithub/PyGithub/pull/790 يبدو بالتأكيد واعدًا ، على الرغم من أن إصدار GHE الخاص بشركتي قديم بعض الشيء ، لذلك لست متأكدًا مما إذا كانت تغييرات واجهة برمجة التطبيقات تؤثر عليه.

تحديث: في عملية اختبار أحدث ماجستير

يبدو أن الدمج الأخير قد أصلح مشكلات السمات والأساليب المفقودة ، ولكن يبدو أنه غير متوافق مع إصداري من واجهة برمجة التطبيقات:

master = g.get_user("ganderson").get_repo('cookbook1').get_branch('master')
print master.protection_url
master.get_protection()

انتاج:

None
Traceback (most recent call last):
  File "test_pygithub.py", line 12, in <module>
    master.get_protection()
  File "/Users/me/tmp/ghe-python/venv/lib/python2.7/site-packages/github/Branch.py", line 102, in get_protection
    self.protection_url
  File "/Users/me/tmp/ghe-python/venv/lib/python2.7/site-packages/github/Requester.py", line 260, in requestJsonAndCheck
    return self.__check(*self.requestJson(verb, url, parameters, headers, input, self.__customConnection(url)))
  File "/Users/me/tmp/ghe-python/venv/lib/python2.7/site-packages/github/Requester.py", line 276, in __customConnection
    if not url.startswith("/"):
AttributeError: 'NoneType' object has no attribute 'startswith'

يبدو أن هذه مشكلة منفصلة ، لذلك سأغلق هذه التذكرة. شكرا لك.

قم بإثارة قضية جديدة إذا تعطل السيد.

يبدو هذا أيضًا مكسورًا بالنسبة لي عند 1.43.2 على موقع api.github.com القياسي

لدي فرعين محميين ولكن كائنات الفرع لا تحصل على مجموعة protection_url.

لا يتم تعيين عنوان URL للحماية وينتج عنه أخطاء لأي شيء يستخدمه لإنشاء عناوين URL.

[
  {
    "name": "develop",
    "commit": {
      "sha": "XXXX",
      "url": "https://api.github.com/repos/X/X/commits/X"
    }
  },
  {
    "name": "master",
    "commit": {
      "sha": "X",
      "url": "https://api.github.com/repos/X/X/commits/X"
    }
  }
]

إذا قمت بالتجعيد باستخدام branches?protected=true ، فسيتم إرجاع عنوان protection_url في الحمولة.

[
  {
    "name": "develop",
    "commit": {
      "sha": "X",
      "url": "https://api.github.com/repos/X/X/commits/X"
    },
    "protected": true,
    "protection": {
      "enabled": true,
      "required_status_checks": {
        "enforcement_level": "off",
        "contexts": [

        ]
      }
    },
    "protection_url": "https://api.github.com/repos/X/X/branches/develop/protection"
  },
  {
    "name": "master",
    "commit": {
      "sha": "X",
      "url": "https://api.github.com/repos/X/X/commits/X"
    },
    "protected": true,
    "protection": {
      "enabled": true,
      "required_status_checks": {
        "enforcement_level": "off",
        "contexts": [

        ]
      }
    },
    "protection_url": "https://api.github.com/repos/X/X/branches/master/protection"
  }
]

أنا أعيد فتح القضية نيابة عن المعلق الأخير

هل يمكنك محاولة الحصول على فرع واحد get_branch("master") ؟ أعتقد أن المشكلة قد تكون طريقة get_branches لا تدعم المعلمة protected .

لقد قضيت بعض الوقت في تصحيح هذه المشكلة وأثارت خطأً ضد واجهة برمجة تطبيقات GitHub v3.

https://github.com/dear-github/dear-github/issues/325

لقد واجهت هذه المشكلة عند تطوير كود حماية الفرع - Repository.get_branches () يقوم بإرجاع قائمة
من الفروع ، لكن GitHub لا يُرجع معلومات كافية عن الطرق الموجودة على الفرع لتكون مفيدة. إذا كنت ترغب في الاستفادة من ميزات الحماية ، يجب عليك الاتصال بـ Repository.get_branch ("الاسم").

لقد واجهت هذه المشكلة عند تطوير كود حماية الفرع - Repository.get_branches () يقوم بإرجاع قائمة
من الفروع ، لكن GitHub لا يُرجع معلومات كافية عن الطرق الموجودة على الفرع لتكون مفيدة. إذا كنت ترغب في الاستفادة من ميزات الحماية ، يجب عليك الاتصال بـ Repository.get_branch ("الاسم").

شكرًا ، لقد واجهت هذه المشكلة اليوم ، لقد وفر هذا الحل البديل لي الكثير من الوقت والإحباط!

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

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