forked from fnux/rt2zammad
Rename script
This commit is contained in:
parent
1bb5486c28
commit
43d48c71e2
1 changed files with 0 additions and 0 deletions
96
rt2zammad.py
Executable file
96
rt2zammad.py
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/usr/bin/env python
|
||||
"""
|
||||
Quick and dirty attempt to migrate issues from Request Tracker to Zammad.
|
||||
"""
|
||||
|
||||
import pickle
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from requests.exceptions import HTTPError
|
||||
from zammad_py import ZammadAPI
|
||||
from zammad_py.api import TagList
|
||||
from rt import Rt, ALL_QUEUES
|
||||
|
||||
TEMPLATE = """{
|
||||
"zammad_host": "",
|
||||
"zammad_user": "",
|
||||
"zammad_password": "",
|
||||
"zammad_secure": true,
|
||||
"rt_url": "",
|
||||
"rt_user": "",
|
||||
"rt_pass": ""
|
||||
}
|
||||
"""
|
||||
|
||||
if not os.path.exists('rt2zammad.json'):
|
||||
print('Missing rt2zammad.json!')
|
||||
print('Create one based on following template:')
|
||||
print(TEMPLATE)
|
||||
sys.exit(1)
|
||||
|
||||
with open('rt2zammad.json') as handle:
|
||||
config = json.load(handle)
|
||||
|
||||
target = ZammadAPI(
|
||||
host=config['zammad_host'],
|
||||
username=config['zammad_user'],
|
||||
password=config['zammad_password'],
|
||||
is_secure=config['zammad_secure'],
|
||||
)
|
||||
target.user.me()
|
||||
|
||||
source = Rt(config['rt_url'], config['rt_user'], config['rt_pass'])
|
||||
if not source.login():
|
||||
print('Failed to login to RT!')
|
||||
sys.exit(2)
|
||||
|
||||
if os.path.exists('rt2zammad.cache'):
|
||||
# Load RT from cache
|
||||
with open('rt2zammad.cache', 'rb') as handle:
|
||||
data = pickle.load(handle)
|
||||
users = data['users']
|
||||
queues = data['queues']
|
||||
tickets = data['tickets']
|
||||
|
||||
else:
|
||||
# Load RT from remote
|
||||
users = {}
|
||||
tickets = []
|
||||
queues = set()
|
||||
|
||||
def ensure_user(username):
|
||||
if username not in users:
|
||||
users[username] = source.get_user(username)
|
||||
|
||||
|
||||
for i in range(1, 1000):
|
||||
print('Loading ticket {}'.format(i))
|
||||
ticket = source.get_ticket(i)
|
||||
if ticket is None:
|
||||
break
|
||||
queues.add(ticket['Queue'])
|
||||
ensure_user(ticket['Creator'])
|
||||
ensure_user(ticket['Owner'])
|
||||
history = source.get_history(i)
|
||||
attachments = []
|
||||
for a in source.get_attachments_ids(i):
|
||||
attachment = source.get_attachment(i, a)
|
||||
attachments.append(attachments)
|
||||
ensure_user(attachment['Creator'])
|
||||
tickets.append({
|
||||
'ticket': ticket,
|
||||
'history': history,
|
||||
'attachments': attachments,
|
||||
})
|
||||
with open('rt2zammad.cache', 'wb') as handle:
|
||||
data = pickle.dump({'users': users, 'queues': queues, 'tickets': tickets}, handle)
|
||||
|
||||
# Create tags
|
||||
tag_list = TagList(target)
|
||||
tags = {tag['name'] for tag in tag_list.all()}
|
||||
for queue in queues:
|
||||
queue = queue.lower().split()[0]
|
||||
if queue not in tags:
|
||||
tag_list.create({'name': queue})
|
||||
Loading…
Add table
Add a link
Reference in a new issue