Skip to content

Commit dcf8b0d

Browse files
committed
Allow use of enums as tag/value
1 parent c9a50df commit dcf8b0d

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

simplefix/message.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@
3838
import sys
3939
import time
4040
import warnings
41+
from enum import Enum
4142

4243
from .constants import SOH_STR, TAG_BEGINSTRING, TAG_BODYLENGTH, TAG_CHECKSUM, TAG_MSGTYPE
4344
from .enums import TagType
4445

4546

4647
def fix_val(value):
47-
"""Make a FIX value from a string, bytes, or number."""
48+
"""Make a FIX value from a string, bytes, number, or bytes Enums."""
4849
if type(value) is bytes:
4950
return value
5051

@@ -54,11 +55,15 @@ def fix_val(value):
5455
if type(value) is str:
5556
return bytes(value, 'UTF-8')
5657

58+
# e.g. members of simplefix.enums
59+
if isinstance(value, Enum):
60+
return value.value
61+
5762
return bytes(str(value), 'ASCII')
5863

5964

6065
def fix_tag(value):
61-
"""Make a FIX tag value from string, bytes, or integer."""
66+
"""Make a FIX tag value from string, bytes, integer, or TagType."""
6267
if sys.version_info[0] == 2:
6368
return bytes(value)
6469

@@ -68,6 +73,9 @@ def fix_tag(value):
6873
if type(value) is str:
6974
return value.encode('ASCII')
7075

76+
if isinstance(value, TagType):
77+
value = value.value
78+
7179
return str(value).encode('ASCII')
7280

7381

test/test_message.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
########################################################################
2525

2626
import datetime
27-
import sys
2827
import time
2928
import unittest
3029

3130
from simplefix import FixMessage
31+
from simplefix.enums import TagType, MSGTYPE
3232
from simplefix.message import fix_tag, fix_val
3333

3434

@@ -922,6 +922,11 @@ def test_tag_int(self):
922922
self.assertEqual(b"123", fix_tag(123))
923923
self.assertEqual(bytes, type(fix_tag(123)))
924924

925+
def test_tag_enum(self):
926+
"""Test enum tag value returns bytes."""
927+
self.assertEqual(b"123", fix_tag(TagType.GAPFILLFLAG))
928+
self.assertEqual(bytes, type(fix_tag(TagType.GAPFILLFLAG)))
929+
925930
def test_val_bytes(self):
926931
"""Test bytes value returns bytes."""
927932
self.assertEqual(b"123", fix_val(b"123"))
@@ -932,6 +937,11 @@ def test_val_str(self):
932937
self.assertEqual(b"123", fix_val("123"))
933938
self.assertEqual(bytes, type(fix_val("123")))
934939

940+
def test_val_bytes(self):
941+
"""Test bytes value returns bytes."""
942+
self.assertEqual(b"1", fix_val(MSGTYPE.TEST_REQUEST))
943+
self.assertEqual(bytes, type(fix_val(MSGTYPE.TEST_REQUEST)))
944+
935945

936946
if __name__ == "__main__":
937947
unittest.main()

0 commit comments

Comments
 (0)