예제 #1
0
def test_get_segments():
    collection = SegmentCollection.from_segments(
        [Segment("36CF", 1),
         Segment("CPD"),
         Segment("36CF", 2)])
    segments = list(collection.get_segments("36CF"))
    assert [Segment("36CF", 1), Segment("36CF", 2)] == segments
예제 #2
0
 def test_compare_equal_segments(self):
     """Just make sure that comparing Segment objects works"""
     a = [Segment("RFF", ["PD", "50515"])]
     b = [Segment("RFF", ["PD", "50515"])]
     assert a is not b, \
         "Two separatedly created Segment objects may not be a singleton."
     self.assertEqual(a, b)
예제 #3
0
def test_with_una_in_segments(serializer):
    assert_segments(
        serializer,
        "RFF+PD+45761",
        [Segment("UNA", ":+,? '"),
         Segment("RFF", "PD", "45761")],
    )
예제 #4
0
    def test_get_segments(self):

        message = Message.from_segments(
            [Segment("36CF", 1), Segment("CPD"), Segment("36CF", 2)]
        )
        segments = list(message.get_segments("36CF"))
        self.assertEqual([Segment("36CF", 1), Segment("36CF", 2)], segments)
예제 #5
0
def test_compare_equal_segments(parser, default_una_segment):
    """Just make sure that comparing Segment objects works"""
    a = Segment("RFF", ["PD", "50515"])
    b = Segment("RFF", ["PD", "50515"])
    assert a == b
    assert (
        a is not b
    ), "Two separatedly, but visually identically created Segment objects may not be the same object."
예제 #6
0
    def test_get_segment(self):

        message = Message.from_segments([
            Segment("36CF", 1),
            Segment("36CF", 2),
        ])
        segment = message.get_segment("36CF")
        self.assertEqual(Segment("36CF", 1), segment)
예제 #7
0
def add_footer(message: SegmentCollection, message_data: dict):
    number_of_segments = len(message.segments)
    message.add_segment(
        Segment("UNT", str(number_of_segments),
                message_data['message_reference_number']))
    message.add_segment(
        Segment("UNZ", "1", message_data['interchangeControlReference']))
    pass
예제 #8
0
def add_equipment(message: SegmentCollection, equipment_data: dict):
    #Blocks, refrigerated tank
    message.add_segment(
        Segment("EQD", "BL", equipment_data['identification_number'],
                ["7", "ZZZ", "5"], None, "3", "5"))
    message.add_segment(
        Segment("MEA", "AAE", "G",
                ["KGM", equipment_data['total_gross_weight']]))  # weight
    message.add_segment(Segment("MEA", "AAE", "AAW", ["MTQ", "100"]))  # volume
예제 #9
0
def test_empty_interchange_w_una():
    i = Interchange.from_segments(
        [
            Segment("UNA", ":+,? '"),
            Segment("UNB", ["UNOC", "1"], "1234", "3333", ["200102", "2212"], "42"),
            Segment("UNZ", "0", "42"),
        ]
    )
    assert str(i) == ("UNA:+,? '" "UNB+UNOC:1+1234+3333+200102:2212+42'" "UNZ+0+42'")
예제 #10
0
def test_wikipedia_file():
    message = Message.from_file("{}/wikipedia.edi".format(path))
    # make some checks
    assert message.get_segment("UNB") == Segment("UNB", ["IATB", "1"], "6XPPC",
                                                 "LHPPC", ["940101", "0950"],
                                                 "1")
    assert message.get_segment("IFT") == Segment("IFT", "3",
                                                 "XYZCOMPANY AVAILABILITY")
    assert message.get_segment("TVL") == Segment(
        "TVL", ["240493", "1000", "", "1220"], "FRA", "JFK", "DL", "400", "C")
예제 #11
0
def test_get_segments_w_predicate():
    collection = SegmentCollection.from_segments([
        Segment("A", '1', 'a'),
        Segment("A", '2', 'b'),
        Segment("A", '1', 'c'),
    ])
    segments = collection.get_segments("A", lambda x: x[0] == '1')
    assert [
        Segment("A", '1', 'a'),
        Segment("A", '1', 'c'),
    ] == list(segments)
예제 #12
0
def add_headers(message: SegmentCollection, message_data: dict):
    message.add_segment(
        Segment("UNB", ["UNOB", "2"], message_data['sender_identification'],
                message_data['recipient_identification'],
                [message_data['send_date'], message_data['send_time']],
                message_data['interchangeControlReference']))
    message.add_segment(
        Segment("UNH", message_data['message_reference_number'],
                ["CUSCAR", "D", "95B", "UN", "LOT10"]))
    message.add_segment(
        Segment("BGM", "85", message_data['document_reference_number'], "9"))
예제 #13
0
def add_cargo_report_sender_info(message: SegmentCollection,
                                 message_data: dict):
    message.add_segment(
        Segment("DTM",
                ["137", message_data['submit_to_customs_timestamp'], "203"]))
    message.add_segment(
        Segment("RFF",
                ["SS", message_data['sellers_message_reference_number']]))
    message.add_segment(
        Segment("NAD", "MS",
                [message_data['sender_identification'], "172", "20"]))
예제 #14
0
def test_get_segments_w_predicate():
    collection = RawSegmentCollection.from_segments(
        [
            Segment("A", "1", "a"),
            Segment("A", "2", "b"),
            Segment("A", "1", "c"),
        ]
    )
    segments = collection.get_segments("A", lambda x: x[0] == "1")
    assert [
        Segment("A", "1", "a"),
        Segment("A", "1", "c"),
    ] == list(segments)
예제 #15
0
def test_escape_character(parser, default_una_segment):
    _assert_segments(
        parser,
        default_una_segment,
        "ERC+10:The message does not make sense??",
        [Segment("ERC", ["10", "The message does not make sense?"])],
    )
예제 #16
0
 def get_header_segment(self) -> Segment:
     return Segment(
         "UNH",
         self.reference_number,
         [str(i) for i in self.identifier],
         *self.extra_header_elements,
     )
예제 #17
0
def test_invoice_file():
    message = Interchange.from_file("{}/invoice1.edi".format(path))
    # make some checks
    assert message.get_header_segment() == Segment(
        "UNB",
        ["UNOA", "1"],
        "01010000253001",
        "O0013000093SCHA-Z59",
        ["991006", "1902"],
        "PAYO0012101221",
    )
    assert message.get_segment("DTM") == Segment(
        "DTM", ["137", "199910060000", "102"])
    assert message.get_segment("NAD") == Segment(
        "NAD", "BT", ["VAUXHALL MOTORS LTD", "", "91"])
    assert message.get_segment("RFF") == Segment("RFF", ["VA", "382324067"])
예제 #18
0
def test_escape_component_separator(parser, default_una_segment):

    _assert_segments(
        parser,
        default_una_segment,
        "ERC+10:Name?: Craig",
        [Segment("ERC", ["10", "Name: Craig"])],
    )
예제 #19
0
def test_escape_sequence(parser, default_una_segment):

    _assert_segments(
        parser,
        default_una_segment,
        "ERC+10:?:?+???' - ?:?+???' - ?:?+???'",
        [Segment("ERC", ["10", ":+?' - :+?' - :+?'"])],
    )
예제 #20
0
def test_escape_segment_terminator(parser, default_una_segment):

    _assert_segments(
        parser,
        default_una_segment,
        "ERC+10:Craig?'s",
        [Segment("ERC", ["10", "Craig's"])],
    )
예제 #21
0
def test_escape_decimal_point(parser, default_una_segment):

    _assert_segments(
        parser,
        default_una_segment,
        "QTY+136:12,235",
        [Segment("QTY", ["136", "12,235"])],
    )
예제 #22
0
def test_escape_data_separator(parser, default_una_segment):

    _assert_segments(
        parser,
        default_una_segment,
        "DTM+735:?+0000:406",
        [Segment("DTM", ["735", "+0000", "406"])],
    )
예제 #23
0
 def get_header_segment(self) -> Segment:
     return Segment(
         "UNB",
         [str(i) for i in self.syntax_identifier],
         self.sender,
         self.recipient,
         [f'{self.timestamp:%y%m%d}', f'{self.timestamp:%H%M}'],
         self.control_reference,
         *self.extra_header_elements,
     )
예제 #24
0
def add_details_of_transport_and_arrival(message: SegmentCollection,
                                         message_data: dict):
    message.add_segment(
        Segment("TDT", "20", message_data['conveyance_reference_number'], "1",
                None, [
                    message_data['sender_identification'], "172", "20",
                    message_data['carrier_name']
                ], None, None, [
                    message_data['means_of_transport_identification'], "103",
                    None, message_data['means_of_transport']
                ]))
    message.add_segment(
        Segment("LOC", "60", [message_data['arrival_port'], None, "139"]))
    message.add_segment(
        Segment("DTM",
                ["132", message_data['arrival_datetime_estimated'], "203"]))
    message.add_segment(
        Segment("DTM",
                ["232", message_data['arrival_datetime_scheduled'], "203"]))
예제 #25
0
 def get_header_segment(self) -> Segment:
     return Segment(
         self.HEADER_TAG,
         [str(i) for i in self.syntax_identifier],
         self.sender,
         self.recipient,
         [
             "{:%y%m%d}".format(self.timestamp), "{:%H%M}".format(
                 self.timestamp)
         ],
         self.control_reference,
         *self.extra_header_elements,
     )
예제 #26
0
    def get_footer_segment(self) -> Segment:
        """:returns a (UNZ) footer segment with correct segment count and control reference.

        It counts either of the number of messages or, if used, of the number of functional groups
        in an interchange (TODO)."""

        # FIXME: count functional groups (UNG/UNE) correctly
        cnt = 0
        for segment in self.segments:
            if segment.tag == Message.HEADER_TAG:
                cnt += 1
        if cnt == 0:
            cnt = len(self.segments)

        return Segment(
            self.FOOTER_TAG,
            str(cnt),
            self.control_reference,
        )
예제 #27
0
def test_split_by():
    def _serialize(collections: Iterable[RawSegmentCollection]) -> List[List[str]]:
        lst = []
        global_lst = []
        for collection in collections:
            if lst:
                global_lst.append(lst)
                lst = []
            for segment in collection.segments:
                lst.append(segment.tag)
        if lst:
            global_lst.append(lst)
        return global_lst

    assert _serialize(RawSegmentCollection.from_segments([]).split_by("A")) == []
    collection = RawSegmentCollection.from_segments(
        Segment(i) for i in ["A", "B", "A", "A", "B", "D"]
    )
    assert _serialize(collection.split_by("Z")) == []
    assert _serialize(collection.split_by("A")) == [["A", "B"], ["A"], ["A", "B", "D"]]
    assert _serialize(collection.split_by("A")) == [["A", "B"], ["A"], ["A", "B", "D"]]
예제 #28
0
def test_get_non_existing_element():
    segment = Segment("OMD", *elements)
    with pytest.raises(IndexError):
        segment.elements[7]
예제 #29
0
def test_get_list_element():
    segment = Segment("OMD", *elements)
    assert segment.elements[1] == ["field2", "extra"]
예제 #30
0
def test_get_single_element():
    segment = Segment("OMD", *elements)
    assert segment.elements[0] == "field1"