Pygithub: Dem Verzweigungsobjekt fehlen die meisten Attribute und Methoden

Erstellt am 17. Aug. 2018  ·  11Kommentare  ·  Quelle: PyGithub/PyGithub

Ich spiele mit dieser Bibliothek herum in der Hoffnung, dass ich Dinge auf unserem Github Enterprise automatisieren kann. Eines der ersten Dinge, die ich tun muss, ist, den Branch-Schutz für unsere Repositorys festzulegen. Wenn ich jedoch ein Branch-Objekt aus einem Test-Repository initiiere (das bereits über einen Branch-Schutz verfügt, wohlgemerkt), ist das einzige zugewiesene Attribut "name", und die meisten der in der Dokumentation aufgeführten Methoden existieren nicht auf dem Objekt:

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

Die Ausgabe:

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

Es gibt dort auch keine der Methoden:

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

Oder dieses Attribut:

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

Das Objekt sieht so aus:

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

Es sieht so aus, als ob das Objekt nicht richtig erstellt wurde.

bug stale

Hilfreichster Kommentar

Ich bin auf dieses Problem gestoßen, als ich den Verzweigungsschutzcode entwickelt habe -- Repository.get_branches() gibt eine Liste zurück
von Branches, aber GitHub gibt nicht genügend Informationen zurück, damit die Methoden auf Branch nützlich sind. Wenn Sie die Schutzfunktionen nutzen möchten, müssen Sie Repository.get_branch('name') aufrufen.

Alle 11 Kommentare

Welche PyGithub-Version verwendest du? Beachten Sie, dass #790 erst vor kurzem zusammengeführt, aber noch nicht veröffentlicht wurde.

Ich verwende PyGithub-1.40 und Github Enterprise 2.8.6.
https://github.com/PyGithub/PyGithub/pull/790 sieht definitiv vielversprechend aus, obwohl die GHE-Version meines Unternehmens etwas veraltet ist, daher bin ich mir nicht sicher, ob die API-Änderungen sich darauf auswirken.

UPDATE: testet gerade den neuesten Master

Sieht so aus, als ob die neueste Zusammenführung die Probleme fehlender Attribute und Methoden behoben hat, aber sie scheint mit meiner Version der API nicht kompatibel zu sein:

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

AUSGANG:

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'

Dies scheint ein separates Problem zu sein, daher schließe ich dieses Ticket. Dankeschön.

Sprechen Sie ein neues Problem an, wenn der Master kaputt geht.

Dies scheint mir auch auf 1.43.2 auf Standard api.github.com kaputt zu sein

Ich habe 2 Verzweigungen, die geschützt sind, aber die Verzweigungsobjekte erhalten nie den Schutz_url-Satz.

Die Schutz-URL wird nicht festgelegt und führt zu Fehlern für alles, was sie zum Erstellen von URLs verwendet.

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

Wenn ich mit branches?protected=true curle, wird die protection_url in der Nutzlast zurückgegeben.

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

Ich öffne das Thema im Namen des letzten Kommentators erneut

Können Sie versuchen, einen einzelnen Zweig mit get_branch("master") ? Ich denke , das Problem könnte der Strom seinen get_branches Methode nicht die Unterstützung protected Parameter.

Ich habe ein wenig Zeit damit verbracht, dieses Problem zu debuggen und einen Fehler gegen die GitHub v3-API gemeldet.

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

Ich bin auf dieses Problem gestoßen, als ich den Verzweigungsschutzcode entwickelt habe -- Repository.get_branches() gibt eine Liste zurück
von Branches, aber GitHub gibt nicht genügend Informationen zurück, damit die Methoden auf Branch nützlich sind. Wenn Sie die Schutzfunktionen nutzen möchten, müssen Sie Repository.get_branch('name') aufrufen.

Ich bin auf dieses Problem gestoßen, als ich den Verzweigungsschutzcode entwickelt habe -- Repository.get_branches() gibt eine Liste zurück
von Branches, aber GitHub gibt nicht genügend Informationen zurück, damit die Methoden auf Branch nützlich sind. Wenn Sie die Schutzfunktionen nutzen möchten, müssen Sie Repository.get_branch('name') aufrufen.

Danke, ich bin heute auf dieses Problem gestoßen, dieser Workaround hat mir viel Zeit und Frustration erspart!

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen