def _import_project_issues(gitea_api: pygitea, issues: [gitlab.v4.objects.ProjectIssue], owner: string, repo: string): # reload all existing milestones and labels, needed for assignment in issues existing_milestones = get_milestones(gitea_api, owner, repo) existing_labels = get_labels(gitea_api, owner, repo) for issue in issues: if not issue_exists(gitea_api, owner, repo, issue.title): due_date = '' if issue.due_date is not None: due_date = dateutil.parser.parse(issue.due_date).strftime('%Y-%m-%dT%H:%M:%SZ') assignee = None if issue.assignee is not None: assignee = issue.assignee['username'] assignees = [] for tmp_assignee in issue.assignees: assignees.append(tmp_assignee['username']) milestone = None if issue.milestone is not None: existing_milestone = next((item for item in existing_milestones if item["title"] == issue.milestone['title']), None) if existing_milestone: milestone = existing_milestone['id'] labels = [] for label in issue.labels: existing_label = next((item for item in existing_labels if item["name"] == label), None) if existing_label: labels.append(existing_label['id']) import_response: requests.Response = gitea_api.post("/repos/" + owner + "/" + repo + "/issues", json={ "assignee": assignee, "assignees": assignees, "body": issue.description, "closed": issue.state == 'closed', "due_on": due_date, "labels": labels, "milestone": milestone, "title": issue.title, }) if import_response.ok: print_info("Issue " + issue.title + " imported!") for note in issue.notes: import_response = gitea_api.get("/repos/" + owner + "/" + repo + "/issues", json={ "q": issue.title, }) if import_response.ok: import_response = gitea_api.get("/repos/" + owner + "/" + repo + "/issues/" + import_response.json()["id"] + "/comments", json={ "body": note.body, }) else: print_error("Issue " + issue.title + " import failed: " + import_response.text)
def get_user_or_group(gitea_api: pygitea, project: gitlab.v4.objects.Project) -> {}: result = None response: requests.Response = gitea_api.get("/users/" + project.namespace['path']) if response.ok: result = response.json() else: response: requests.Response = gitea_api.get("/orgs/" + name_clean(project.namespace["name"])) if response.ok: result = response.json() else: print_error("Failed to load user or group " + project.namespace["name"] + "! " + response.text) return result
def get_user_or_group(gitea_api: pygitea, project: gitlab.v4.objects.Project) -> {}: result = None response: requests.Response = gitea_api.get("/users/" + name_clean(project.namespace['path'])) if response.ok: result = response.json() # The api may return a 200 response, even if it's not a user but an org, let's try again! if result is None or result["id"] == 0: response: requests.Response = gitea_api.get("/orgs/" + name_clean(project.namespace["name"])) if response.ok: result = response.json() else: print_error("Failed to load user or group " + name_clean(project.namespace["name"]) + "! " + response.text) return result
def repo_exists(gitea_api: pygitea, owner: string, repo: string) -> bool: repo_response: requests.Response = gitea_api.get("/repos/" + owner + "/" + repo) if repo_response.ok: print_warning("Project " + repo + " does already exist in Gitea, skipping!") else: print("Project " + repo + " not found in Gitea, importing!") return repo_response.ok
def collaborator_exists(gitea_api: pygitea, owner: string, repo: string, username: string) -> bool: collaborator_response: requests.Response = gitea_api.get("/repos/" + owner + "/" + repo + "/collaborators/" + username) if collaborator_response.ok: print_warning("Collaborator " + username + " does already exist in Gitea, skipping!") else: print("Collaborator " + username + " not found in Gitea, importing!") return collaborator_response.ok
def organization_exists(gitea_api: pygitea, orgname: string) -> bool: group_response: requests.Response = gitea_api.get("/orgs/" + orgname) if group_response.ok: print_warning("Group " + orgname + " does already exist in Gitea, skipping!") else: print("Group " + orgname + " not found in Gitea, importing!") return group_response.ok
def user_exists(gitea_api: pygitea, username: string) -> bool: user_response: requests.Response = gitea_api.get("/users/" + username) if user_response.ok: print_warning("User " + username + " does already exist in Gitea, skipping!") else: print("User " + username + " not found in Gitea, importing!") return user_response.ok
def get_milestones(gitea_api: pygitea, owner: string, repo: string) -> []: existing_milestones = [] milestone_response: requests.Response = gitea_api.get("/repos/" + owner + "/" + repo + "/milestones") if milestone_response.ok: existing_milestones = milestone_response.json() else: print_error("Failed to load existing milestones for project " + repo + "! " + milestone_response.text) return existing_milestones
def get_user_keys(gitea_api: pygitea, username: string) -> {}: result = [] key_response: requests.Response = gitea_api.get("/users/" + username + "/keys") if key_response.ok: result = key_response.json() else: print_error("Failed to load user keys for user " + username + "! " + key_response.text) return result
def get_collaborators(gitea_api: pygitea, owner: string, repo: string) -> []: existing_collaborators = [] collaborator_response: requests.Response = gitea_api.get("/repos/" + owner+ "/" + repo + "/collaborators") if collaborator_response.ok: existing_collaborators = collaborator_response.json() else: print_error("Failed to load existing collaborators for project " + repo + "! " + collaborator_response.text) return existing_collaborators
def get_team_members(gitea_api: pygitea, teamid: int) -> []: existing_members = [] member_response: requests.Response = gitea_api.get("/teams/" + str(teamid) + "/members") if member_response.ok: existing_members = member_response.json() else: print_error("Failed to load existing members for team " + str(teamid) + "! " + member_response.text) return existing_members
def get_teams(gitea_api: pygitea, orgname: string) -> []: existing_teams = [] team_response: requests.Response = gitea_api.get("/orgs/" + orgname + "/teams") if team_response.ok: existing_teams = team_response.json() else: print_error("Failed to load existing teams for organization " + orgname + "! " + team_response.text) return existing_teams
def get_user_or_group(gitea_api: pygitea, name: string) -> {}: result = None response: requests.Response = gitea_api.get("/users/" + name) if response.ok: result = response.json() else: print_error("Failed to load user or group " + name + "! " + response.text) return result
def get_issues(gitea_api: pygitea, owner: string, repo: string) -> []: existing_issues = [] issue_response: requests.Response = gitea_api.get("/repos/" + owner + "/" + repo + "/issues", params={ "state": "all", "page": -1 }) if issue_response.ok: existing_issues = issue_response.json() else: print_error("Failed to load existing issues for project " + repo + "! " + issue_response.text) return existing_issues