2 from __future__ import with_statement
8 from optparse import OptionParser
9 from geni.util.cert import Keypair, Certificate
10 from geni.util.credential import Credential
11 from geni.util.geniclient import GeniClient, ServerException
12 from geni.util.gid import create_uuid
13 from geni.util.record import GeniRecord
14 from geni.util.rspec import Rspec
15 from types import StringTypes, ListType
17 def determine_geni_filekind(fn):
18 from geni.util.cert import Certificate
20 cert = Certificate(filename = fn)
22 data = cert.get_data()
24 dict = xmlrpclib.loads(data)[0][0]
28 if "gidCaller" in dict:
38 lastpart = hrn.split(".")[-1]
39 filename = lastpart + ".gid"
41 if os.path.exists(filename):
42 print filename, ": already exists... skipping"
45 print filename, ": extracting gid of", hrn
47 gid.save_to_file(filename, save_parents = True)
49 def extract_gids(cred, extract_parents):
50 gidCaller = cred.get_gid_caller()
54 gidObject = cred.get_gid_object()
55 if gidObject and ((gidCaller == None) or (gidCaller.get_hrn() != gidObject.get_hrn())):
59 parent = cred.get_parent()
61 extract_gids(parent, extract_parents)
64 # Generate command line parser
65 parser = OptionParser(usage="genidump [options] filename")
67 parser.add_option("-e", "--extractgids", action="store_true", dest="extract_gids", default=False, help="Extract GIDs from credentials")
68 parser.add_option("-p", "--dumpparents", action="store_true", dest="dump_parents", default=False, help="Show parents")
73 parser = create_parser()
74 (options, args) = parser.parse_args()
77 print "No filename given. Use -h for help."
81 kind = determine_geni_filekind(filename)
83 if kind=="credential":
84 cred = Credential(filename = filename)
85 cred.dump(dump_parents = options.dump_parents)
86 if options.extract_gids:
87 extract_gids(cred, extract_parents = options.dump_parents)
89 gid = Gid(filename = filename)
90 gid.dump(dump_parents = options.dump_parents)
92 print "unknown filekind", kind
94 if __name__=="__main__":