Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import sys
- from collections import namedtuple
- from neo4j.v1 import GraphDatabase
- Config = namedtuple('Config', ['objname', 'relname', 'batch_size'])
- def create_records(db, dep_dict, config):
- with db.session() as session:
- create_records_with_session(session, dep_dict, config)
- def create_records_with_session(session, dep_dict, config):
- tx = session.begin_transaction()
- index = 0
- mutation = """
- MERGE (src:{objname} {{name: $src}})
- MERGE (dest:{objname} {{name: $dest}})
- MERGE (src)-[dep:{relname}]->(dest)
- """.format(objname=config.objname, relname=config.relname)
- for src, dests in dep_dict.items():
- for dest in dests:
- tx.run(mutation, src=src, dest=dest)
- if index % config.batch_size == config.batch_size - 1:
- print("{}: Committing...".format(index + 1), file=sys.stderr)
- tx.commit()
- tx = session.begin_transaction()
- index += 1
- tx.commit()
- def main():
- import argparse
- import json
- import os
- parser = argparse.ArgumentParser()
- parser.add_argument('-U', '--url', default='bolt://localhost:7687')
- parser.add_argument('-u', '--username')
- parser.add_argument('-p', '--password')
- parser.add_argument('-b', '--batchsize', type=int, default=10000)
- parser.add_argument('-o', '--objname', default='Package')
- parser.add_argument('-r', '--relname', default='DEPENDS')
- parser.add_argument('file', nargs='*')
- args = parser.parse_args()
- if args.username:
- username = args.username
- else:
- username = os.getenv('NEO4J_USERNAME', 'neo4j')
- if args.password:
- password = args.password
- else:
- password = os.getenv('NEO4J_PASSWORD', 'neo4j')
- db = GraphDatabase.driver(args.url, auth=(username, password))
- config = Config(objname=args.objname, relname=args.relname, batch_size=args.batchsize)
- if args.file:
- for fpath in args.file:
- with open(fpath) as f:
- dep_dict = json.load(f)
- create_records(db, dep_dict, config)
- else:
- dep_dict = json.load(sys.stdin)
- create_records(db, dep_dict, config)
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment