+++ /dev/null
-#!/usr/bin/python
-
-"""
-Updates record objects
-
-
-faiyaza at cs dot princeton dot edu
-Copyright (c) 2009 Board of Trustees, Princeton University
-
-"""
-
-import sys
-sys.path.append('.')
-import os
-from optparse import OptionParser
-from pprint import pprint
-from sfa.util.xml import XML
-
-def create_parser():
- command = sys.argv[0]
- argv = sys.argv[1:]
- usage = "%(command)s [options]" % locals()
- description = """setRecord will edit a record (from stdin), modify its contents, then print the new record to stdout"""
- parser = OptionParser(usage=usage,description=description)
- parser.add_option("-d", "--debug", dest="DEBUG", action="store_true",
- default=False, help = "print debug info")
-
- return parser
-
-
-def editDict(args, recordDict, options):
- """
- Takes the arg list, seperates into tag/value, creates a dict, then munges args.
- """
- # find out if its iterable.
- for vect in args:
- if vect.count("+="):
- # append value
- modDict({vect.split("+=")[0]: returnVal(vect.split("+=")[1])},
- recordDict, options)
-
- elif vect.count("="):
- # reassign value
- replaceDict({vect.split("=")[0]: returnVal("=".join(vect.split("=")[1:]))},
- recordDict, options)
- else:
- if vect in recordDict:
- del recordDict[vect]
- else:
- raise TypeError, "Argument error: Records are updated with \n" \
- "key=val1,val2,valN or\n" \
- "key+=val1,val2,valN \n%s Unknown key/val" % vect
-
-
-def replaceDict(newval, recordDict, options):
- """
- Replaces field in dict
- """
- # Check type of old field matches type of new field
- for (key, val) in newval.iteritems():
- recordDict[key] = val
-
-def modDict(newval, recordDict, options):
- """
- Checks type of existing field, addends new field
- """
- for (key, val) in newval.iteritems():
- if (type(recordDict[key]) == list):
- if (type(val) == list):
- recordDict[key] = recordDict[key] + val
- else:
- recordDict[key].append(val)
- elif type(val) == list:
- val.append(recordDict[key])
- recordDict[key] = val
- else:
- recordDict[key] = [recordDict[key], val]
-
-
-def returnVal(arg):
- """
- if given input has ",", then its assumed to be a list.
- """
- if arg.count(","):
- return list(arg.split(","))
- else:
- return arg
-
-def main():
- parser = create_parser();
- (options, args) = parser.parse_args()
-
- record = XML(sys.stdin.read())
- record_dict = record.todict()
- if args:
- editDict(args, record_dict, options)
- if options.DEBUG:
- print "New Record:\n%s" % record_dict
-
- record.parse_dict(record_dict)
- s = record.toxml()
- sys.stdout.write(s)
-
-if __name__ == '__main__':
- try: main()
- except Exception, e:
- print e