Mercurial > trac2bitbucket
changeset 1:3e7e5534b16e
First version of the bitbucket issue importer
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Sun, 07 Oct 2012 10:36:39 +0000 |
| parents | a6fd4f7b5b3a |
| children | f182c35f8afb |
| files | bbbug.py |
| diffstat | 1 files changed, 88 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bbbug.py Sun Oct 07 10:36:39 2012 +0000 @@ -0,0 +1,88 @@ +import csv +import requests +import json + + +BASE_URL = 'https://api.bitbucket.org/1.0' +AUTH = ('username', 'passowrd') +REPO = 'username/reponame' +TYPES = { + 'defect': 'bug', + 'enhancement': 'enhancement', + 'discussion': 'proposal', + 'note': 'proposal', + 'task': 'task', +} +STATUSES = { + 'new': 'new', + 'accepted': 'open', + 'reopened': 'open', + 'closed': 'resolved', + + 'worksforme': 'wontfix', + 'invalid': 'invalid', + 'duplicate': 'duplicate', + 'wontfix': 'wontfix', + 'fixed': 'resolved', + '': None, + '--': None, +} +PRIORITIES = { + '--': None, + 'High': 'major', + 'Normal': 'minor', + 'Low': 'trivial', +} + + +def create_issue(**kwargs): + url = '/'.join([BASE_URL, 'repositories', REPO, 'issues']) + response = requests.post(url, auth=AUTH, data=kwargs) + + +def get_cmv(what): + url = '/'.join([BASE_URL, 'repositories', REPO, 'issues', what]) + response = requests.get(url, auth=AUTH) + for info in json.loads(response.content): + yield info['name'] + + +def create_cmv(what, name): + url = '/'.join([BASE_URL, 'repositories', REPO, 'issues', what]) + response = requests.post(url, auth=AUTH, data={'name': name}) + + +def import_issues(filename): + cmv = {} + for what in ('components', 'milestones', 'versions'): + cmv[what] = set(get_cmv(what)) + with open(filename) as f: + for (id_, summary, status, owner, type_, priority, milestone, + component, version, resolution, time, changetime, reporter, + keywords, cc, description) in csv.reader(f): + if id_ == 'id': + continue + if component not in cmv['components']: + create_cmv('components', component) + cmv['components'].add(component) + if milestone not in cmv['milestones']: + create_cmv('milestones', milestone) + cmv['milestones'].add(milestone) + if version not in cmv['versions']: + create_cmv('versions', version) + cmv['versions'].add(version) + issue = { + 'status': STATUSES[resolution] or STATUSES[status], + 'priority': PRIORITIES[priority], + 'title': summary, + 'content': description, + 'kind': TYPES[type_], + 'component': component, + 'milestone': milestone, + 'version': version, + 'responsible': None, + } + create_issue(**issue) + + +import_issues('issues.csv')
