Source code for fixtrate.factories.base
import datetime as dt
from importlib import import_module
from .. import constants as fc
[docs]class FixMessageFactory:
def __init__(self, conf):
self.conf = conf
self._mod = self.get_helper_mod()
[docs] def get_helper_mod(self):
version = self.conf.version.name.lower()
mdl = import_module('.{}'.format(version, __name__))
names = mdl.__dict__['__all__']
for name in names:
setattr(self, name, getattr(mdl, name))
@staticmethod
def __wrap_factory_func(func):
def make(self, *args, **kwargs):
msg = func(*args, **kwargs)
self.append_standard_header(
msg,
kwargs.get('seq_num'),
kwargs.get('timestamp')
)
return msg
return make
[docs] def append_standard_header(
self,
msg,
seq_num=None,
timestamp=None
):
"""
Create a base message with standard headers set.
BodyLength and Checksum are handled by SimpleFix
:param msg:
:param seq_num:
:param timestamp:
:return:
"""
msg.append_pair(
fc.FixTag.BeginString,
self.conf['FIX_VERSION'],
header=True
)
msg.append_pair(
fc.FixTag.SenderCompID,
self.conf['FIX_SENDER_COMP_ID'],
header=True
)
msg.append_pair(
fc.FixTag.TargetCompID,
self.conf['FIX_TARGET_COMP_ID'],
header=True
)
if seq_num:
msg.append_pair(
fc.FixTag.MsgSeqNum,
self.store.increment_local_sequence_number(),
header=True
)
if timestamp is None:
timestamp = dt.datetime.utcnow()
msg.append_utc_timestamp(
fc.FixTag.SendingTime,
timestamp=timestamp,
precision=6,
header=True
)