Pygithub: Objek cabang tidak memiliki sebagian besar atribut dan metode

Dibuat pada 17 Agu 2018  ·  11Komentar  ·  Sumber: PyGithub/PyGithub

Saya bermain-main dengan perpustakaan ini dengan harapan saya dapat mengotomatiskan berbagai hal di Github Enterprise kami. Salah satu hal pertama yang perlu saya lakukan adalah mengatur perlindungan cabang untuk repo kami. Namun, ketika saya memulai objek Cabang dari repositori pengujian (yang sudah memiliki perlindungan cabang yang ditetapkan, ingatlah), satu-satunya atribut yang ditetapkan adalah "nama", dan sebagian besar metode yang tercantum dalam dokumentasi tidak ada di obyek:

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

Hasil:

...
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'

Juga tidak ada metode di sana:

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

Atau atribut ini:

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

Objek terlihat seperti ini:

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']

Sepertinya objek tidak dibuat dengan benar.

bug stale

Komentar yang paling membantu

Saya mengalami masalah ini ketika mengembangkan kode perlindungan cabang -- Repository.get_branches() mengembalikan daftar
cabang, tetapi GitHub tidak mengembalikan informasi yang cukup agar metode di Cabang berguna. Jika Anda ingin menggunakan fitur proteksi, Anda harus memanggil Repository.get_branch('name').

Semua 11 komentar

Versi PyGithub apa yang Anda gunakan? Perhatikan bahwa #790 baru saja digabungkan tetapi belum dirilis.

Saya menggunakan PyGithub-1.40 dan Github Enterprise 2.8.6.
https://github.com/PyGithub/PyGithub/pull/790 jelas terlihat menjanjikan, meskipun versi GHE perusahaan saya sedikit ketinggalan zaman, jadi saya tidak yakin apakah perubahan API memengaruhinya.

UPDATE: dalam proses pengujian master terbaru

Sepertinya penggabungan terbaru memperbaiki masalah atribut dan metode yang hilang, tetapi tampaknya tidak kompatibel dengan versi API saya:

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

KELUARAN:

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'

Ini tampaknya menjadi masalah terpisah, jadi saya akan menutup tiket ini. Terima kasih.

Apakah mengangkat masalah baru jika master istirahat.

Ini juga tampaknya rusak untuk saya di 1.43.2 pada api.github.com standar

Saya memiliki 2 cabang yang dilindungi tetapi objek Cabang tidak pernah mendapatkan set protection_url.

URL perlindungan tidak disetel dan menghasilkan kesalahan untuk apa pun yang menggunakannya untuk membuat 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"
    }
  }
]

Jika saya menggulung menggunakan branches?protected=true maka akan mengembalikan protection_url di payload.

[
  {
    "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"
  }
]

Saya membuka kembali masalah atas nama pemberi komentar terakhir

Bisakah Anda mencoba mendapatkan cabang tunggal dengan get_branch("master") ? Saya pikir masalahnya mungkin metode get_branches ini tidak mendukung parameter protected .

Saya menghabiskan sedikit waktu untuk men-debug masalah ini dan memunculkan bug terhadap GitHub v3 API.

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

Saya mengalami masalah ini ketika mengembangkan kode perlindungan cabang -- Repository.get_branches() mengembalikan daftar
cabang, tetapi GitHub tidak mengembalikan informasi yang cukup agar metode di Cabang berguna. Jika Anda ingin menggunakan fitur proteksi, Anda harus memanggil Repository.get_branch('name').

Saya mengalami masalah ini ketika mengembangkan kode perlindungan cabang -- Repository.get_branches() mengembalikan daftar
cabang, tetapi GitHub tidak mengembalikan informasi yang cukup agar metode di Cabang berguna. Jika Anda ingin menggunakan fitur proteksi, Anda harus memanggil Repository.get_branch('name').

Terima kasih, saya mengalami masalah ini hari ini, solusi ini menyelamatkan saya banyak waktu dan frustrasi!

Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

diegotejadav picture diegotejadav  ·  5Komentar

psychemedia picture psychemedia  ·  5Komentar

hsluoyz picture hsluoyz  ·  3Komentar

PeterJCLaw picture PeterJCLaw  ·  6Komentar

jacquev6 picture jacquev6  ·  3Komentar