Guest User

Untitled

a guest
Jul 13th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import sys
  4. from collections import namedtuple
  5.  
  6. from neo4j.v1 import GraphDatabase
  7.  
  8. Config = namedtuple('Config', ['objname', 'relname', 'batch_size'])
  9.  
  10.  
  11. def create_records(db, dep_dict, config):
  12. with db.session() as session:
  13. create_records_with_session(session, dep_dict, config)
  14.  
  15.  
  16. def create_records_with_session(session, dep_dict, config):
  17. tx = session.begin_transaction()
  18. index = 0
  19. mutation = """
  20. MERGE (src:{objname} {{name: $src}})
  21. MERGE (dest:{objname} {{name: $dest}})
  22. MERGE (src)-[dep:{relname}]->(dest)
  23. """.format(objname=config.objname, relname=config.relname)
  24. for src, dests in dep_dict.items():
  25. for dest in dests:
  26. tx.run(mutation, src=src, dest=dest)
  27. if index % config.batch_size == config.batch_size - 1:
  28. print("{}: Committing...".format(index + 1), file=sys.stderr)
  29. tx.commit()
  30. tx = session.begin_transaction()
  31. index += 1
  32. tx.commit()
  33.  
  34.  
  35. def main():
  36. import argparse
  37. import json
  38. import os
  39.  
  40. parser = argparse.ArgumentParser()
  41. parser.add_argument('-U', '--url', default='bolt://localhost:7687')
  42. parser.add_argument('-u', '--username')
  43. parser.add_argument('-p', '--password')
  44. parser.add_argument('-b', '--batchsize', type=int, default=10000)
  45. parser.add_argument('-o', '--objname', default='Package')
  46. parser.add_argument('-r', '--relname', default='DEPENDS')
  47. parser.add_argument('file', nargs='*')
  48. args = parser.parse_args()
  49. if args.username:
  50. username = args.username
  51. else:
  52. username = os.getenv('NEO4J_USERNAME', 'neo4j')
  53. if args.password:
  54. password = args.password
  55. else:
  56. password = os.getenv('NEO4J_PASSWORD', 'neo4j')
  57.  
  58. db = GraphDatabase.driver(args.url, auth=(username, password))
  59. config = Config(objname=args.objname, relname=args.relname, batch_size=args.batchsize)
  60. if args.file:
  61. for fpath in args.file:
  62. with open(fpath) as f:
  63. dep_dict = json.load(f)
  64. create_records(db, dep_dict, config)
  65. else:
  66. dep_dict = json.load(sys.stdin)
  67. create_records(db, dep_dict, config)
  68.  
  69.  
  70. if __name__ == '__main__':
  71. main()
Add Comment
Please, Sign In to add comment