Mercurial > p > roundup > code
annotate scripts/import_sf.py @ 3537:d819ff1b3116
*** empty log message ***
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 03 Feb 2006 05:09:33 +0000 |
| parents | 00a7983b4666 |
| children | 7f7902af7864 |
| rev | line source |
|---|---|
|
3536
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
1 ''' Import tracker data from Sourceforge.NET |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
2 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
3 This script needs four steps to work: |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
4 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
5 1. Export the project XML data using the admin web interface at sf.net |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
6 2. Run the file fetching (these are not included in the XML): |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
7 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
8 import_sf.py files <path to XML> <path to files dir> |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
9 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
10 this will place all the downloaded files in the files dir by file id. |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
11 3. Convert the sf.net XML to Roundup "export" format: |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
12 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
13 import_sf.py import <tracker home> <path to XML> <path to files dir> |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
14 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
15 this will generate a directory "/tmp/imported" which contains the |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
16 data to be imported into a Roundup tracker. |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
17 4. Import the data: |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
18 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
19 roundup-admin -i <tracker home> import /tmp/imported |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
20 |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
21 And you're done! |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
22 ''' |
|
00a7983b4666
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3534
diff
changeset
|
23 |
|
3537
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
24 import sys, sets, os, csv, time, urllib2, httplib, mimetypes, urlparse |
|
3534
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 from elementtree import ElementTree |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 from roundup import instance, hyperdb, date, support, password |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 |
|
3537
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
29 DL_URL = 'http://sourceforge.net/tracker/download.php?group_id=%(group_id)s&atid=%(atid)s&aid=%(aid)s' |
|
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
30 |
|
3534
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 def get_url(aid): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 """ so basically we have to jump through hoops, given an artifact id, to |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 figure what the URL should be to access that artifact, and hence any |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 attached files.""" |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 conn = httplib.HTTPConnection("sourceforge.net") |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 conn.request("GET", "/support/tracker.php?aid=%s"%aid) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 response = conn.getresponse() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 assert response.status == 302, 'response code was %s'%response.status |
|
3537
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
39 location = response.getheader('location') |
|
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
40 query = urlparse.urlparse(response.getheader('location'))[-2] |
|
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
41 info = dict([param.split('=') for param in query.split('&')]) |
|
d819ff1b3116
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3536
diff
changeset
|
42 return DOWNLOAD_TEMPLATE%info |
|
3534
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 def fetch_files(xml_file, file_dir): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 """ Fetch files referenced in the xml_file into the dir file_dir. """ |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 root = ElementTree.parse(xml_file).getroot() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 to_fetch = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 deleted = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 for artifact in root.find('artifacts'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 for field in artifact.findall('field'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 if field.get('name') == 'artifact_id': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 aid = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 for field in artifact.findall('field'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 if field.get('name') != 'artifact_history': continue |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 for event in field.findall('history'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 d = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 for field in event.findall('field'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 d[field.get('name')] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 if d['field_name'] == 'File Added': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 fid = d['old_value'].split(':')[0] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 to_fetch.add((aid, fid)) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 if d['field_name'] == 'File Deleted': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 fid = d['old_value'].split(':')[0] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 deleted.add((aid, fid)) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 to_fetch = to_fetch - deleted |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 got = sets.Set(os.listdir(file_dir)) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 to_fetch = to_fetch - got |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 # load cached urls (sigh) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 urls = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 if os.path.exists(os.path.join(file_dir, 'urls.txt')): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 for line in open(os.path.join(file_dir, 'urls.txt')): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 aid, url = line.strip().split() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 urls[aid] = url |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 for aid, fid in Progress('Fetching files', list(to_fetch)): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 if fid in got: continue |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 if not urls.has_key(aid): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 urls[aid] = get_url(aid) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 f = open(os.path.join(file_dir, 'urls.txt'), 'a') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 f.write('%s %s\n'%(aid, urls[aid])) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 f.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 url = urls[aid] + '&file_id=' + fid |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 f = urllib2.urlopen(url) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 data = f.read() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 n = open(os.path.join(file_dir, fid), 'w') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 n.write(data) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 f.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 n.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 def import_xml(tracker_home, xml_file, file_dir): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 """ Generate Roundup tracker import files based on the tracker schema, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 sf.net xml export and downloaded files from sf.net. """ |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 tracker = instance.open(tracker_home) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 db = tracker.open('admin') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 resolved = db.status.lookup('resolved') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 unread = db.status.lookup('unread') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 chatting = db.status.lookup('unread') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 critical = db.priority.lookup('critical') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 urgent = db.priority.lookup('urgent') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 bug = db.priority.lookup('bug') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 feature = db.priority.lookup('feature') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 wish = db.priority.lookup('wish') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 adminuid = db.user.lookup('admin') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 anonuid = db.user.lookup('anonymous') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 root = ElementTree.parse(xml_file).getroot() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 def to_date(ts): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 return date.Date(time.gmtime(float(ts))) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 # parse out the XML |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 artifacts = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 categories = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 users = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 add_files = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 remove_files = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 for artifact in root.find('artifacts'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 d = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 op = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 artifacts.append(d) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 for field in artifact.findall('field'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 name = field.get('name') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 if name == 'artifact_messages': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 for message in field.findall('message'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 l = d.setdefault('messages', []) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 m = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 l.append(m) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 for field in message.findall('field'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 name = field.get('name') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 if name == 'adddate': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 m[name] = to_date(field.text) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
135 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 m[name] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 if name == 'user_name': users.add(field.text) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 elif name == 'artifact_history': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 for event in field.findall('history'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 l = d.setdefault('history', []) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 e = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
142 l.append(e) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
143 for field in event.findall('field'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
144 name = field.get('name') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
145 if name == 'entrydate': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 e[name] = to_date(field.text) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
148 e[name] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
149 if name == 'mod_by': users.add(field.text) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
150 if e['field_name'] == 'File Added': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
151 add_files.add(e['old_value'].split(':')[0]) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
152 elif e['field_name'] == 'File Deleted': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
153 remove_files.add(e['old_value'].split(':')[0]) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
154 elif name == 'details': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 op['body'] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 elif name == 'submitted_by': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 op['user_name'] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 d[name] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
159 users.add(field.text) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 elif name == 'open_date': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
161 thedate = to_date(field.text) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 op['adddate'] = thedate |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 d[name] = thedate |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 d[name] = field.text |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
167 categories.add(d['category']) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
168 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
169 if op.has_key('body'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 l = d.setdefault('messages', []) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 l.insert(0, op) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
172 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
173 add_files -= remove_files |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
174 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 # create users |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
176 userd = {'nobody': '2'} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
177 users.remove('nobody') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
178 data = [ |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
179 {'id': '1', 'username': 'admin', 'password': password.Password('admin'), |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
180 'roles': 'Admin', 'address': 'richard@python.org'}, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 {'id': '2', 'username': 'anonymous', 'roles': 'Anonymous'}, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
182 ] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
183 for n, user in enumerate(list(users)): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 userd[user] = n+3 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 data.append({'id': str(n+3), 'username': user, 'roles': 'User', |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 'address': '%s@users.sourceforge.net'%user}) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 write_csv(db.user, data) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 users=userd |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
189 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
190 # create categories |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 categoryd = {'None': None} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
192 categories.remove('None') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
193 data = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
194 for n, category in enumerate(list(categories)): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 categoryd[category] = n |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
196 data.append({'id': str(n), 'name': category}) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
197 write_csv(db.keyword, data) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 categories = categoryd |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
199 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
200 # create issues |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
201 issue_data = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 file_data = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
203 message_data = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
204 issue_journal = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 message_id = 0 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
206 for artifact in artifacts: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 d = {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
208 d['id'] = artifact['artifact_id'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 d['title'] = artifact['summary'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
210 d['assignedto'] = users[artifact['assigned_to']] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 if d['assignedto'] == '2': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 d['assignedto'] = None |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 d['creation'] = artifact['open_date'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
214 activity = artifact['open_date'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 d['creator'] = users[artifact['submitted_by']] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 actor = d['creator'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 if categories[artifact['category']]: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
218 d['topic'] = [categories[artifact['category']]] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 issue_journal.append(( |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
220 d['id'], d['creation'].get_tuple(), d['creator'], "'create'", {} |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
221 )) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
222 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 p = int(artifact['priority']) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
224 if artifact['artifact_type'] == 'Feature Requests': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
225 if p > 3: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
226 d['priority'] = feature |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
227 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
228 d['priority'] = wish |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
229 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
230 if p > 7: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
231 d['priority'] = critical |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
232 elif p > 5: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
233 d['priority'] = urgent |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
234 elif p > 3: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
235 d['priority'] = bug |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
236 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
237 d['priority'] = feature |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
238 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
239 s = artifact['status'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
240 if s == 'Closed': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
241 d['status'] = resolved |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
242 elif s == 'Deleted': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
243 d['status'] = resolved |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
244 d['is retired'] = True |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
245 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 d['status'] = unread |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
247 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
248 messages = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
249 nosy = sets.Set() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
250 for message in artifact.get('messages', []): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
251 message_id += 1 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
252 authid = users[message['user_name']] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
253 body = convert_message(message['body'], message_id) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 if not body: continue |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 m = {'content': body, 'author': authid, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 'date': message['adddate'], 'id': str(message_id), |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
257 'creation': message['adddate'], } |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
258 message_data.append(m) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 messages.append(message_id) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 if authid not in (None, '2'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 nosy.add(authid) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 activity = message['adddate'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
263 actor = authid |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 if d['status'] == unread: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 d['status'] = chatting |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 d['messages'] = messages |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
267 d['nosy'] = list(nosy) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 files = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
270 for event in artifact.get('history', []): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 if event['field_name'] == 'File Added': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 fid, name = event['old_value'].split(':') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
273 if fid in add_files: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
274 files.append(fid) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
275 name = name.strip() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
276 try: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
277 f = open(os.path.join(file_dir, fid)) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
278 content = f.read() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 f.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
280 except: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
281 content = 'content missing' |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 file_data.append({ |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 'id': fid, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
284 'creation': event['entrydate'], |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
285 'creator': users[event['mod_by']], |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
286 'name': name, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
287 'type': mimetypes.guess_type(name)[0], |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
288 'content': content, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
289 }) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
290 continue |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
291 elif event['field_name'] == 'close_date': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
292 action = "'set'" |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
293 info = { 'status': 'unread' } |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
294 elif event['field_name'] == 'summary': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
295 action = "'set'" |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
296 info = { 'title': event['old_value'] } |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
297 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
298 continue |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
299 row = [ d['id'], event['entrydate'].get_tuple(), |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
300 users[event['mod_by']], action, info ] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
301 if event['entrydate'] > activity: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
302 activity = event['entrydate'] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
303 issue_journal.append(row) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
304 d['files'] = files |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 d['activity'] = activity |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
307 d['actor'] = actor |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
308 issue_data.append(d) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
309 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
310 write_csv(db.issue, issue_data) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 write_csv(db.msg, message_data) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
312 write_csv(db.file, file_data) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
313 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
314 f = open('/tmp/imported/issue-journals.csv', 'w') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
315 writer = csv.writer(f, colon_separated) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
316 writer.writerows(issue_journal) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
317 f.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
318 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
319 def convert_message(content, id): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
320 ''' Strip off the useless sf message header crap ''' |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
321 if content[:14] == 'Logged In: YES': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
322 return '\n'.join(content.splitlines()[3:]).strip() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
323 return content |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
324 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
325 class colon_separated(csv.excel): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
326 delimiter = ':' |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
327 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
328 today = date.Date('.') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
329 def write_csv(klass, data): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
330 props = klass.getprops() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
331 if not os.path.exists('/tmp/imported'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
332 os.mkdir('/tmp/imported') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
333 f = open('/tmp/imported/%s.csv'%klass.classname, 'w') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
334 writer = csv.writer(f, colon_separated) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
335 propnames = klass.export_propnames() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
336 propnames.append('is retired') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
337 writer.writerow(propnames) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
338 for entry in data: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
339 row = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
340 for name in propnames: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
341 if name == 'is retired': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
342 continue |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
343 prop = props[name] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
344 if entry.has_key(name): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
345 if isinstance(prop, hyperdb.Date) or \ |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
346 isinstance(prop, hyperdb.Interval): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
347 row.append(repr(entry[name].get_tuple())) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
348 elif isinstance(prop, hyperdb.Password): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
349 row.append(repr(str(entry[name]))) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
350 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
351 row.append(repr(entry[name])) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
352 elif isinstance(prop, hyperdb.Multilink): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
353 row.append('[]') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
354 elif name in ('creator', 'actor'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
355 row.append("'1'") |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
356 elif name in ('created', 'activity'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
357 row.append(repr(today.get_tuple())) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
358 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
359 row.append('None') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
360 row.append(entry.get('is retired', False)) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
361 writer.writerow(row) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
362 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
363 if isinstance(klass, hyperdb.FileClass) and entry.get('content'): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
364 fname = klass.exportFilename('/tmp/imported/', entry['id']) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
365 support.ensureParentsExist(fname) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
366 c = open(fname, 'w') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
367 if isinstance(entry['content'], unicode): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
368 c.write(entry['content'].encode('utf8')) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
369 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
370 c.write(entry['content']) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
371 c.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
372 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
373 f.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
374 f = open('/tmp/imported/%s-journals.csv'%klass.classname, 'w') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
375 f.close() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
376 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
377 class Progress: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
378 '''Progress display for console applications. |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
379 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 See __main__ block at end of file for sample usage. |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
381 ''' |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
382 def __init__(self, info, sequence): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
383 self.info = info |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
384 self.sequence = iter(sequence) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
385 self.total = len(sequence) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
386 self.start = self.now = time.time() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
387 self.num = 0 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
388 self.stepsize = self.total / 100 or 1 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
389 self.steptimes = [] |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
390 self.display() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
391 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
392 def __iter__(self): return self |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
393 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
394 def next(self): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
395 self.num += 1 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
396 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
397 if self.num > self.total: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
398 print self.info, 'done', ' '*(75-len(self.info)-6) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
399 sys.stdout.flush() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
400 return self.sequence.next() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
401 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
402 if self.num % self.stepsize: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
403 return self.sequence.next() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
404 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
405 self.display() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
406 return self.sequence.next() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
407 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
408 def display(self): |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
409 # figure how long we've spent - guess how long to go |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
410 now = time.time() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
411 steptime = now - self.now |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
412 self.steptimes.insert(0, steptime) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
413 if len(self.steptimes) > 5: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
414 self.steptimes.pop() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
415 steptime = sum(self.steptimes) / len(self.steptimes) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
416 self.now = now |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
417 eta = steptime * ((self.total - self.num)/self.stepsize) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
418 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
419 # tell it like it is (or might be) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
420 if now - self.start > 3: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
421 M = eta / 60 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
422 H = M / 60 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
423 M = M % 60 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
424 S = eta % 60 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
425 s = '%s %2d%% (ETA %02d:%02d:%02d)'%(self.info, |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
426 self.num * 100. / self.total, H, M, S) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
427 else: |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
428 s = '%s %2d%%'%(self.info, self.num * 100. / self.total) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
429 sys.stdout.write(s + ' '*(75-len(s)) + '\r') |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
430 sys.stdout.flush() |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
431 |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
432 if __name__ == '__main__': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
433 if sys.argv[1] == 'import': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
434 import_xml(*sys.argv[2:]) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
435 elif sys.argv[1] == 'files': |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 fetch_files(*sys.argv[2:]) |
|
ad9f06e32f7c
scripts/import_sf.py will import a tracker from Sourceforge.NET
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
437 |
