Skip to content

Commit

Permalink
Support extra elements for header segment of message and interchange
Browse files Browse the repository at this point in the history
  • Loading branch information
JocelynDelalande committed Sep 10, 2020
1 parent 0221df9 commit 5047490
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
18 changes: 14 additions & 4 deletions pydifact/segmentcollection.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
# THE SOFTWARE.

import collections
from typing import List, Optional, Tuple
from typing import List, Optional, Tuple, Union
import datetime

from pydifact.parser import Parser
Expand All @@ -34,12 +34,18 @@
class AbstractSegmentsContainer:
"""Represent a collection of EDI Segments for both reading and writing."""

def __init__(self):
def __init__(self, extra_header_elements: List[Union[str, List[str]]] = []):
"""
:param extra_header_elements: a list of elements to be appended at the end
of the header segment (same format as Segment() constructor *elements).
"""

# The segments that make up this message
self.segments = []
self.characters = Characters()

self.extra_header_elements = extra_header_elements

# Flag whether the UNA header is present
self.has_una_segment = False

Expand Down Expand Up @@ -189,8 +195,9 @@ def __init__(
self,
reference_number: str,
identifier: Tuple,
*args, **kwargs
):
super().__init__()
super().__init__(*args, **kwargs)
self.reference_number = reference_number
self.identifier = identifier

Expand All @@ -199,6 +206,7 @@ def get_header_segment(self) -> Segment:
"UNH",
self.reference_number,
[str(i) for i in self.identifier],
*self.extra_header_elements,
)

def get_footer_segment(self) -> Segment:
Expand Down Expand Up @@ -232,8 +240,9 @@ def __init__(
syntax_identifier: Tuple[str, int],
delimiters: Characters = Characters(),
timestamp: datetime.datetime = None,
*args, **kwargs
):
super().__init__()
super().__init__(*args, **kwargs)
self.sender = sender
self.recipient = recipient
self.control_reference = control_reference
Expand All @@ -249,6 +258,7 @@ def get_header_segment(self) -> Segment:
self.recipient,
['{:%y%m%d}'.format(self.timestamp), '{:%H%M}'.format(self.timestamp)],
self.control_reference,
*self.extra_header_elements,
)

def get_footer_segment(self) -> Segment:
Expand Down
16 changes: 16 additions & 0 deletions tests/test_segmentcollection.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,22 @@ def test_empty_interchange(interchange):
)


def test_empty_interchange_w_extra_header(interchange):
i = Interchange(
sender='1234',
recipient='3333',
timestamp=datetime.datetime(2020, 1, 2, 22, 12),
control_reference='42',
syntax_identifier=('UNOC', 1),
extra_header_elements=[['66', '2'], 'ZZ']
)

assert str(i) == (
"UNB+UNOC:1+1234+3333+200102:2212+42+66:2+ZZ'"
"UNZ+0+42'"
)


def test_empty_interchange_from_str():
i = Interchange.from_str(
"UNB+UNOC:1+1234+3333+200102:2212+42'"
Expand Down

0 comments on commit 5047490

Please sign in to comment.