Exemple #1
0
    """

    list_of_promises = [Promise.delayed(5-i, 2*i) for i in range(5)]
    Promise.all(list_of_promises).then(my_print)

def test6():
    """
    Tests foreach.

    Should print 1, [delay 1s], 2, [delay 2s], 3, [delay 3s], 4
    """

    def f(x):
        print('%d'%x)
        return Promise.delayed(x, x)

    Promise.foreach([1, 2, 3, 4], f)

e = EventLoop()
e.start()

#test1()
#test2()
#test3()
#test4()
#test5()
#test6()

input("Press return to exit\n");
e.stop()
class Test(unittest.TestCase):


    def setUp(self):
        self.ctx = zmq.Context.instance()
        self.control = self.ctx.socket(zmq.DEALER)
        self.eventloop = EventLoop(self.ctx,
                                   "inproc://eventloop-control",
                                   "MOEX")
        
        self.control.connect("inproc://eventloop-control")
        
        self.eventloop.start()

    def tearDown(self):
        self.eventloop.stop()
        self.ctx.destroy()
        
    def doStreamPing(self):
        self.control.send_json({"command" : "stream-ping"})
        response = self.control.recv_json()
        ping = self.stream.recv_multipart()
        self.assertEqual("success", response["result"])
        self.assertEqual(b'\x03\x00\x00\x00\x02\x00\x00\x00', ping[1])
        
    def sendControlCommand(self, json_object):
        self.control.send_multipart([b'', b'\x01', json.dumps(json_object).encode('utf-8')])
        
    def recvControlResponse(self):
        response = self.control.recv_multipart()
        self.assertEqual(b'', response[0])
        self.assertEqual(b'\x01', response[1])
        return json.loads(response[2].decode('utf-8'))
    
    def sendStreamCredit(self):
        self.control.send_multipart([b'', b'\x03'])
        
    def recvStreamPacket(self):
        packet = self.control.recv_multipart()
        self.assertEqual(b'', packet[0])
        self.assertEqual(0x02, packet[1][0])
        
        return packet[2:]
        
    def doBarsCheck(self, filename, min_date, max_date, expected_period):
        
        self.sendStreamCredit()
        
        with open(filename) as csvfile:
            r = csv.DictReader(csvfile)
        
            for row in r:
                this_time = datetime.datetime.strptime(row["<DATE>"] + "-" + row["<TIME>"], "%Y%m%d-%H%M%S")
                if min_date and this_time < min_date:
                    continue
                if max_date and this_time >= max_date:
                    continue
                
                dt = int((this_time - datetime.datetime(1970, 1, 1)).total_seconds())
                
                self.sendStreamCredit()
                
                packet = self.recvStreamPacket()
                self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8'))
                data = packet[1]
                (packet_type, timestamp, useconds, datatype, p_open, p_open_frac,
                 p_high, p_high_frac, p_low, p_low_frac, p_close, p_close_frac, volume, summary_period_sec) = struct.unpack("<IQIIqiqiqiqiiI", data)
                self.assertEqual(0x02, packet_type)
                self.assertEqual(expected_period, summary_period_sec)
                self.assertEqual(0x01, datatype)
                true_open = float(row["<OPEN>"])
                true_high = float(row["<HIGH>"])
                true_low = float(row["<LOW>"])
                true_close = float(row["<CLOSE>"])
                true_vol = int(row["<VOL>"])
                self.assertEqual(dt, timestamp)
                self.assertEqual(0, useconds)
                self.assertAlmostEqual(true_open, p_open + p_open_frac / 1000000000)
                self.assertAlmostEqual(true_high, p_high + p_high_frac / 1000000000)
                self.assertAlmostEqual(true_low, p_low + p_low_frac / 1000000000)
                self.assertAlmostEqual(true_close, p_close + p_close_frac / 1000000000)
                self.assertEqual(true_vol, volume)
            
            packet = self.recvStreamPacket()
            self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8'))
            self.assertEqual(struct.pack("<II", 0x03, 0x01), packet[1])
            
    def doTicksCheck(self, filename, min_date, max_date):
        
        self.sendStreamCredit()
        
        with open(filename) as csvfile:
            r = csv.DictReader(csvfile)
        
            for row in r:
                this_time = datetime.datetime.strptime(row["<DATE>"] + "-" + row["<TIME>"], "%Y%m%d-%H%M%S")
                if min_date and this_time < min_date:
                    continue
                if max_date and this_time >= max_date:
                    continue
                
                dt = int((this_time - datetime.datetime(1970, 1, 1)).total_seconds())
                
                self.sendStreamCredit()
                
                packet = self.recvStreamPacket()
                self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8'))
                data = packet[1]
                (packet_type, timestamp, useconds, datatype, price_int, price_frac, volume) = struct.unpack("<IQIIqii", data)
                self.assertEqual(0x01, packet_type)
                self.assertEqual(0x01, datatype)
                true_price = float(row["<LAST>"])
                true_vol = int(row["<VOL>"])
                self.assertEqual(dt, timestamp)
                self.assertEqual(0, useconds)
                self.assertAlmostEqual(true_price, price_int + price_frac / 1000000000)
                self.assertEqual(true_vol, volume)
            
            packet = self.recvStreamPacket()
            self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8'))
            self.assertEqual(struct.pack("<II", 0x03, 0x01), packet[1])

    def testShutdown(self):
        self.sendControlCommand({"command" : "shutdown"})
        response = self.recvControlResponse()
        
        self.assertEqual("success", response["result"])
        
    def testBarFeed(self):
        self.sendControlCommand({ "command" : "start",
                                "src" : ["test/data/GAZP_010101_151231.txt"]})
        
        response = self.recvControlResponse()
        self.assertEqual("success", response["result"])

        self.doBarsCheck("test/data/GAZP_010101_151231.txt", None, None, 86400)
            
    def testBarFeed_timeBoundaries(self):
        self.sendControlCommand({ "command" : "start",
                                "src" : ["test/data/GAZP_010101_151231.txt"],
                                "from" : "2010-01-01",
                                "to" : "2011-01-01"})
        
        response = self.recvControlResponse()
        self.assertEqual("success", response["result"])
        
        self.doBarsCheck("test/data/GAZP_010101_151231.txt", datetime.datetime(2010, 1, 1), datetime.datetime(2011, 1, 1), 86400)
        
    def testBarFeed_timeBoundaries_incorrectBoundaries(self):
        self.sendControlCommand({ "command" : "start",
                                "src" : ["test/data/GAZP_010101_151231.txt"],
                                "from" : "2012-01-01",
                                "to" : "2011-01-01"})
        
        response = self.recvControlResponse()
        
        self.assertEqual("error", response["result"])
        
    def testBarFeed_invalidSource(self):
        self.sendControlCommand({ "command" : "start",
                                "src" : ["does-not-exist.txt"]})
        
        response = self.recvControlResponse()
        
        self.assertEqual("error", response["result"])
        
    def testTickFeed(self):
        self.sendControlCommand( {"command" : "start",
                                 "src" : ["test/data/GAZP_ticks.txt"] } )
        
        response = self.recvControlResponse()
        self.assertEqual("success", response["result"])
        
        self.doTicksCheck("test/data/GAZP_ticks.txt", None, None)
        
    def testTickFeed_timeBoundaries(self):
        self.sendControlCommand( {"command" : "start",
                                 "src" : ["test/data/GAZP_ticks.txt"],
                                 "from" : "2015-04-01 10:10:00",
                                 "to" : "2015-04-01 11:00:00" } )
        
        response = self.recvControlResponse()
        self.assertEqual("success", response["result"])
        
        self.doTicksCheck("test/data/GAZP_ticks.txt", datetime.datetime(2015, 4, 1, 10, 10), datetime.datetime(2015, 4, 1, 11, 0))