kopia lustrzana https://github.com/Langenfeld/py-gitea
adding functionality to move repos to other orgs (see #9)
rodzic
bd2371b1b6
commit
8f5f22842b
|
@ -1,7 +1,7 @@
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import List, Tuple, Dict, Sequence, Optional
|
from typing import List, Tuple, Dict, Sequence, Optional, Union
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from httpcache import CachingHTTPAdapter
|
from httpcache import CachingHTTPAdapter
|
||||||
|
@ -236,6 +236,7 @@ class Repository(GiteaApiObject):
|
||||||
REPO_TIMES = """/repos/%s/%s/times""" # <owner>, <reponame>
|
REPO_TIMES = """/repos/%s/%s/times""" # <owner>, <reponame>
|
||||||
REPO_USER_TIME = """/repos/%s/%s/times/%s""" # <owner>, <reponame>, <username>
|
REPO_USER_TIME = """/repos/%s/%s/times/%s""" # <owner>, <reponame>, <username>
|
||||||
REPO_COMMITS = "/repos/%s/%s/commits" # <owner>, <reponame>
|
REPO_COMMITS = "/repos/%s/%s/commits" # <owner>, <reponame>
|
||||||
|
REPO_TRANSFER = "/repos/{owner}/{repo}/transfer"
|
||||||
|
|
||||||
def __init__(self, gitea, id: int):
|
def __init__(self, gitea, id: int):
|
||||||
super(Repository, self).__init__(gitea, id=id)
|
super(Repository, self).__init__(gitea, id=id)
|
||||||
|
@ -400,13 +401,20 @@ class Repository(GiteaApiObject):
|
||||||
url = f"/repos/{self.owner.username}/{self.name}/collaborators/{user_name}"
|
url = f"/repos/{self.owner.username}/{self.name}/collaborators/{user_name}"
|
||||||
self.gitea.requests_delete(url)
|
self.gitea.requests_delete(url)
|
||||||
|
|
||||||
|
def transfer_ownership(self, new_owner: Union["User","Organization"], new_teams: List["Team"]):
|
||||||
|
url = Repository.REPO_TRANSFER.format(owner = self.owner.username, repo = self.name)
|
||||||
|
new_team_ids = [team.id for team in new_teams if isinstance(new_owner,User) or team in new_owner.get_teams()]
|
||||||
|
self.gitea.requests_post(
|
||||||
|
url, data={"new_owner": new_owner.username, "team_ids": new_team_ids}
|
||||||
|
)
|
||||||
|
#TODO: make sure this instance is either updated or discarded
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
self.gitea.requests_delete(
|
self.gitea.requests_delete(
|
||||||
Repository.REPO_DELETE % (self.owner.username, self.name)
|
Repository.REPO_DELETE % (self.owner.username, self.name)
|
||||||
)
|
)
|
||||||
self.deleted = True
|
self.deleted = True
|
||||||
|
|
||||||
|
|
||||||
class Milestone(GiteaApiObject):
|
class Milestone(GiteaApiObject):
|
||||||
GET_API_OBJECT = (
|
GET_API_OBJECT = (
|
||||||
"""/repos/{owner}/{repo}/milestones/{number}""" # <owner, repo, id>
|
"""/repos/{owner}/{repo}/milestones/{number}""" # <owner, repo, id>
|
||||||
|
|
|
@ -207,6 +207,17 @@ def test_delete_repo_orgowned(instance):
|
||||||
Repository.request(instance, test_user, test_repo)
|
Repository.request(instance, test_user, test_repo)
|
||||||
|
|
||||||
|
|
||||||
|
def test_change_repo_ownership(instance):
|
||||||
|
old_org = Organization.request(instance, test_org)
|
||||||
|
user = User.request(instance, test_user)
|
||||||
|
new_org = instance.create_org(user,test_org+"_repomove", "Org for testing moving repositories")
|
||||||
|
new_team = instance.create_team(new_org, test_team + "_repomove", "descr")
|
||||||
|
repo = instance.create_repo(old_org, test_repo+"_repomove", "descr")
|
||||||
|
repo.transfer_ownership(new_org, [new_team])
|
||||||
|
assert len(new_org.get_teams()) > 1
|
||||||
|
assert test_repo + "_repomove" in [team.name for team in new_org.get_repositories()]
|
||||||
|
|
||||||
|
|
||||||
def test_delete_team(instance):
|
def test_delete_team(instance):
|
||||||
org = Organization.request(instance, test_org)
|
org = Organization.request(instance, test_org)
|
||||||
team = org.get_team(test_team)
|
team = org.get_team(test_team)
|
||||||
|
|
Ładowanie…
Reference in New Issue