class AbstractPage(object): InstanceCounter = 0 def __init__(self, reqresps): self.instance = AbstractPage.InstanceCounter AbstractPage.InstanceCounter += 1 self.reqresps = reqresps[:] for rr in reqresps: rr.response.page.abspage = self # maps a state to the corresponding abstract link chosen for that state self.statelinkmap = {} # maps a state to the corresponding requestresponse objects for that state self.statereqrespsmap = defaultdict(list) self.seenstates = set() self._str = None self.abslinks = AbstractLinks([rr.response.page.linkstree for rr in self.reqresps]) def addPage(self, reqresp): self.reqresps.append(reqresp) self.abslinks.tryMergeLinkstree(reqresp.response.page.linkstree) self._str = None def __str__(self): if self._str is None: self._str = "AbstractPage(#%d, %s)%s" % (len(self.reqresps), set("%s %s" % (i.request.method, i.request.fullpathref) for i in self.reqresps), self.instance) return self._str def __repr__(self): return str(self) def match(self, p): return self.abslinks.equals(p.abslinks) @lazyproperty def label(self): response = self.reqresps[0].response if response.page.error: return "%d %s" % (response.code, response.message) if response.page.redirect: redirects = ' '.join(i.location for i in response.page.redirects) return "%d %s\\n%s" % (response.code, response.message, redirects) else: return "Page(%d)" % self.instance def __cmp__(self, o): if o is None: return 1 return cmp(self.instance, o.instance)
def __init__(self, reqresps): self.instance = AbstractPage.InstanceCounter AbstractPage.InstanceCounter += 1 self.reqresps = reqresps[:] for rr in reqresps: rr.response.page.abspage = self # maps a state to the corresponding abstract link chosen for that state self.statelinkmap = {} # maps a state to the corresponding requestresponse objects for that state self.statereqrespsmap = defaultdict(list) self.seenstates = set() self._str = None self.abslinks = AbstractLinks([rr.response.page.linkstree for rr in self.reqresps])