Convert types to labels.

This commit is contained in:
Dan 2018-01-04 21:02:06 -08:00
parent e727a1c167
commit fdd1e0a94a
2 changed files with 37 additions and 11 deletions

View File

@ -3,7 +3,8 @@
Simple Python script that takes a JSON file for an exported Taiga projects and Simple Python script that takes a JSON file for an exported Taiga projects and
imports its issue into it a Gitea project via API. imports its issue into it a Gitea project via API.
It doesn't have much in the way of error handling. Caveat usor. It doesn't have much in the way of error handling, and is most certainly not
idempotent. Caveat usor.
The script relies on the requests library. The script relies on the requests library.

View File

@ -4,22 +4,33 @@ import json
import requests import requests
import sys import sys
HEADERS = {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
# TODO: Append comments! # TODO: Append comments!
def main(input_path, hostname, project_path, username, password): def main(input_path, hostname, project_path, username, password):
issues = json.load(open(input_path))['issues'] issues = json.load(open(input_path))['issues']
type_to_label_id = {}
# Create labels.
for label_payload in ({'color': '#e11d21', 'name': 'bug'}, {'color': '#009800', 'name': 'question / support'}):
label_id = requests.post(
'https://{}/api/v1/repos/{}/labels'.format(hostname, project_path),
auth=(username, password),
headers=HEADERS,
data=json.dumps(label_payload),
).json()['id']
type_to_label_id[label_payload['name']] = label_id
# Reverse issues so they're actually ordered by ID. # Reverse issues so they're actually ordered by ID.
for issue in reversed(issues): for issue in reversed(issues):
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
payload = { payload = {
'body': issue['description'] + '\n\n---\nImported from Taiga issue {taiga_id}: {status} {type}. Created on {created_date} by {author}.'.format( 'body': issue['description'] + '\n\n---\nImported from Taiga issue {taiga_id} ({status}). Created on {created_date} by {author}.'.format(
taiga_id=issue['ref'], taiga_id=issue['ref'],
status=issue['status'].lower(), status=issue['status'].lower(),
type=issue['type'].lower(),
created_date=issue['created_date'], created_date=issue['created_date'],
author=issue['history'][0]['user'][1], author=issue['history'][0]['user'][1],
), ),
@ -27,13 +38,27 @@ def main(input_path, hostname, project_path, username, password):
'title': issue['subject'], 'title': issue['subject'],
} }
response = requests.post( # Create the issue.
create_response = requests.post(
'https://{}/api/v1/repos/{}/issues'.format(hostname, project_path), 'https://{}/api/v1/repos/{}/issues'.format(hostname, project_path),
auth=(username, password), auth=(username, password),
headers=headers, headers=HEADERS,
data=json.dumps(payload), data=json.dumps(payload),
) ).json()
return # TODO
# Work-around for https://github.com/go-gitea/gitea/issues/3302
issue_url = create_response['url'].replace(str(create_response['id']), str(create_response['number']))
# Add a label for the issue type (if applicable).
label_id = type_to_label_id.get(issue['type'].lower())
if label_id:
requests.post(
issue_url + '/labels',
auth=(username, password),
headers=HEADERS,
data=json.dumps({'labels': [label_id]}),
)
return # TODO: remove me