Mercurial > trac2bitbucket
changeset 4:38324ef9b854
Rename the script
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Sun, 07 Oct 2012 12:39:10 +0000 |
| parents | ed543297d759 |
| children | fbf8cfcd575d |
| files | bbbug.py trac2bb.py |
| diffstat | 2 files changed, 128 insertions(+), 128 deletions(-) [+] |
line wrap: on
line diff
--- a/bbbug.py Sun Oct 07 12:37:02 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -import csv -import requests -import json -import sqlite3 -import datetime - - -BASE_URL = 'https://api.bitbucket.org/1.0' -AUTH = ('USERNAME', 'PASSWORD') -REPO = 'USERNAME/REPOSITORY' -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, - None: None, -} -PRIORITIES = { - None: None, - '--': 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) - print response.content - return json.loads(response.content)['local_id'] - - -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 create_comment(issue_id, text): - url = '/'.join([BASE_URL, 'repositories', REPO, 'issues', str(issue_id), 'comments']) - response = requests.post(url, auth=AUTH, data={'content': text}) - print response.content - - -def import_issue(summary, status, type_, priority, milestone, component, version, resolution, description, cmv): - 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, - } - return create_issue(**issue) - - -def import_issues_csv(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 - import_issue(summary, status, type_, priority, - milestone, component, version, resolution, - description, cmv) - - -def import_issues_db(filename): - cmv = {} - for what in ('components', 'milestones', 'versions'): - cmv[what] = set(get_cmv(what)) - db = sqlite3.connect(filename) - for (id_, summary, status, type_, priority, milestone, component, - version, resolution, description) in db.execute( - "SELECT id, summary, status, type, priority, milestone, " - "component, version, resolution, description FROM ticket"): - issue_id = import_issue(summary, status, type_, priority, - milestone, component, version, resolution, - description, cmv) - for comment, author, time_ in db.execute( - "SELECT newvalue, author, time FROM ticket_change WHERE " - "ticket=? AND field='comment' ORDER BY oldvalue", (id_,)): - if not comment: - continue - when = datetime.datetime.utcfromtimestamp(time_/1000000) - text = u'%s on %s said:\n\n%s' % (author, when, comment) - create_comment(issue_id, text) - - -import_issues_db('trac.db')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trac2bb.py Sun Oct 07 12:39:10 2012 +0000 @@ -0,0 +1,128 @@ +import csv +import requests +import json +import sqlite3 +import datetime + + +BASE_URL = 'https://api.bitbucket.org/1.0' +AUTH = ('USERNAME', 'PASSWORD') +REPO = 'USERNAME/REPOSITORY' +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, + None: None, +} +PRIORITIES = { + None: None, + '--': 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) + print response.content + return json.loads(response.content)['local_id'] + + +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 create_comment(issue_id, text): + url = '/'.join([BASE_URL, 'repositories', REPO, 'issues', str(issue_id), 'comments']) + response = requests.post(url, auth=AUTH, data={'content': text}) + print response.content + + +def import_issue(summary, status, type_, priority, milestone, component, version, resolution, description, cmv): + 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, + } + return create_issue(**issue) + + +def import_issues_csv(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 + import_issue(summary, status, type_, priority, + milestone, component, version, resolution, + description, cmv) + + +def import_issues_db(filename): + cmv = {} + for what in ('components', 'milestones', 'versions'): + cmv[what] = set(get_cmv(what)) + db = sqlite3.connect(filename) + for (id_, summary, status, type_, priority, milestone, component, + version, resolution, description) in db.execute( + "SELECT id, summary, status, type, priority, milestone, " + "component, version, resolution, description FROM ticket"): + issue_id = import_issue(summary, status, type_, priority, + milestone, component, version, resolution, + description, cmv) + for comment, author, time_ in db.execute( + "SELECT newvalue, author, time FROM ticket_change WHERE " + "ticket=? AND field='comment' ORDER BY oldvalue", (id_,)): + if not comment: + continue + when = datetime.datetime.utcfromtimestamp(time_/1000000) + text = u'%s on %s said:\n\n%s' % (author, when, comment) + create_comment(issue_id, text) + + +import_issues_db('trac.db')
