|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/usr/bin/env python
- from __future__ import unicode_literals
-
- """Migrate blog database files from a PerlSiikir site to Rophako.
-
- Usage: scripts/siikir-blog-migrate.py <path/to/siikir/db/root>
-
- Rophako supports one global blog, so the blog of UserID 1 in Siikir is used."""
-
- import sys
- import os
- import codecs
- import json
- import glob
-
- sys.path.append(".")
- import rophako.jsondb as JsonDB
-
- # Path to Siikir DB root.
- siikir = None
-
- def main():
- if len(sys.argv) == 1:
- print "Usage: {} <path/to/siikir/db/root>".format(__file__)
- sys.exit(1)
-
- global siikir
- siikir = sys.argv[1]
- print "Siikir DB:", siikir
- if raw_input("Confirm? [yN] ") != "y":
- sys.exit(1)
-
- convert_index()
- convert_posts()
- convert_comments()
- convert_subscriptions()
-
-
- def convert_index():
- print "Converting blog index"
- index = json_get("blog/index/1.json")
- new = {}
- for post_id, data in index.iteritems():
- del data["id"]
-
- # Enforce data types.
- data["author"] = int(data["author"])
- data["time"] = int(data["time"])
- data["sticky"] = bool(data["sticky"])
-
- new[post_id] = data
-
- JsonDB.commit("blog/index", new)
-
-
- def convert_posts():
- print "Converting blog entries..."
-
- for name in glob.glob(os.path.join(siikir, "blog/entries/1/*.json")):
- name = name.split("/")[-1]
- post = json_get("blog/entries/1/{}".format(name))
- post_id = post["id"]
- del post["id"]
-
- # Enforce data types.
- post["time"] = int(post["time"])
- post["author"] = int(post["author"])
- post["comments"] = bool(post["comments"])
- post["sticky"] = bool(post["sticky"])
- post["emoticons"] = bool(post["emoticons"])
-
- print "*", post["subject"]
- JsonDB.commit("blog/entries/{}".format(post_id), post)
-
-
- def convert_comments():
- print "Converting comments..."
-
- for name in glob.glob(os.path.join(siikir, "comments/1/*.json")):
- name = name.split("/")[-1]
- if name.startswith("photos-"): continue
- data = json_get("comments/1/{}".format(name))
-
- thread = name[:len(name)-5]
-
- # Enforce data types.
- for cid in data:
- data[cid]["time"] = int(data[cid]["time"])
- data[cid]["uid"] = int(data[cid]["uid"])
-
- print "*", thread
- JsonDB.commit("comments/threads/{}".format(thread), data)
-
-
- def convert_subscriptions():
- print "Converting subscriptions..."
-
- for name in glob.glob(os.path.join(siikir, "subscribers/1/*.json")):
- name = name.split("/")[-1]
- if name.startswith("photos-"): continue
- data = json_get("subscribers/1/{}".format(name))
-
- thread = name[:len(name)-5]
-
- # Enforce data types.
- for email in data:
- data[email] = int(data[email])
-
- print "*", thread
- JsonDB.commit("comments/subscribers/{}".format(thread), data)
-
-
- def json_get(document):
- fh = codecs.open(os.path.join(siikir, document), 'r', 'utf-8')
- text = fh.read()
- fh.close()
- return json.loads(text)
-
-
- if __name__ == "__main__":
- main()
|