pygithub
Advanced tools
@@ -214,3 +214,3 @@ ############################ Copyrights and license ############################ | ||
| "type", | ||
| "Enterprise", | ||
| "User", | ||
| attributes["owner"], | ||
@@ -217,0 +217,0 @@ (github.NamedUser.NamedUser, "User"), |
@@ -373,9 +373,19 @@ ############################ Copyrights and license ############################ | ||
| def _makeUnionClassAttributeFromTypeName( | ||
| self, type_name: str | None, value: Any, *class_and_names: tuple[type[T_gh], str] | ||
| self, type_name: str | None, fallback_type: str | None, value: Any, *class_and_names: tuple[type[T_gh], str] | ||
| ) -> Attribute[T_gh]: | ||
| if value is None or type_name is None: | ||
| return _ValuedAttribute(None) # type: ignore | ||
| fallback_class = None | ||
| for klass, name in class_and_names: | ||
| if type_name == name: | ||
| return self._makeClassAttribute(klass, value) | ||
| if fallback_type == name: | ||
| fallback_class = klass | ||
| if fallback_type is not None: | ||
| if fallback_class is None: | ||
| # this is misconfiguration in PyGithub code, not a user's fault | ||
| raise ValueError( | ||
| f"Fallback type {fallback_type} is not among classes and names: {[name for klass, name in class_and_names]}" | ||
| ) | ||
| return self._makeClassAttribute(fallback_class, value) | ||
| return _BadAttribute(value, type) # type: ignore | ||
@@ -392,3 +402,5 @@ | ||
| return _ValuedAttribute(None) # type: ignore | ||
| return self._makeUnionClassAttributeFromTypeName(value.get(type_key, default_type), value, *class_and_names) | ||
| return self._makeUnionClassAttributeFromTypeName( | ||
| value.get(type_key, default_type), default_type, value, *class_and_names | ||
| ) | ||
@@ -406,3 +418,3 @@ def _makeUnionClassAttributeFromTypeKeyAndValueKey( | ||
| return self._makeUnionClassAttributeFromTypeName( | ||
| value.get(type_key, default_type), value.get(value_key), *class_and_names | ||
| value.get(type_key, default_type), default_type, value.get(value_key), *class_and_names | ||
| ) | ||
@@ -409,0 +421,0 @@ |
+1
-1
| Metadata-Version: 2.4 | ||
| Name: PyGithub | ||
| Version: 2.8.0 | ||
| Version: 2.8.1 | ||
| Summary: Use the full Github API v3 | ||
@@ -5,0 +5,0 @@ Author-email: Vincent Jacques <vincent@vincent-jacques.net> |
| Metadata-Version: 2.4 | ||
| Name: PyGithub | ||
| Version: 2.8.0 | ||
| Version: 2.8.1 | ||
| Summary: Use the full Github API v3 | ||
@@ -5,0 +5,0 @@ Author-email: Vincent Jacques <vincent@vincent-jacques.net> |
+103
-0
@@ -27,4 +27,8 @@ ############################ Copyrights and license ############################ | ||
| from __future__ import annotations | ||
| import unittest | ||
| from datetime import datetime, timedelta, timezone | ||
| from typing import Any | ||
| from unittest import mock | ||
@@ -37,2 +41,4 @@ import github.Repository | ||
| gho = Framework.github.GithubObject | ||
| ghusr = Framework.github.NamedUser | ||
| ghorg = Framework.github.Organization | ||
@@ -57,2 +63,91 @@ | ||
| def testMakeUnionClassAttributeFromTypeName(self): | ||
| req = mock.Mock(is_not_lazy=False) | ||
| obj = TestingClass(req, {}, {}) | ||
| data = {"login": "login"} | ||
| class_and_names = [(ghusr.NamedUser, "User"), (ghorg.Organization, "Organization")] | ||
| def make(type_name: str | None, fallback_type: str | None = "User"): | ||
| return obj._makeUnionClassAttributeFromTypeName(type_name, fallback_type, data, *class_and_names) | ||
| none = make(None) | ||
| usr = make("User") | ||
| org = make("Organization") | ||
| unknown = make("Unknown") | ||
| bad = make("Unknown", None) | ||
| self.assertIsInstance(none, gho._ValuedAttribute) | ||
| self.assertIsInstance(usr, gho._ValuedAttribute) | ||
| self.assertIsInstance(org, gho._ValuedAttribute) | ||
| self.assertIsInstance(unknown, gho._ValuedAttribute) | ||
| self.assertIsInstance(bad, gho._BadAttribute) | ||
| self.assertIsNone(none.value) | ||
| self.assertIsInstance(usr.value, ghusr.NamedUser) | ||
| self.assertIsInstance(org.value, ghorg.Organization) | ||
| self.assertIsInstance(unknown.value, ghusr.NamedUser) | ||
| self.assertEqual(str(usr.value), 'NamedUser(login="login")') | ||
| self.assertEqual(str(org.value), 'Organization(login="login")') | ||
| self.assertEqual(str(unknown.value), 'NamedUser(login="login")') | ||
| def testMakeUnionClassAttributeFromTypeKey(self): | ||
| req = mock.Mock(is_not_lazy=False) | ||
| obj = TestingClass(req, {}, {}) | ||
| class_and_names = [(ghusr.NamedUser, "User"), (ghorg.Organization, "Organization")] | ||
| def make(data: dict[str, Any]): | ||
| return obj._makeUnionClassAttributeFromTypeKey("type", "User", data, *class_and_names) | ||
| default = make({"login": "login"}) | ||
| usr = make({"login": "login", "type": "User"}) | ||
| org = make({"login": "login", "type": "Organization"}) | ||
| unknown = make({"login": "login", "type": "Unknown"}) | ||
| self.assertIsInstance(default, gho._ValuedAttribute) | ||
| self.assertIsInstance(usr, gho._ValuedAttribute) | ||
| self.assertIsInstance(org, gho._ValuedAttribute) | ||
| self.assertIsInstance(unknown, gho._ValuedAttribute) | ||
| self.assertIsInstance(default.value, ghusr.NamedUser) | ||
| self.assertIsInstance(usr.value, ghusr.NamedUser) | ||
| self.assertIsInstance(org.value, ghorg.Organization) | ||
| self.assertIsInstance(unknown.value, ghusr.NamedUser) | ||
| self.assertEqual(str(default.value), 'NamedUser(login="login")') | ||
| self.assertEqual(str(usr.value), 'NamedUser(login="login")') | ||
| self.assertEqual(str(org.value), 'Organization(login="login")') | ||
| self.assertEqual(str(unknown.value), 'NamedUser(login="login")') | ||
| def testMakeUnionClassAttributeFromTypeKeyAndValueKey(self): | ||
| req = mock.Mock(is_not_lazy=False) | ||
| obj = TestingClass(req, {}, {}) | ||
| class_and_names = [(ghusr.NamedUser, "User"), (ghorg.Organization, "Organization")] | ||
| def make(data: dict[str, Any]): | ||
| return obj._makeUnionClassAttributeFromTypeKeyAndValueKey("type", "data", "User", data, *class_and_names) | ||
| default = make({"data": {"login": "login"}}) | ||
| usr = make({"data": {"login": "login"}, "type": "User"}) | ||
| org = make({"data": {"login": "login"}, "type": "Organization"}) | ||
| unknown = make({"data": {"login": "login"}, "type": "Unknown"}) | ||
| self.assertIsInstance(default, gho._ValuedAttribute) | ||
| self.assertIsInstance(usr, gho._ValuedAttribute) | ||
| self.assertIsInstance(org, gho._ValuedAttribute) | ||
| self.assertIsInstance(unknown, gho._ValuedAttribute) | ||
| self.assertIsInstance(default.value, ghusr.NamedUser) | ||
| self.assertIsInstance(usr.value, ghusr.NamedUser) | ||
| self.assertIsInstance(org.value, ghorg.Organization) | ||
| self.assertIsInstance(unknown.value, ghusr.NamedUser) | ||
| self.assertEqual(str(default.value), 'NamedUser(login="login")') | ||
| self.assertEqual(str(usr.value), 'NamedUser(login="login")') | ||
| self.assertEqual(str(org.value), 'Organization(login="login")') | ||
| self.assertEqual(str(unknown.value), 'NamedUser(login="login")') | ||
| def testMakeDatetimeAttribute(self): | ||
@@ -151,1 +246,9 @@ for value, expected in [ | ||
| self.assertIsNone(e.exception.transformation_exception) | ||
| class TestingClass(gho.NonCompletableGithubObject): | ||
| def _initAttributes(self) -> None: | ||
| pass | ||
| def _useAttributes(self, attributes: Any) -> None: | ||
| pass |
Sorry, the diff of this file is too big to display
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
21030008
0.03%60630
0.15%