Ejemplo n.º 1
0
 def readEvent(self,xml):
     label = self.readTerm(xml.find('label'))
     compromisetype = self.readText(xml.find('compromisetype'))
     follows = xml.findall('follows')
     bindinglist = []
     for follow in follows: 
         follaf = follow.find('after')
         if follaf == None:
             # Ignore follow definitions that do not contain after
             continue
         follev = (int(follaf.get('run')),int(follaf.get('index')))
         # Parse and store the binding label
         blabel = self.readTerm(follow)
         if blabel != None:
             binding = (follev,blabel)
             bindinglist.append(binding)
         
     (etype,index) = (xml.get('type'),int(xml.get('index')))
     if etype in ('send','read','recv'):
         fr = self.readTerm(xml.find('from'))
         to = self.readTerm(xml.find('to'))
         message = self.readTerm(xml.find('message'))
         if (etype == 'send'):
             return Trace.EventSend(index,label,fr,to,message,compromisetype=compromisetype,bindinglist=bindinglist)
         else:
             return Trace.EventRead(index,label,fr,to,message,compromisetype=compromisetype,bindinglist=bindinglist)
     elif xml.get('type') == 'claim':
         role = self.readTerm(xml.find('role'))
         etype = self.readTerm(xml.find('type'))
         argument = self.readTerm(xml.find('argument'))
         # Freshness claims are implemented as Empty claims with
         # (Fresh,Value) as arguments
         try:
             if etype == 'Empty' and argument[0] == 'Fresh':
                 etype = Term.TermConstant('Fresh')
                 argument = argument[1]
             elif etype == 'Empty' and argument[0] == 'Compromised':
                 etype = Term.TermConstant('Compromised')
                 argument = argument[1]
         except:
             pass
         return Trace.EventClaim(index,label,role,etype,argument,compromisetype=compromisetype,bindinglist=bindinglist)
     else:
         raise Trace.InvalidAction, "Invalid action in XML: %s" % (xml.get('type'))