# Sentinal value for nondeterministic dependencies DISCORDIA = 'discordia' class Dependencies(set): def add(self, d): assert d == DISCORDIA or len(d) == 4, d set.add(self, d) def addRawDep(self, ename, pname, id, version): self.add((ename, pname, id, version)) def makeUncacheable(self): self.add(DISCORDIA) def addDep(self, propval): self.addRawDep(propval.element.ename, propval.prop.name, propval.id, propval.version) # TODO(xavid): rename and make sure this makes sense def addExistsDep(self, ename): self.addRawDep(ename, '__exists', None, None) def addNoPropvalDep(self, ename, pname): self.addRawDep(ename, pname, None, None) def addPropvalDep(self, e, pname): if pname in e: self.addDep(e[pname]) else: self.addNoPropvalDep(e.ename, pname) def addRawElementDep(self, e): self.addRawDep(e.ename, '__version', e.id, e.version) def addChildrenDep(self, e): self.addRawElementDep(e) def addParentDep(self, e): self.addRawElementDep(e) def addElementPropvalsDep(self, e): self.addRawElementDep(e)