예제 #1
0
 def testIgnore(self):
     pIgnore = proc()
     pIgnore.input = {"input": [1]}
     pIgnore.output = "outfile:file:a.txt"
     pIgnore.script = "echo {{input}} > {{outfile}}; exit $(($RANDOM % 4))"
     pIgnore.errhow = "ignore"
     pIgnore.cache = False
     pyppl().starts(pIgnore).run()
예제 #2
0
    def testIsRunning(self):
        pIsRunning = proc()
        pIsRunning.input = {"a": [1, 2, 3, 4, 5]}
        pIsRunning.script = "sleep 5"  # takes time to start
        pIsRunning.runner = "sge"
        pIsRunning.forks = 5

        pyppl().starts(pIsRunning).run()
예제 #3
0
 def testError(self):
     pError = proc()
     pError.input = {"input": [1]}
     pError.output = "outfile:file:a.txt"
     pError.script = "echo {{input}} > {{outfile}}; exit $(($RANDOM % 3))"
     pError.errhow = "retry"
     pError.errntry = 10
     pError.cache = False
     pyppl().starts(pError).run()
예제 #4
0
    def testFlushFile(self):
        pFF = proc()
        pFF.input = {"input": [1]}
        pFF.script = """
		for i in $(seq 1 60); do
		echo $i
		sleep 1
		done
		"""
        pFF.echo = True

        pyppl().starts(pFF).run('sge')
예제 #5
0
 def testConfig(self):
     config = {
         'proc': {},
         'sge': {
             'runner': 'ssh',
             'sshRunner': {
                 'servers': ['franklin01']
             }
         },
         'ssh2': {
             'runner': 'local'
         },
         'ssh': {
             'sshRunner': {
                 'servers': ['franklin01']
             }
         }
     }
     p = proc()
     p.script = "echo 1"
     p.input = {'a': [1]}
     pyppl(config, '').starts(p).run()
     self.assertEqual(p.runner, 'local')
     pyppl(config, '').starts(p).run('ssh')
     self.assertEqual(p.runner, 'ssh')
     pyppl(config, '').starts(p).run('ssh2')
     self.assertEqual(p.runner, 'local')
     pyppl(config, '').starts(p).run('sge')
     self.assertEqual(p.runner, 'ssh')
예제 #6
0
    def test_factory(self):

        ppl = pyppl({'proc': {'ppldir': './workdir'}})

        p1 = proc('TAG')
        self.assertTrue(isinstance(p1, proc))
        self.assertEqual(p1.tag, 'TAG')

        inch = channel.create(['a', 'b', 'c'])
        p1.tag = 'CREATE_FILE'
        p1.input = {'input': inch}
        p1.script = "echo {{input}} > {{outfile}}"
        p1.output = "o:{{input}}, outfile:file:{{input}}.txt"
        p1.cache = False

        p2 = proc("MOVE_FILE")
        p2.input = "input, infile:file"
        p2.output = "outfile:file:{{infile | fn}}-2.txt"
        p2.script = "mv {{infile}} {{outfile}}; cp {{outfile}} {{infile}}"
        p2.depends = p1
        p2.exportdir = './workdir'
        p2.cache = False
        p2.forks = 3
        ppl.starts(p1)

        ppl.run()

        self.assertTrue(os.path.exists('./workdir/a-2.txt'))
        self.assertTrue(os.path.exists('./workdir/b-2.txt'))
        self.assertTrue(os.path.exists('./workdir/c-2.txt'))
예제 #7
0
    def test_multideps(self):
        ppl = pyppl()
        pr1 = proc("A")
        pr2 = proc("B")
        pr3 = proc("C")

        p1ch = [('a', ), ('b', ), ('c', )]
        p2ch = [(1, ), (2, ), (3, )]
        pr1.input = {'input': channel.create(p1ch)}
        pr2.input = {'input': channel.create(p2ch)}
        pr1.output = 'o:{{input}}'
        pr2.output = 'o:{{input}}'
        pr3.input = 'in1, in2'
        pr3.output = 'o:{{in1}}{{in2}}'
        pr3.depends = [pr1, pr2]

        pr1.script = "echo {{input}}"
        pr2.script = "echo {{input}}"
        pr3.script = "echo {{in1}}{{in2}}"
        #pr3.echo   = True
        #p1.echo = True
        #p2.echo = True
        #p3.echo = True
        #print p3.props['indata'], 'xxxxxxxxxxxxxxxxxxxxxxx'
        ppl.starts(pr1, pr2).run()

        out1 = os.path.join(pr3.workdir, '0/job.stdout')
        out2 = os.path.join(pr3.workdir, '1/job.stdout')
        out3 = os.path.join(pr3.workdir, '2/job.stdout')
        self.assertTrue(os.path.exists(out1))
        self.assertTrue(os.path.exists(out2))
        self.assertTrue(os.path.exists(out3))
        self.assertEqual(open(out1).read().strip(), 'a1')
        self.assertEqual(open(out2).read().strip(), 'b2')
        self.assertEqual(open(out3).read().strip(), 'c3')
예제 #8
0
 def test_sge(self):
     ppl = pyppl()
     p1 = proc()
     p1.input = {"input": channel.create([('a')] * 10)}
     p1.workdir = './workdir'
     p1.forks = 3
     p1.script = "echo {input}"
     ppl.starts(p1).run('sge')
예제 #9
0
 def testBrings(self):
     tdir = "./workdir/"
     if not os.path.exists(tdir):
         os.makedirs(tdir)
     if not os.path.exists("./workdir/aaa"):
         os.makedirs("./workdir/aaa")
     infile = os.path.abspath("./workdir/aaa/1.txt")
     open(infile, 'w').write('')
     if not os.path.exists("./workdir/1.txt"):
         os.symlink(infile, os.path.abspath("./workdir/1.txt"))
     brfile = "./workdir/aaa/1.txi"
     open(brfile, 'w').write('')
     pBrings = proc()
     pBrings.script = "echo 1"
     pBrings.input = {"infile:file": ["./workdir/1.txt"]}
     pBrings.brings = {"infile": "{{infile | fn}}.txi"}
     pyppl().starts(pBrings).run()
     self.assertTrue(
         os.path.exists(os.path.join(pBrings.jobs[0].indir, "1.txi")))
예제 #10
0
    def testCallback(self):
        p1 = proc('callback')
        p2 = proc('callback')

        def callback2(s):
            ch = channel.create([('a1', 'b'), ('x', 'y')])
            s.channel.merge(ch)

        argv = sys.argv[:]
        sys.argv = ['0', '1', '2']
        p1.input = {"input": channel.fromArgv()}
        p1.output = "output:{{input}}2"
        p1.script = "echo {{output}}"
        p1.callback = callback2
        p2.depends = p1
        p2.input = "input, in1, in2"
        p2.script = "echo {{output}}"
        p2.output = "output:{{input}}.{{in1}}.{{in2}}"
        pyppl().starts(p1).run()
        sys.argv = argv[:]
예제 #11
0
 def test_batchjobs(self):
     p = proc('batch')
     p.input = {'input': channel.create(range(10))}
     p.script = "cat {{proc.workdir}}/{{#}}/job.script.ssh | grep franklin; sleep 3"
     p.echo = True
     p.cache = False
     p.forks = 3
     #p.errorhow = 'retry'
     #p.runner = 'ssh'
     p.beforeCmd = 'mkdir ./workdir/test_batchjobs -p'
     p.tmpdir = './workdir/test_batchjobs'
     pyppl({
         'proc': {
             'sshRunner': {
                 'servers': [
                     'franklin01', 'franklin02', 'franklin03', 'franklin04',
                     'franklin05', 'franklin06', 'franklin07', 'franklin08'
                 ]
             }
         },
         'loglevel': 'debug'
     }).starts(p).run('ssh')
     shutil.rmtree('./workdir/test_batchjobs')
예제 #12
0
 def testAggr(self):
     pa = proc('aggr')
     pb = proc('aggr')
     pa.script = 'echo 1'
     pb.script = 'echo 2'
     a = aggr(pa, pb)
     pe = proc('end')
     pe.depends = a
     a.pa_aggr.input = "input"
     a.pa_aggr.output = "out:{{input}}.{{proc.id}}.{{proc.tag}}"
     a.pb_aggr.input = "input"
     a.pb_aggr.output = "out:{{input}}.{{proc.id}}.{{proc.tag}}"
     a.input = ["AGGR"]
     pe.input = "input"
     pe.output = "out:{{input}}.{{proc.id}}.{{proc.tag}}"
     self.assertRaises(SystemExit, pyppl().starts(a).run)
     self.assertEqual(pe.channel, [('AGGR.pa.aggr.pb.aggr.pe.end', )])
예제 #13
0
    def test_dot(self):
        self.maxDiff = None
        ppl = pyppl()
        p1 = proc("A")
        p2 = proc("B")
        p3 = proc("C")
        p4 = proc("D")
        p5 = proc("E")
        p6 = proc("F")
        p7 = proc("G")
        p8 = proc("H")
        p9 = proc("I")
        p1.script = "echo 1"
        p1.input = {"input": channel.create(['a'])}
        p8.input = {"input": channel.create(['a'])}
        p9.input = {"input": channel.create(['a'])}
        p2.input = "input"
        p3.input = "input"
        p4.input = "input"
        p5.input = "input"
        p6.input = "input"
        p7.input = "input"
        p1.output = "{{input}}"
        p2.script = "echo 1"
        p2.output = "{{input}}"
        p3.script = "echo 1"
        p3.output = "{{input}}"
        p4.script = "echo 1"
        p4.output = "{{input}}"
        p5.script = "echo 1"
        p5.output = "{{input}}"
        p6.script = "echo 1"
        p6.output = "{{input}}"
        p7.script = "echo 1"
        p7.output = "{{input}}"
        p8.script = "echo 1"
        p8.output = "{{input}}"
        p9.script = "echo 1"
        p9.output = "{{input}}"
        """
					   1A         8H
					/      \      /
				 2B           3C
				    \      /
					  4D(e)       9I
					/      \      /
				 5E          6F(e)
				    \      /
					  7G(e)
		"""
        p2.depends = p1
        p3.depends = [p1, p8]
        p4.depends = [p2, p3]
        p4.exportdir = "./"
        p5.depends = p4
        p6.depends = [p4, p9]
        p6.exportdir = "./"
        p7.depends = [p5, p6]
        p7.exportdir = "./"
        ppl.starts(p1, p8, p9).flowchart("/tmp/pyppl.flowchart.dot", None, "")
        self.assertEqual(
            sorted(
                open("/tmp/pyppl.flowchart.dot").read().strip().split("\n")),
            sorted("""digraph PyPPL {
	"p1.A" -> "p2.B"
	"p1.A" -> "p3.C"
	"p8.H" -> "p3.C"
	"p2.B" -> "p4.D"
	"p3.C" -> "p4.D"
	"p4.D" -> "p5.E"
	"p4.D" -> "p6.F"
	"p9.I" -> "p6.F"
	"p5.E" -> "p7.G"
	"p6.F" -> "p7.G"
	"p6.F" [shape=box, style=filled, color="#f0f998", fontcolor=red]
	"p1.A" [shape=box, style=filled, color="#c9fcb3" ]
	"p8.H" [shape=box, style=filled, color="#c9fcb3" ]
	"p9.I" [shape=box, style=filled, color="#c9fcb3" ]
	"p7.G" [shape=box, style=filled, color="#fcc9b3" fontcolor=red]
	"p4.D" [shape=box, style=filled, color="#f0f998", fontcolor=red]
}""".split("\n")))
예제 #14
0
    def test_init(self):
        ppl = pyppl({}, '')

        self.assertTrue(isinstance(ppl, pyppl))
        self.assertEqual(ppl.config, {})
        self.assertEqual(ppl.heads, [])