Mercurial > hg > Feedworm
changeset 255:b4c83e9b9c7a
migration from couchdb to arangodb
author | Dirk Olmes <dirk@xanthippe.ping.de> |
---|---|
date | Thu, 29 Nov 2018 18:46:21 +0100 |
parents | 8b1678851b54 |
children | f79be01821c4 |
files | migrate_couch_to_arango.py |
diffstat | 1 files changed, 78 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/migrate_couch_to_arango.py Thu Nov 29 18:46:21 2018 +0100 @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import couchdb +import pyArango.connection + +def get_or_cretae_arango_collection(arango_db, collection_name): + if arango_db.hasCollection(collection_name): + return arango_db[collection_name] + else: + return arango_db.createCollection(name=collection_name) + +def migrate_feed(couch_doc): + couch_id = couch_doc['_id'] + if couch_id.startswith('_design'): + return + try: + if couch_doc['doctype'] == 'feed': + arango_doc = arango_feed.createDocument() + copy(couch_doc, arango_doc) + arango_doc.save() + feed_mapping[couch_id] = arango_doc['_key'] + except KeyError: + print('**** migrate error ' + str(document)) + +def migrate_rest(document): + if document['_id'].startswith('_design'): + return + try: + doctype = document['doctype'] + if doctype == 'feed': + return + if doctype == 'feedEntry': + migrate_feed_entry(document) + elif doctype == 'preferences': + migrate_preferences(document) + else: + print('how to migrate ' + document['_id']) + except KeyError: + print('**** migrate error ' + str(document)) + +def migrate_feed_entry(couch_doc): + arango_doc = arango_feed_entry.createDocument() + copy(couch_doc, arango_doc) + feed_id = arango_doc['feed'] + feed_id = feed_mapping[feed_id] + arango_doc['feed'] = feed_id + arango_doc.save() + +def migrate_preferences(couch_doc): + arango_doc = arango_preferences.createDocument() + copy(couch_doc, arango_doc) + arango_doc.save() + +def copy(couch_doc, arango_doc): + for key in couch_doc: + if not key.startswith('_'): + arango_doc[key] = couch_doc[key] + +if __name__ == '__main__': + couch_server = couchdb.Server('http://192.168.2.1:5984/') + couch_db = couch_server['feedworm'] + + arango_connection = pyArango.connection.Connection(arangoURL='http://xanthippe:8529', username='root', password='kahbHeotQDYL4R5o') + arango_db = arango_connection['feedworm'] + arango_feed = get_or_cretae_arango_collection(arango_db, 'feed') + arango_feed_entry = get_or_cretae_arango_collection(arango_db, 'feed_entry') + arango_preferences = get_or_cretae_arango_collection(arango_db, 'preferences') + + feed_mapping = {} + + for id in couch_db: + doc = couch_db[id] + migrate_feed(doc) + + for id in couch_db: + doc = couch_db[id] + migrate_rest(doc)