Commit | Line | Data |
---|---|---|
dbcf5289 E |
1 | from sqlalchemy import create_engine |
2 | from sqlalchemy.orm import sessionmaker | |
3 | ||
4 | from mediagoblin.init import setup_global_and_app_config, setup_database | |
5 | from mediagoblin.db.util import ObjectId | |
6 | ||
7 | from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment, | |
8 | Tag, MediaTag) | |
9 | ||
7b194a79 E |
10 | # Session = sessionmaker() |
11 | from mediagoblin.db.sql.base import Session | |
dbcf5289 E |
12 | |
13 | ||
14 | obj_id_table = dict() | |
15 | ||
16 | def add_obj_ids(entry, new_entry): | |
17 | global obj_id_table | |
18 | print "%r -> %r" % (entry._id, new_entry.id) | |
19 | obj_id_table[entry._id] = new_entry.id | |
20 | ||
21 | ||
22 | def copy_attrs(entry, new_entry, attr_list): | |
23 | for a in attr_list: | |
24 | val = entry[a] | |
25 | setattr(new_entry, a, val) | |
26 | ||
27 | def copy_reference_attr(entry, new_entry, ref_attr): | |
28 | val = entry[ref_attr] | |
29 | val = obj_id_table[val] | |
30 | setattr(new_entry, ref_attr, val) | |
31 | ||
32 | ||
33 | def convert_users(mk_db): | |
34 | session = Session() | |
35 | ||
36 | for entry in mk_db.User.find(): | |
37 | print entry.username | |
38 | ||
39 | new_entry = User() | |
40 | copy_attrs(entry, new_entry, | |
41 | ('username', 'email', 'created', 'pw_hash', 'email_verified', | |
42 | 'status', 'verification_key', 'is_admin', 'url', | |
43 | 'bio', 'bio_html', | |
44 | 'fp_verification_key', 'fp_token_expire',)) | |
45 | # new_entry.fp_verification_expire = entry.fp_token_expire | |
46 | ||
47 | session.add(new_entry) | |
48 | session.flush() | |
49 | add_obj_ids(entry, new_entry) | |
50 | ||
51 | session.commit() | |
52 | session.close() | |
53 | ||
54 | ||
55 | def convert_media_entries(mk_db): | |
56 | session = Session() | |
57 | ||
58 | for entry in mk_db.MediaEntry.find(): | |
59 | print repr(entry.title) | |
60 | ||
61 | new_entry = MediaEntry() | |
62 | copy_attrs(entry, new_entry, | |
63 | ('title', 'slug', 'created', | |
64 | 'description', 'description_html', | |
c6263400 | 65 | 'media_type', 'state', |
dbcf5289 E |
66 | 'fail_error', |
67 | 'queued_task_id',)) | |
68 | copy_reference_attr(entry, new_entry, "uploader") | |
69 | ||
70 | session.add(new_entry) | |
71 | session.flush() | |
72 | add_obj_ids(entry, new_entry) | |
73 | ||
74 | session.commit() | |
75 | session.close() | |
76 | ||
77 | ||
78 | def convert_media_tags(mk_db): | |
79 | session = Session() | |
80 | session.autoflush = False | |
81 | ||
82 | for media in mk_db.MediaEntry.find(): | |
83 | print repr(media.title) | |
84 | ||
85 | for otag in media.tags: | |
86 | print " ", repr((otag["slug"], otag["name"])) | |
87 | ||
88 | nslug = session.query(Tag).filter_by(slug=otag["slug"]).first() | |
89 | print " ", repr(nslug) | |
90 | if nslug is None: | |
91 | nslug = Tag(slug=otag["slug"]) | |
92 | session.add(nslug) | |
93 | session.flush() | |
94 | print " ", repr(nslug), nslug.id | |
95 | ||
96 | ntag = MediaTag() | |
97 | ntag.tag = nslug.id | |
98 | ntag.name = otag["name"] | |
99 | ntag.media_entry = obj_id_table[media._id] | |
100 | session.add(ntag) | |
101 | ||
102 | session.commit() | |
103 | session.close() | |
104 | ||
105 | ||
106 | def convert_media_comments(mk_db): | |
107 | session = Session() | |
108 | ||
109 | for entry in mk_db.MediaComment.find(): | |
110 | print repr(entry.content) | |
111 | ||
112 | new_entry = MediaComment() | |
113 | copy_attrs(entry, new_entry, | |
114 | ('created', | |
115 | 'content', 'content_html',)) | |
116 | copy_reference_attr(entry, new_entry, "media_entry") | |
117 | copy_reference_attr(entry, new_entry, "author") | |
118 | ||
119 | session.add(new_entry) | |
120 | session.flush() | |
121 | add_obj_ids(entry, new_entry) | |
122 | ||
123 | session.commit() | |
124 | session.close() | |
125 | ||
126 | ||
127 | def main(): | |
128 | engine = create_engine('sqlite:///mediagoblin.db', echo=True) | |
129 | Session.configure(bind=engine) | |
130 | ||
131 | setup_global_and_app_config("mediagoblin.ini") | |
132 | ||
133 | mk_conn, mk_db = setup_database() | |
134 | ||
135 | Base.metadata.create_all(engine) | |
136 | ||
137 | convert_users(mk_db) | |
7b194a79 | 138 | Session.remove() |
dbcf5289 | 139 | convert_media_entries(mk_db) |
7b194a79 | 140 | Session.remove() |
dbcf5289 | 141 | convert_media_tags(mk_db) |
7b194a79 | 142 | Session.remove() |
dbcf5289 | 143 | convert_media_comments(mk_db) |
7b194a79 | 144 | Session.remove() |
dbcf5289 E |
145 | |
146 | ||
147 | if __name__ == '__main__': | |
148 | main() |