9a49290fedc8b4f9c7a631dedcfe8ac3aa2b4cee
chinhli
  Thu Oct 20 14:10:43 2011 -0700
merge conflict resolved
diff --git python/programs/qaUpdateMetadata/qaUpdateMetadata python/programs/qaUpdateMetadata/qaUpdateMetadata
new file mode 100755
index 0000000..a2cee40
--- /dev/null
+++ python/programs/qaUpdateMetadata/qaUpdateMetadata
@@ -0,0 +1,82 @@
+#!/hive/groups/encode/dcc/bin/python
+import sys, os, re, argparse, subprocess, math
+from ucscgenomics import ra, track
+
+def addChange(changelist, obj, change):
+	if obj not in changelist:
+		changelist[obj] = list()
+	changelist[obj].append(change)
+	return changelist
+	
+
+def main():
+	parser = argparse.ArgumentParser(
+		prog='qaUpdateMetadata',
+		description='Update a metaDb fix',
+		epilog='example: qaUpdateMetadata hg19 wgEncodeUwDnaseSeq --list "md5sum objType cell treatment"'
+		)
+	parser.add_argument('-t', '--trackPath', help='Overrides the default track path ~/kent/src/hg/makeDb/trackDb/')
+	parser.add_argument('database', help='The database, typically hg19 or mm9')
+	parser.add_argument('composite', help='The composite name, wgEncodeCshlLongRnaSeq for instance')
+	parser.add_argument('vars', metavar='VARS', type=str, nargs='+', help='The list of metadata variables to update from alpha to beta')
+	
+	args = parser.parse_args(sys.argv[1:])
+	vars = args.vars
+
+
+	
+	c = track.CompositeTrack(args.database, args.composite)
+	newMdb = c.alphaMetaDb
+	oldMdb = c.betaMetaDb
+	
+	
+	commonStanzas = set(newMdb.filter(lambda s: 1, lambda s: s['metaObject'])) & set(oldMdb.filter(lambda s: 1, lambda s: s['metaObject']))
+	
+	changelist = dict()
+	
+	for i in sorted(commonStanzas):
+		#print oldMdb[i]
+		for j in vars:
+			if j not in newMdb[i]:
+				if j in oldMdb[i]:
+					changelist = addChange(changelist, i, "deleted %s" % j)
+					del oldMdb[i][j]
+					continue
+				else:
+					continue
+			if j not in oldMdb[i]:
+				changelist = addChange(changelist, i, "added %s = %s" % (j, newMdb[i][j]))
+				oldMdb[i][j] = newMdb[i][j]
+				continue
+			elif oldMdb[i][j] != newMdb[i][j]:
+				changelist = addChange(changelist, i, "changed %s from %s to %s" % (j, oldMdb[i][j], newMdb[i][j]))
+				oldMdb[i][j] = newMdb[i][j]
+
+	
+	for i in sorted(changelist):
+		print i
+		for j in changelist[i]:
+			pass
+			print j
+		print ""
+		
+
+	f = open(c._betaMdbPath, 'w')
+	magic = ""
+	for i in sorted(oldMdb):
+		if re.search('MAGIC', i):
+			magic = i
+			continue
+		f.write("metaObject " + str(oldMdb[i]['metaObject'] + "\n"))
+		del oldMdb[i]['metaObject']
+		f.write("objType " + str(oldMdb[i]['objType'] + "\n"))
+		del oldMdb[i]['objType']
+		for j in sorted(oldMdb[i]):
+			f.write(("%s %s" % (j, oldMdb[i][j])) + "\n")
+		f.write("\n")
+	magic = magic + "\n"	
+	f.write(magic)
+	f.close
+	
+if __name__ == '__main__':
+	main()