added ability to create branches

pull/3/head
Langenfeld 2020-10-26 16:41:27 +01:00
rodzic 57034a6756
commit cee702f6f9
3 zmienionych plików z 54 dodań i 19 usunięć

Wyświetl plik

@ -32,7 +32,10 @@ class BasicGiteaApiObject:
@classmethod
def parse_response(cls, gitea, result):
id = int(result["id"])
if "id" in result:
id = int(result["id"])
else:
id = hash(result.items)
# gitea.logger.debug("Found api object of type %s (id: %s)" % (type(cls), id))
api_object = cls(gitea, id=id)
cls._initialize(gitea, api_object, result)

Wyświetl plik

@ -38,22 +38,29 @@ class Organization(GiteaApiObject):
self.gitea.requests_patch(Organization.PATCH_API_OBJECT.format(**args), data=values)
self.dirty_fields = {}
def get_repositories(self) -> List[GiteaApiObject]:
def get_repositories(self) -> List['Repository']:
results = self.gitea.requests_get(Organization.ORG_REPOS_REQUEST % self.username)
return [Repository.parse_response(self.gitea, result) for result in results]
def get_teams(self) -> List[GiteaApiObject]:
def get_repository(self, name) -> 'Repository':
repos = self.get_repositories()
for repo in repos:
if repo.name == name:
return repo
raise NotFoundException("Repository %s not existent in organization." % name)
def get_teams(self) -> List['Team']:
results = self.gitea.requests_get(Organization.ORG_TEAMS_REQUEST % self.username)
return [Team.parse_response(self.gitea, result) for result in results]
def get_team(self, name):
def get_team(self, name) -> 'Team':
teams = self.get_teams()
for team in teams:
if team.name == name:
return team
raise NotFoundException("Team not existent in organization.")
def get_members(self) -> List[GiteaApiObject]:
def get_members(self) -> List['User']:
results = self.gitea.requests_get(Organization.ORG_GET_MEMBERS % self.username)
return [User.parse_response(self.gitea, result) for result in results]
@ -147,6 +154,17 @@ class User(GiteaApiObject):
return results
class Branch(GiteaApiObject):
GET_API_OBJECT = """/repos/%s/%s/branches/%s""" # <owner>, <repo>, <ref>
def __init__(self, gitea, id: int):
super(Branch, self).__init__(gitea, id=id)
@classmethod
def request(cls, gitea, owner, repo, ref):
return cls._request(gitea, {"owner": owner, "repo": repo, "ref": ref})
class Repository(GiteaApiObject):
REPO_IS_COLLABORATOR = """/repos/%s/%s/collaborators/%s""" # <owner>, <reponame>, <username>
GET_API_OBJECT = """/repos/{owner}/{name}""" # <owner>, <reponame>
@ -182,11 +200,21 @@ class Repository(GiteaApiObject):
results = self.gitea.requests_get(Repository.REPO_BRANCHES % (self.owner.username, self.name))
return [Branch.parse_response(self.gitea, result) for result in results]
def get_issues(self) -> List[GiteaApiObject]:
def add_branch(self, create_from: Branch, newname: str) -> 'Commit':
"""Add a branch to the repository"""
# Note: will only work with gitea 1.13 or higher!
data = {
"new_branch_name": newname,
"old_branch_name": create_from.name
}
result = self.gitea.requests_post(Repository.REPO_BRANCHES % (self.owner.username, self.name), data=data)
return Commit.parse_response(self.gitea, result)
def get_issues(self) -> List['Issue']:
"""Get all Issues of this Repository (open and closed)"""
return self.get_issues_state(Issue.open) + self.get_issues_state(Issue.closed)
def get_commits(self) -> List[GiteaApiObject]:
def get_commits(self) -> List['Commit']:
"""Get all the Commits of this Repository."""
try:
results = self.gitea.requests_get_commits(Repository.REPO_COMMITS % (self.owner.username, self.name))
@ -196,7 +224,7 @@ class Repository(GiteaApiObject):
results = []
return [Commit.parse_response(self.gitea, result) for result in results]
def get_issues_state(self, state) -> List[GiteaApiObject]:
def get_issues_state(self, state) -> List['Issue']:
"""Get issues of state Issue.open or Issue.closed of a repository."""
assert state in [Issue.OPENED, Issue.CLOSED]
issues = []
@ -370,17 +398,6 @@ class Issue(GiteaApiObject):
return [comment for comment in allProjectComments if comment.issue_url.endswith("/" + str(self.number))]
class Branch(GiteaApiObject):
GET_API_OBJECT = """/repos/%s/%s/branches/%s""" # <owner>, <repo>, <ref>
def __init__(self, gitea, id: int):
super(Branch, self).__init__(gitea, id=id)
@classmethod
def request(cls, gitea, owner, repo, ref):
return cls._request(gitea, {"owner": owner, "repo": repo, "ref": ref})
class Team(GiteaApiObject):
GET_API_OBJECT = """/teams/{id}""" # <id>
ADD_USER = """/teams/%s/members/%s""" # <id, username to add>

Wyświetl plik

@ -111,6 +111,21 @@ def test_create_repo_orgowned(instance):
assert repo.name == test_repo
assert not repo.private
def test_list_branches(instance):
org = Organization.request(instance, test_org)
repo = org.get_repository(test_repo)
branches = repo.get_branches()
assert len(branches) > 0
master = [b for b in branches if b.name == "master"]
assert len(master) > 0
def test_create_branch(instance):
org = Organization.request(instance, test_org)
repo = org.get_repository(test_repo)
branches = repo.get_branches()
master = [b for b in branches if b.name == "master"]
assert len(master) > 0
repo.add_branch(master[0], "test123")
def test_create_team(instance):
org = Organization.request(instance, test_org)