class DoFp( unittest.TestCase ): def setUp(self): print "Setup!!!" from datetime import datetime for relpath in [ '../data', './data' ]: fp = os.path.abspath( relpath) if os.path.exists(fp): break print fp self.bp = BerkeleyPersister( fp, "SENDER","PHROMS", dt = datetime( 2009, 1, 11) ) self.spec = parse_specification(version = "FIX.4.2") (self.inDb,self.outDb) = self.bp.getTodayPersister( ) # data can arrive in arbitrary shapes and sizes so need # to ensure that a parser can cope with all the data ( even byte-at-a-time) print [ x.partition("=") for x in "a=b|".split("|") ]
from datetime import datetime import time from FIXParser import SynchronousParser from FIXSpec import parse_specification from pyfix.persistence import BerkeleyPersister fixSpec = parse_specification(version="FIX.4.2") fr = "/Users/andy/persist/send" bp = BerkeleyPersister(fr, dt=datetime(2009, 1, 13)) (inDb, outDb) = bp.getTodayPersister("SENDER", "PYFIX") #p = BerkeleyPersister( fileRoot, dt = datetime(2009, 11,1) ) p = SynchronousParser(fixSpec) def doit(): for db in (inDb, outDb): start = time.time() i = 0.0 c = db.cursor() while True: v = c.next() if not v: break msg, _, _ = p.feed(v[1]) i += 1 endTime = time.time() dur = endTime - start print "%s parsed %s messages in %s secs (%s/sec)" % (db, i, dur,
class DoFp( unittest.TestCase ): def setUp(self): print "Setup!!!" from datetime import datetime for relpath in [ '../data', './data' ]: fp = os.path.abspath( relpath) if os.path.exists(fp): break print fp self.bp = BerkeleyPersister( fp, "SENDER","PHROMS", dt = datetime( 2009, 1, 11) ) self.spec = parse_specification(version = "FIX.4.2") (self.inDb,self.outDb) = self.bp.getTodayPersister( ) # data can arrive in arbitrary shapes and sizes so need # to ensure that a parser can cope with all the data ( even byte-at-a-time) print [ x.partition("=") for x in "a=b|".split("|") ] print [ x.partition("=") for x in "a=b|c".split("|") ] print [ x.partition("=") for x in "a=b|c=".split("|") ] print [ x.partition("=") for x in "a=b|c=d".split("|") ] print self.inDb.stat() # Build a big pyfix string c = self.inDb.cursor() self.megaString = '' messages = 0 while True: i_s = c.next() if not i_s: break _, s = i_s self.megaString+= s print "Megastring is %s long" % len(self.megaString ) def _test_basic(self): # Test the first fp = FIXParser(self.spec) def doit(x): c = x.cursor() while True: d = c.next() if not d: break #print d print "=" * 80 print d[1] fp.feed(d[1]) print "In" print "=" * 80 doit( self.inDb ) print "Out" print "=" * 80 doit( self.outDb ) def testBigStringOneByteAtATime(self): cat = Concat() fp = FIXParser(self.spec, cb = cat.onMsg) for x in self.megaString: fp.feed(x) assert cat.buf == self.megaString def testBigString(self): # Feed the whole thing cat2 = Concat() fp2 = FIXParser(self.spec,cb = cat2.onMsg) fp2.feed(self.megaString) assert cat2.buf == self.megaString def testDodgyStart(self): for i in range(0, len(self.megaString), 10): cat = Concat() fp = FIXParser(self.spec, cb = cat.onMsg, on_discard= cat.onDiscard) s = self.megaString[i:] fp.feed(s) check =len(cat.buf) +fp.checksum() + len(cat.discardBuffer) assert check == len(s) if i % 100 == 0: print "%s -> %s..." % (i, cat.messages) print "%s bytes sent. %s accounted for (%s parsed %s inbuffer %s discarded" % (len(s), check, len(cat.buf), fp.checksum(), cat.discardBuffer) def testDodgyEnd(self): for i in range(0, len(self.megaString), 10): cat = Concat() fp = FIXParser(self.spec, cb = cat.onMsg, on_discard= cat.onDiscard) s = self.megaString[:i] fp.feed(s) check =len(cat.buf) +fp.checksum() + len(cat.discardBuffer) self.assertEqual( check , len(s) ) if i % 100 == 0: print "%s -> %s..." % (i, cat.messages) print "%s bytes sent. %s accounted for (%s parsed %s inbuffer %s discarded" % (len(s), check, len(cat.buf), fp.checksum(), cat.discardBuffer)
from datetime import datetime import time from FIXParser import SynchronousParser from FIXSpec import parse_specification from pyfix.persistence import BerkeleyPersister fixSpec = parse_specification( version= "FIX.4.2" ) fr = "/Users/andy/persist/send" bp = BerkeleyPersister(fr, dt = datetime( 2009, 1, 13) ) (inDb,outDb) = bp.getTodayPersister( "SENDER", "PYFIX") #p = BerkeleyPersister( fileRoot, dt = datetime(2009, 11,1) ) p = SynchronousParser(fixSpec) def doit(): for db in ( inDb, outDb): start = time.time() i = 0.0 c = db.cursor() while True: v = c.next() if not v: break msg, _, _ = p.feed(v[1]) i += 1 endTime =time.time() dur = endTime - start print "%s parsed %s messages in %s secs (%s/sec)" % (db, i, dur , i/dur ) doit()