Skip to content

Commit 02dbb1d

Browse files
committed
remove unused syntax_identifier and syntax version overriding
fixes #99
1 parent 5f6efc7 commit 02dbb1d

File tree

5 files changed

+20
-28
lines changed

5 files changed

+20
-28
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
- BREAKING CHANGE: Remove SegmentCollection
1212
- BREAKING CHANGE: Remove FileSourcableMixin
1313
- BREAKING CHANGE: Segment() calls *must* provide the tag name now as the first parameter.
14+
- BREAKING CHANGE: Parser cannot override syntax_version and syntax_identifier anymore. It is determined from the UNB header.
1415
- change plugin system from `metaclass` to `__init_subclass__`
1516
- raise ValidationError, not AssertionError, when ServiceAdviceString is not 6 chars long
1617
- Drop support for Python versions < 3.10 (3.8 was EOL 2024-10-07, 3.9 not much used in Distros.)

pydifact/parser.py

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
from pydifact.token import Token
3535
from pydifact.segments import Segment, SegmentFactory
3636
from pydifact.control import Characters
37+
import logging
38+
39+
logger = logging.getLogger(__name__)
3740

3841

3942
class Parser:
@@ -52,16 +55,15 @@ def __init__(
5255
self,
5356
factory: SegmentFactory | None = None,
5457
characters: Characters | None = None,
55-
version: str = "",
5658
directory: str = "",
57-
syntax_identifier: str = "",
5859
) -> None:
5960
"""Initializes parser with segment factory and control characters"""
6061
self.factory = factory or SegmentFactory()
6162
self.characters = characters or Characters()
62-
self.version = version
6363
self.directory = directory
64-
self.syntax_identifier = syntax_identifier
64+
65+
self.syntax_identifier = ""
66+
self.version = ""
6567

6668
def parse(
6769
self,
@@ -121,7 +123,7 @@ def parse(
121123

122124
for raw_segment in raw_segments:
123125
yield self.convert_raw_segment_to_segment(
124-
raw_segment, version=self.version, directory=self.directory
126+
raw_segment, directory=self.directory
125127
)
126128

127129
@staticmethod
@@ -252,7 +254,6 @@ def convert_tokens_to_raw_segments(
252254
def convert_raw_segment_to_segment(
253255
self,
254256
raw_segment: Elements,
255-
version: str = EDI_DEFAULT_VERSION,
256257
directory: str = EDI_DEFAULT_DIRECTORY,
257258
) -> Segment:
258259
name = raw_segment.pop(0)
@@ -270,23 +271,13 @@ def convert_raw_segment_to_segment(
270271
# then we don't override it here, even if the UNB segment has another
271272
# value. The user might want to override this manually.
272273

273-
print(f"Found edifact syntax '{raw_segment[0][0]}' in UNB header", end="")
274-
if self.syntax_identifier:
275-
print(", but using override syntax '{self.syntax_identifier}'")
276-
else:
277-
print(".")
278-
self.syntax_identifier = raw_segment[0][0]
279-
280-
print(
281-
f"Found edifact version '{int(raw_segment[0][1])}' in UNB header",
282-
end="",
274+
self.syntax_identifier = raw_segment[0][0]
275+
self.version = raw_segment[0][1]
276+
logger.info(
277+
f"Using edifact syntax identifier '{self.syntax_identifier}' with "
278+
f"syntax version {self.version} in UNB header.",
283279
)
284-
if self.version:
285-
print(f", but using override version '{self.version}'.")
286280

287-
else:
288-
self.version = int(raw_segment[0][1])
289-
print(".")
290281
return self.factory.create_segment(
291282
name,
292283
*raw_segment,

pydifact/segmentcollection.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ def from_segments(
525525
):
526526
raise EDISyntaxError("Syntax identifier malformed.")
527527

528+
syntax_identifier = unb.elements[0][0]
528529
syntax_version = unb.elements[0][1]
529530

530531
# Validate UNB segment according to the applicable syntax version
@@ -582,10 +583,10 @@ def from_segments(
582583
)
583584
else:
584585
raise EDISyntaxError("Timestamp of file-creation malformed.")
585-
syntax_identifier = (unb.elements[0][0], int(unb.elements[0][1]))
586+
586587
timestamp = datetime.datetime.strptime(datetime_str, datetime_fmt)
587588
interchange = Interchange(
588-
syntax_identifier=syntax_identifier,
589+
syntax_identifier=(syntax_identifier, int(syntax_version)),
589590
sender=unb.elements[1],
590591
recipient=unb.elements[2],
591592
timestamp=timestamp,

tests/data/order2.edi

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,3 @@ PRI+AAA:25.00'
1010
UNS+S'
1111
CNT+2:1'
1212
UNT+11+1'
13-
UNB+1'

tests/test_input_output.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,12 @@ def test_order2_file():
9696

9797
# UNH+1+ORDERS:D:01B:UN:EAN010'
9898
assert message.get_segment("UNH") == Segment(
99-
"UNH", "1", ["ORDERS", "D", "01B", "UN", "EAN010"]
99+
"UNH", "1", ["ORDERS", "D", "96A", "UN"]
100100
)
101-
assert len(message.segments) == 24
102-
assert message.recipient == ["4019315000007", "14"]
101+
assert len(message.segments) == 11
102+
assert message.recipient == "RECEIVERID"
103103
# Sender identification and Partner identification code qualifier
104-
assert message.sender == ["4000000000000", "14"]
104+
assert message.sender == "SENDERID"
105105

106106

107107
def test_patient1_file():

0 commit comments

Comments
 (0)