g.addChild(i) i.addChild(j) e.addChild(j) b.addChild(i) a.addChild(j) logger.debug("Testing topological sort ...") sort = a.sort() self.assertEqual(sort, [a, b, c, d, e, f, g, h, i, j]) logger.info("DONE.") def testCircle(self): logger.info("In TestFlow.testCircle ...") p1 = HappyJobNode(name="P1") c1 = HappyJobNode(name="C1") c2 = HappyJobNode(name="C2") g1 = HappyJobNode(name="G1") p1.addChild(c1) p1.addChild(c2) c1.addChild(g1) self.assertRaises(CycleException, c1.addChild, p1) self.assertRaises(CycleException, p1.addParent, c1) self.assertRaises(CycleException, c2.addChild, p1) self.assertRaises(CycleException, p1.addParent, c2) self.assertRaises(CycleException, g1.addChild, p1) self.assertRaises(CycleException, p1.addParent, g1) if __name__ == '__main__': setLevel("info") unittest.main()
names.run(force=True) def testFlow2(self): logger.info("In TestFlow.testFlow2() ...") test_flow = Flow2(inputpaths=['/data/graph/latest/crawl'], outputpath='namelist') (names, types) = test_flow.split() names.chain(HappyJobNode(name='get_names', job=FilterExact(filterkey='propname', filtervalues=['/type/object/name', '/common/topic/alias'], keyfield='a:guid', mapfields={'value':'name'}))) types.chain(HappyJobNode(name='get_types', job=FilterExact(filterkey='propname', filtervalues=['/type/object/type'], keyfield='b:guid', mapfields={'target':'type'}))) names.chain(HappyJobNode(name='join_name_types', job=InnerJoin(joinkeys=['a:guid', 'b:guid'], outkey='guid'), force=True), join=types) names.chain(HappyJobNode(name='filter_people', job=FilterExact(filterkey='type', filtervalues=['/people/person'], keyfield='guid', mapfields={'type':'type', 'name':'name'}))) names.chain(HappyJobNode(name='invert_names', job=AggregateJson(aggkey='name', aggfunc='agg.list("guid")'))) logger.debug("DAG: \n%s\n" % names.startNode.dictize()) names.run(force=False) if __name__ == '__main__': setLevel("debug") unittest.main()