2 # implements SFA tickets
10 from sfa.trust.certificate import Certificate
11 from sfa.trust.rights import *
12 from sfa.trust.gid import *
15 # (gidCaller, gidObject, attributes, rspec, delegate)
17 # gidCaller = GID of the caller performing the operation
18 # gidObject = GID of the slice
19 # attributes = slice attributes (keys, vref, instantiation, etc)
22 class SfaTicket(Certificate):
29 def __init__(self, create=False, subject=None, string=None, filename=None):
30 Certificate.__init__(self, create, subject, string, filename)
32 def set_gid_caller(self, gid):
35 def get_gid_caller(self):
36 if not self.gidCaller:
40 def set_gid_object(self, gid):
43 def get_gid_object(self):
44 if not self.gidObject:
48 def set_attributes(self, gid):
51 def get_attributes(self):
52 if not self.attributes:
54 return self.attributes
56 def set_rspec(self, gid):
64 def set_delegate(self, delegate):
65 self.delegate = delegate
67 def get_delegate(self):
73 dict = {"gidCaller": None,
75 "attributes": self.attributes,
77 "delegate": self.delegate}
79 dict["gidCaller"] = self.gidCaller.save_to_string(save_parents=True)
81 dict["gidObject"] = self.gidObject.save_to_string(save_parents=True)
82 str = "URI:" + xmlrpclib.dumps((dict,), allow_none=True)
86 data = self.get_data()
88 dict = xmlrpclib.loads(self.get_data()[4:])[0][0]
92 self.attributes = dict.get("attributes", {})
93 self.rspec = dict.get("rspec", {})
94 self.delegate = dict.get("delegate", False)
96 gidCallerStr = dict.get("gidCaller", None)
98 self.gidCaller = GID(string=gidCallerStr)
100 self.gidCaller = None
102 gidObjectStr = dict.get("gidObject", None)
104 self.gidObject = GID(string=gidObjectStr)
106 self.gidObject = None
108 def dump(self, dump_parents=False):
109 print "TICKET", self.get_subject()
112 gidCaller = self.get_gid_caller()
114 gidCaller.dump(8, dump_parents)
117 gidObject = self.get_gid_object()
119 gidObject.dump(8, dump_parents)
122 for attrname in self.get_attributes().keys():
123 print " ", attrname, self.get_attributes()[attrname]
126 print " ", self.get_rspec()
128 if self.parent and dump_parents:
130 self.parent.dump(dump_parents)