aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db/sql/convert.py
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/db/sql/convert.py')
-rw-r--r--mediagoblin/db/sql/convert.py90
1 files changed, 75 insertions, 15 deletions
diff --git a/mediagoblin/db/sql/convert.py b/mediagoblin/db/sql/convert.py
index f6575be9..ebf3037c 100644
--- a/mediagoblin/db/sql/convert.py
+++ b/mediagoblin/db/sql/convert.py
@@ -14,17 +14,20 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+from copy import copy
from mediagoblin.init import setup_global_and_app_config, setup_database
from mediagoblin.db.mongo.util import ObjectId
-from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment,
- Tag, MediaTag, MediaFile)
+from mediagoblin.db.sql.base import Base, Session
+from mediagoblin.db.sql.models import (User, MediaEntry, MediaComment,
+ Tag, MediaTag, MediaFile, MediaAttachmentFile, MigrationData)
+from mediagoblin.media_types.image.models import ImageData
+from mediagoblin.media_types.video.models import VideoData
from mediagoblin.db.sql.open import setup_connection_and_db_from_config as \
sql_connect
from mediagoblin.db.mongo.open import setup_connection_and_db_from_config as \
mongo_connect
-from mediagoblin.db.sql.base import Session
obj_id_table = dict()
@@ -49,14 +52,14 @@ def copy_reference_attr(entry, new_entry, ref_attr):
def convert_users(mk_db):
session = Session()
- for entry in mk_db.User.find():
+ for entry in mk_db.User.find().sort('created'):
print entry.username
new_entry = User()
copy_attrs(entry, new_entry,
('username', 'email', 'created', 'pw_hash', 'email_verified',
'status', 'verification_key', 'is_admin', 'url',
- 'bio', 'bio_html',
+ 'bio',
'fp_verification_key', 'fp_token_expire',))
# new_entry.fp_verification_expire = entry.fp_token_expire
@@ -71,15 +74,15 @@ def convert_users(mk_db):
def convert_media_entries(mk_db):
session = Session()
- for entry in mk_db.MediaEntry.find():
+ for entry in mk_db.MediaEntry.find().sort('created'):
print repr(entry.title)
new_entry = MediaEntry()
copy_attrs(entry, new_entry,
('title', 'slug', 'created',
- 'description', 'description_html',
+ 'description',
'media_type', 'state', 'license',
- 'fail_error',
+ 'fail_error', 'fail_metadata',
'queued_task_id',))
copy_reference_attr(entry, new_entry, "uploader")
@@ -92,6 +95,44 @@ def convert_media_entries(mk_db):
new_file.media_entry = new_entry.id
Session.add(new_file)
+ for attachment in entry.attachment_files:
+ new_attach = MediaAttachmentFile(
+ name=attachment["name"],
+ filepath=attachment["filepath"],
+ created=attachment["created"]
+ )
+ new_attach.media_entry = new_entry.id
+ Session.add(new_attach)
+
+ session.commit()
+ session.close()
+
+
+def convert_image(mk_db):
+ session = Session()
+
+ for media in mk_db.MediaEntry.find(
+ {'media_type': 'mediagoblin.media_types.image'}).sort('created'):
+ media_data = copy(media.media_data)
+
+ if len(media_data):
+ media_data_row = ImageData(**media_data)
+ media_data_row.media_entry = obj_id_table[media['_id']]
+ session.add(media_data_row)
+
+ session.commit()
+ session.close()
+
+
+def convert_video(mk_db):
+ session = Session()
+
+ for media in mk_db.MediaEntry.find(
+ {'media_type': 'mediagoblin.media_types.video'}).sort('created'):
+ media_data_row = VideoData(**media.media_data)
+ media_data_row.media_entry = obj_id_table[media['_id']]
+ session.add(media_data_row)
+
session.commit()
session.close()
@@ -100,7 +141,7 @@ def convert_media_tags(mk_db):
session = Session()
session.autoflush = False
- for media in mk_db.MediaEntry.find():
+ for media in mk_db.MediaEntry.find().sort('created'):
print repr(media.title)
for otag in media.tags:
@@ -127,13 +168,13 @@ def convert_media_tags(mk_db):
def convert_media_comments(mk_db):
session = Session()
- for entry in mk_db.MediaComment.find():
+ for entry in mk_db.MediaComment.find().sort('created'):
print repr(entry.content)
new_entry = MediaComment()
copy_attrs(entry, new_entry,
('created',
- 'content', 'content_html',))
+ 'content',))
copy_reference_attr(entry, new_entry, "media_entry")
copy_reference_attr(entry, new_entry, "author")
@@ -145,11 +186,24 @@ def convert_media_comments(mk_db):
session.close()
-def main():
- global_config, app_config = setup_global_and_app_config("mediagoblin.ini")
+def convert_add_migration_versions():
+ session = Session()
+
+ for name in ("__main__",
+ "mediagoblin.media_types.image",
+ "mediagoblin.media_types.video",
+ ):
+ m = MigrationData(name=name, version=0)
+ session.add(m)
+
+ session.commit()
+ session.close()
+
- sql_conn, sql_db = sql_connect({'sql_engine': 'sqlite:///mediagoblin.db'})
+def run_conversion(config_name):
+ global_config, app_config = setup_global_and_app_config(config_name)
+ sql_conn, sql_db = sql_connect(app_config)
mk_conn, mk_db = mongo_connect(app_config)
Base.metadata.create_all(sql_db.engine)
@@ -158,11 +212,17 @@ def main():
Session.remove()
convert_media_entries(mk_db)
Session.remove()
+ convert_image(mk_db)
+ Session.remove()
+ convert_video(mk_db)
+ Session.remove()
convert_media_tags(mk_db)
Session.remove()
convert_media_comments(mk_db)
Session.remove()
+ convert_add_migration_versions()
+ Session.remove()
if __name__ == '__main__':
- main()
+ run_conversion("mediagoblin.ini")