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