~launchpad/trac-launchpad-migrator/trunk

« back to all changes in this revision

Viewing changes to migrate.py

  • Committer: Graham Binns
  • Date: 2009-06-16 15:34:52 UTC
  • Revision ID: graham@canonical.com-20090616153452-a6t0bd26e0ta8fln
Removed trailing whitespaces.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
    username = StringAttribute(name='name')
43
43
    email = StringAttribute()
44
44
    text = TextNode(main=True)
45
 
    
 
45
 
46
46
    def set(self, nodeName, val):
47
47
        if nodeName == '_XO_name':
48
48
            val = val.lower()
54
54
 
55
55
class Reporter(Person):
56
56
    _name = 'reporter'
57
 
    
 
57
 
58
58
class Assignee(Person):
59
59
    _name = 'assignee'
60
60
 
83
83
class Subscriptions(XMLObject):
84
84
    _name = 'subscriptions'
85
85
    persons = ListNode('Subscriber')
86
 
    
 
86
 
87
87
class Bug(XMLObject):
88
88
    _name = 'bug'
89
89
    id = StringAttribute()
112
112
    return time.strftime("%Y-%m-%dT%H:%M:%SZ", date)
113
113
 
114
114
class TracDb:
115
 
    
 
115
 
116
116
    def __init__(self, filename, attachments_dir):
117
117
        self._db = db_backend.DBBackend(db_backend='sqlite3',
118
118
                                        database=filename)
119
119
        self._db.connect()
120
120
        self._users = {}
121
121
        self._attachments_dir = attachments_dir
122
 
        
 
122
 
123
123
        self._known_users_by_email = {}
124
124
        for username, data in KNOWN_USERS.iteritems():
125
125
            email = data['email']
127
127
            new_data = {'name': name, 'username': username,
128
128
                        'email': email}
129
129
            self._known_users_by_email[email] = new_data
130
 
        
 
130
 
131
131
    def get_user(self, username):
132
132
        user = {}
133
133
        is_email = username.find('@') > -1
142
142
                rows = self._db.sql_execute(query, email)
143
143
                if len(rows) > 0:
144
144
                    username = rows[0].username
145
 
                    
 
145
 
146
146
        if not user:
147
147
            try:
148
148
                user = KNOWN_USERS[username]
162
162
                            user['name'] = row.value
163
163
 
164
164
                    self._users[username] = user
165
 
            
 
165
 
166
166
        return user
167
167
 
168
168
    def get_tickets(self, count=None):
192
192
        for row in rows:
193
193
            # TODO: read file
194
194
            filename = urllib2.quote(row['filename'].encode('utf8'))
195
 
            
 
195
 
196
196
            attachment_filename = os.path.join(self._attachments_dir,
197
197
                                               str(ticket_id),
198
198
                                               filename)
199
 
            
 
199
 
200
200
            data = open(attachment_filename).read()
201
201
            row['data']  = data
202
 
            
 
202
 
203
203
        return rows
204
204
 
205
205
def convert_status_importance(ticket):
255
255
        if m:
256
256
            text = m.group(1)
257
257
            break
258
 
        
 
258
 
259
259
    return text
260
260
 
261
261
def create_bug(db, trac_ticket):
268
268
    milestone = trac_ticket['milestone']
269
269
    owners = trac_ticket['owner']
270
270
    subscribers = trac_ticket['cc']
271
 
    
 
271
 
272
272
    trac_reporter = db.get_user(reporter)
273
273
    #reporter_email = trac_reporter.get('email', 'foo@bar.com')
274
274
    reporter_email = trac_reporter['email']
275
275
    if not reporter_email:
276
276
        print '[ticket %s] pb with reporter %s' % (bug_id, reporter)
277
277
        return None
278
 
    
 
278
 
279
279
    reporter_name = trac_reporter.get('name', 'John Doe')
280
280
    lp_reporter = Reporter(username=reporter,
281
281
                           email=reporter_email,
282
282
                           text=reporter_name)
283
 
                           
 
283
 
284
284
    status, importance = convert_status_importance(trac_ticket)
285
285
 
286
286
    assignee = None
293
293
                print '[ticket %s] pb with owner %s' % (bug_id,
294
294
                                                        owner)
295
295
                return None
296
 
            
 
296
 
297
297
            owner_name = trac_owner.get('name', 'John Doe')
298
298
 
299
299
            assignee = Assignee(username=owner, email=owner_email,
313
313
                                             email=person_email,
314
314
                                             text=trac_person['name']))
315
315
    subscriptions = Subscriptions(persons=lp_subscribers)
316
 
            
317
 
    contents = dict(id=str(bug_id), 
 
316
 
 
317
    contents = dict(id=str(bug_id),
318
318
                    datecreated=datecreated,
319
319
                    nickname="elisa-%s" % bug_id,
320
320
                    title=title,
344
344
            if milestone:
345
345
                milestone = "elisa-%s" % milestone
346
346
                contents['milestone'] = milestone
347
 
        
 
347
 
348
348
    bug = Bug(**contents)
349
 
    
 
349
 
350
350
    sender = Sender(username=reporter, email=reporter_email,
351
351
                    text=reporter_name)
352
352
    first_comment = Comment(sender=sender, date=datecreated,
388
388
                                mimetype=mime,
389
389
                                contents=contents)
390
390
        lp_comment.attachments.append(attachment)
391
 
        
 
391
 
392
392
    return lp_comment
393
393
 
394
394
def main(args):
400
400
        count = args[3]
401
401
    except IndexError:
402
402
        count = None
403
 
    
 
403
 
404
404
    bugs = LaunchpadBugs()
405
405
 
406
406
    db = TracDb(trac_db, attachments_dir)
408
408
        bug = create_bug(db, ticket)
409
409
        if not bug:
410
410
            continue
411
 
        
 
411
 
412
412
        # comments
413
413
        for comment in db.get_comments(ticket):
414
414
            lp_comment = create_comment(db, comment)
420
420
            lp_comment = create_comment(db, attachment)
421
421
            if lp_comment:
422
422
                bug.comments.append(lp_comment)
423
 
                    
 
423
 
424
424
        bugs.bugs.append(bug)
425
425
 
426
426
    xml = bugs.toXml()
428
428
    fd = open(filename, 'w')
429
429
    fd.write(xml)
430
430
    fd.close()
431
 
    
 
431
 
432
432
    return 0
433
433
 
434
434
if __name__ == '__main__':