أنا ألعب بهذه المكتبة على أمل أن أتمكن من أتمتة الأشياء على 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']
يبدو أن الكائن لم يتم إنشاؤه بشكل صحيح.
ما هو إصدار 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.
لقد واجهت هذه المشكلة عند تطوير كود حماية الفرع - Repository.get_branches () يقوم بإرجاع قائمة
من الفروع ، لكن GitHub لا يُرجع معلومات كافية عن الطرق الموجودة على الفرع لتكون مفيدة. إذا كنت ترغب في الاستفادة من ميزات الحماية ، يجب عليك الاتصال بـ Repository.get_branch ("الاسم").
لقد واجهت هذه المشكلة عند تطوير كود حماية الفرع - Repository.get_branches () يقوم بإرجاع قائمة
من الفروع ، لكن GitHub لا يُرجع معلومات كافية عن الطرق الموجودة على الفرع لتكون مفيدة. إذا كنت ترغب في الاستفادة من ميزات الحماية ، يجب عليك الاتصال بـ Repository.get_branch ("الاسم").
شكرًا ، لقد واجهت هذه المشكلة اليوم ، لقد وفر هذا الحل البديل لي الكثير من الوقت والإحباط!
تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.
التعليق الأكثر فائدة
لقد واجهت هذه المشكلة عند تطوير كود حماية الفرع - Repository.get_branches () يقوم بإرجاع قائمة
من الفروع ، لكن GitHub لا يُرجع معلومات كافية عن الطرق الموجودة على الفرع لتكون مفيدة. إذا كنت ترغب في الاستفادة من ميزات الحماية ، يجب عليك الاتصال بـ Repository.get_branch ("الاسم").