From 2aaab566d7aa9e27625811e5a356254a9f29c036 Mon Sep 17 00:00:00 2001 From: Kasia Kozlowska <36536946+KasiaKoz@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:33:55 +0000 Subject: [PATCH] Fix reading java array type (#216) * fix reading java array type * update CHANGELOG.md --- CHANGELOG.md | 1 + genet/input/matsim_reader.py | 2 +- tests/test_input_matsim_reader.py | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49546920..243dbb5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * Fixed summary report: * Intermodal Access/Egress reporting is more general (not expecting just car and bike mode access to PT) [#204](https://github.com/arup-group/genet/pull/204) * Node/Links numbers were reported incorrectly (switched) [#207](https://github.com/arup-group/genet/pull/207) +* Fixed reading `java.lang.Array` types in MATSim xml files [#216](https://github.com/arup-group/genet/pull/216) ### Changed * GeNet's pre-baked python scripts have been retired in favour of CLI [#194](https://github.com/arup-group/genet/pull/194) diff --git a/genet/input/matsim_reader.py b/genet/input/matsim_reader.py index 667880c8..11948d18 100644 --- a/genet/input/matsim_reader.py +++ b/genet/input/matsim_reader.py @@ -138,7 +138,7 @@ def _read_additional_attrib_text(elem): f"Elem {elem.attrib['name']} is being read as None. Defaulting value to empty string." ) elif ("," in elem.text) and elem.attrib["name"] != "geometry": - t = set(elem.text.split(",")) + t = set(elem.text.strip("{}").replace(("'"), "").replace(" ", "").split(",")) else: t = elem.text return t diff --git a/tests/test_input_matsim_reader.py b/tests/test_input_matsim_reader.py index 865d186a..7dae80d2 100644 --- a/tests/test_input_matsim_reader.py +++ b/tests/test_input_matsim_reader.py @@ -1038,3 +1038,25 @@ def make_network_with_elevations_xml_string(nodes_with_elevations_dict, link_dic network_xml += " " network_xml += " " return network_xml + + +class ElemWithText: + def __init__(self, text): + self.text = text + self.attrib = {"name": "doesn't matter"} + + +@pytest.mark.parametrize( + "case,input_elem_text,expected_output", + [ + ("is_just_a_string", "hello", "hello"), + ("is_a_java_array", "{'hello', 'yes'}", {"hello", "yes"}), + ("is_none", None, ""), + ], +) +def test_read_additional_attrib_text(case, input_elem_text, expected_output): + elem = ElemWithText(input_elem_text) + output = matsim_reader._read_additional_attrib_text(elem=elem) + assert output == expected_output, AssertionError( + f"Elem for case {case} did not produce the expected result" + )