kopia lustrzana https://github.com/Langenfeld/py-gitea
organisations now add ``name`` field consistently with same content as ``username`` to offer the same interface as ``User`` (closes #6)
rodzic
f9b35d5aa4
commit
8a2a19739b
|
@ -29,7 +29,7 @@ class BasicGiteaApiObject:
|
||||||
return {name: getattr(self, name) for name in self.dirty_fields}
|
return {name: getattr(self, name) for name in self.dirty_fields}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse_response(cls, gitea, result):
|
def parse_response(cls, gitea, result) -> "BasicGiteaApiObject":
|
||||||
if "id" in result:
|
if "id" in result:
|
||||||
id = int(result["id"])
|
id = int(result["id"])
|
||||||
else:
|
else:
|
||||||
|
@ -53,23 +53,30 @@ class BasicGiteaApiObject:
|
||||||
parse_func = cls.fields_to_parsers[name]
|
parse_func = cls.fields_to_parsers[name]
|
||||||
value = parse_func(gitea, value)
|
value = parse_func(gitea, value)
|
||||||
if name in cls.patchable_fields:
|
if name in cls.patchable_fields:
|
||||||
prop = property(
|
cls._add_property(name, value, api_object)
|
||||||
(lambda name: lambda self: self.__get_var(name))(name),
|
|
||||||
(lambda name: lambda self, v: self.__set_var(name, v))(name))
|
|
||||||
else:
|
else:
|
||||||
prop = property(
|
cls._add_readonly_property(name,value,api_object)
|
||||||
(lambda name: lambda self: self.__get_var(name))(name))
|
|
||||||
setattr(cls, name, prop)
|
|
||||||
setattr(api_object, "_" + name, value)
|
|
||||||
# add all patchable fields to be watched if changed
|
# add all patchable fields to be watched if changed
|
||||||
for name in cls.patchable_fields:
|
for name in cls.patchable_fields:
|
||||||
if not hasattr(api_object,name):
|
if not hasattr(api_object,name):
|
||||||
prop = property(
|
cls._add_property(name, None, api_object)
|
||||||
(lambda name: lambda self: self.__get_var(name))(name),
|
|
||||||
(lambda name: lambda self, v: self.__set_var(name, v))(name))
|
|
||||||
setattr(cls, name, prop)
|
|
||||||
setattr(api_object, "_" + name, None)
|
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _add_property(cls, name, value, api_object):
|
||||||
|
if not hasattr(api_object, name):
|
||||||
|
prop = property(
|
||||||
|
(lambda name: lambda self: self.__get_var(name))(name),
|
||||||
|
(lambda name: lambda self, v: self.__set_var(name, v))(name))
|
||||||
|
setattr(cls, name, prop)
|
||||||
|
setattr(api_object, "_" + name, value)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _add_readonly_property(cls, name, value, api_object):
|
||||||
|
if not hasattr(api_object, name):
|
||||||
|
prop = property(
|
||||||
|
(lambda name: lambda self: self.__get_var(name))(name))
|
||||||
|
setattr(cls, name, prop)
|
||||||
|
setattr(api_object, "_" + name, value)
|
||||||
|
|
||||||
def __set_var(self, name, i):
|
def __set_var(self, name, i):
|
||||||
if self.deleted:
|
if self.deleted:
|
||||||
|
|
|
@ -32,6 +32,13 @@ class Organization(GiteaApiObject):
|
||||||
def request(cls, gitea, name):
|
def request(cls, gitea, name):
|
||||||
return cls._request(gitea, {"name": name})
|
return cls._request(gitea, {"name": name})
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def parse_response(cls, gitea, result):
|
||||||
|
api_object = super().parse_response(gitea, result)
|
||||||
|
# add "name" field to make this behave similar to users
|
||||||
|
Organization._add_readonly_property("name", result["username"], api_object)
|
||||||
|
return api_object
|
||||||
|
|
||||||
patchable_fields = {"description", "full_name", "location", "visibility", "website"}
|
patchable_fields = {"description", "full_name", "location", "visibility", "website"}
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
|
|
|
@ -18,7 +18,10 @@ class GiteaApiObject(BasicGiteaApiObject):
|
||||||
def _request(cls, gitea, args):
|
def _request(cls, gitea, args):
|
||||||
result = cls._get_gitea_api_object(gitea, args)
|
result = cls._get_gitea_api_object(gitea, args)
|
||||||
api_object = cls.parse_response(gitea, result)
|
api_object = cls.parse_response(gitea, result)
|
||||||
for key, value in args.items(): # hack: not all necessary request args in api result (e.g. repo name in issue)
|
# hack: not all necessary request args in api result (e.g. repo name in issue)
|
||||||
|
for key, value in args.items():
|
||||||
if not hasattr(api_object, key):
|
if not hasattr(api_object, key):
|
||||||
setattr(api_object, key, value)
|
setattr(api_object, key, value)
|
||||||
return api_object
|
return api_object
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -169,6 +169,11 @@ def test_create_issue(instance):
|
||||||
assert issue.title == "TestIssue"
|
assert issue.title == "TestIssue"
|
||||||
assert issue.body == "Body text with this issue"
|
assert issue.body == "Body text with this issue"
|
||||||
|
|
||||||
|
def test_team_get_org(instance):
|
||||||
|
org = Organization.request(instance, test_org)
|
||||||
|
user = instance.get_user_by_name(test_user)
|
||||||
|
teams = user.get_teams()
|
||||||
|
assert org.username == teams[0].organization.name
|
||||||
|
|
||||||
def test_delete_repo_userowned(instance):
|
def test_delete_repo_userowned(instance):
|
||||||
user = User.request(instance, test_user)
|
user = User.request(instance, test_user)
|
||||||
|
@ -177,7 +182,6 @@ def test_delete_repo_userowned(instance):
|
||||||
with pytest.raises(NotFoundException) as e:
|
with pytest.raises(NotFoundException) as e:
|
||||||
Repository.request(instance, test_user, test_repo)
|
Repository.request(instance, test_user, test_repo)
|
||||||
|
|
||||||
|
|
||||||
def test_secundary_email(instance):
|
def test_secundary_email(instance):
|
||||||
SECONDARYMAIL = "secondarytest@test.org" # set up with real email
|
SECONDARYMAIL = "secondarytest@test.org" # set up with real email
|
||||||
sec_user = instance.get_user_by_email(SECONDARYMAIL)
|
sec_user = instance.get_user_by_email(SECONDARYMAIL)
|
||||||
|
|
Ładowanie…
Reference in New Issue