From 6340b779be906a33fb1ff22069ba0107f0ca4895 Mon Sep 17 00:00:00 2001
From: Johannes Kliemann <kliemann@componolit.com>
Date: Tue, 28 Sep 2021 15:50:49 +0200
Subject: [PATCH] Remove __getitem__ from PyRFLX

ref #783
---
 examples/apps/ping/ping.py       | 10 +++++-----
 rflx/pyrflx/package.py           |  3 ---
 rflx/pyrflx/pyrflx.py            |  3 ---
 tests/integration/benchmark.py   |  8 ++++----
 tests/integration/pyrflx_test.py | 16 ++++++++--------
 5 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/examples/apps/ping/ping.py b/examples/apps/ping/ping.py
index 17de68556..6c2e1b7d5 100755
--- a/examples/apps/ping/ping.py
+++ b/examples/apps/ping/ping.py
@@ -32,9 +32,9 @@ def icmp_checksum(message: bytes, **kwargs: object) -> int:
 
 
 PYRFLX = PyRFLX.from_specs(["specs/ipv4.rflx"], skip_model_verification=True)
-ICMP = PYRFLX["ICMP"]
+ICMP = PYRFLX.package("ICMP")
 ICMP.set_checksum_functions({"Message": {"Checksum": icmp_checksum}})
-IP = PYRFLX["IPv4"]
+IP = PYRFLX.package("IPv4")
 
 ICMP_DATA = bytes(list(range(0, 56)))
 
@@ -97,7 +97,7 @@ def ping(target: str) -> None:
 
 
 def create_request(src: int, dst: int, seq: int) -> bytes:
-    msg = ICMP["Message"]
+    msg = ICMP.new_message("Message")
     msg.set("Tag", "Echo_Request")
     msg.set("Code_Zero", 0)
     msg.set("Checksum", 0)
@@ -106,7 +106,7 @@ def create_request(src: int, dst: int, seq: int) -> bytes:
     msg.set("Data", ICMP_DATA)
     msg.update_checksums()
 
-    pkt = IP["Packet"]
+    pkt = IP.new_message("Packet")
     pkt.set("Version", 4)
     pkt.set("IHL", 5)
     pkt.set("DSCP", 0)
@@ -129,7 +129,7 @@ def create_request(src: int, dst: int, seq: int) -> bytes:
 
 
 def parse_reply(message: bytes) -> MessageValue:
-    pkt = IP["Packet"]
+    pkt = IP.new_message("Packet")
     pkt.parse(message)
     return pkt
 
diff --git a/rflx/pyrflx/package.py b/rflx/pyrflx/package.py
index 2208ce59e..1f1cec419 100644
--- a/rflx/pyrflx/package.py
+++ b/rflx/pyrflx/package.py
@@ -26,9 +26,6 @@ def new_message(
     def set_message(self, key: StrID, value: MessageValue) -> None:
         self.__messages[str(key)] = value
 
-    def __getitem__(self, key: StrID) -> MessageValue:
-        return self.new_message(key)
-
     def __iter__(self) -> Iterator[MessageValue]:
         return self.__messages.values().__iter__()
 
diff --git a/rflx/pyrflx/pyrflx.py b/rflx/pyrflx/pyrflx.py
index 6e6d6740d..953be4710 100644
--- a/rflx/pyrflx/pyrflx.py
+++ b/rflx/pyrflx/pyrflx.py
@@ -70,8 +70,5 @@ def set_checksum_functions(self, functions: Dict[StrID, Dict[str, Callable]]) ->
     def package(self, key: StrID) -> Package:
         return self.__packages[str(key)]
 
-    def __getitem__(self, key: StrID) -> Package:
-        return self.package(key)
-
     def __iter__(self) -> Iterator[Package]:
         return self.__packages.values().__iter__()
diff --git a/tests/integration/benchmark.py b/tests/integration/benchmark.py
index a4a25b00d..abb768d4f 100755
--- a/tests/integration/benchmark.py
+++ b/tests/integration/benchmark.py
@@ -21,16 +21,16 @@ def __init__(self, specdir: Path) -> None:
             skip_model_verification=True,
             skip_message_verification=True,
         )
-        self.__ipv4 = self.__pyrflx["IPv4"]
-        self.__icmp = self.__pyrflx["ICMP"]
+        self.__ipv4 = self.__pyrflx.package("IPv4")
+        self.__icmp = self.__pyrflx.package("ICMP")
         print(f"Loaded in {perf_counter() - start} seconds")
 
     def generate(self, count: int = 2 ** 16) -> Generator[bytes, None, None]:
         if count > 2 ** 16:
             raise ValueError
         for ident in range(0, count):
-            msg = self.__icmp["Message"]
-            pkt = self.__ipv4["Packet"]
+            msg = self.__icmp.new_message("Message")
+            pkt = self.__ipv4.new_message("Packet")
             msg.set("Tag", "Echo_Request")
             msg.set("Code_Zero", 0)
             msg.set("Checksum", 0)
diff --git a/tests/integration/pyrflx_test.py b/tests/integration/pyrflx_test.py
index d8c4be22d..ecb7d9e82 100644
--- a/tests/integration/pyrflx_test.py
+++ b/tests/integration/pyrflx_test.py
@@ -196,7 +196,7 @@ def test_imported_literals(tmp_path: Path) -> None:
         )
 
     pyrflx_ = PyRFLX.from_specs([str(tmp_path / "test.rflx")])
-    m = pyrflx_["Test"]["Message"]
+    m = pyrflx_.package("Test").new_message("Message")
 
     m.set("A", "E1")
     assert m.valid_message
@@ -251,7 +251,7 @@ def test_no_verification_ethernet(ethernet_frame_value: MessageValue) -> None:
         skip_model_verification=True,
         skip_message_verification=True,
     )
-    frame_unv = pyrflx_["Ethernet"]["Frame"]
+    frame_unv = pyrflx_.package("Ethernet").new_message("Frame")
     frame_unv.set("Destination", int("FFFFFFFFFFFF", 16))
     frame_unv.set("Source", int("0", 16))
     frame_unv.set("Type_Length_TPID", int("0800", 16))
@@ -264,9 +264,9 @@ def test_no_verification_ethernet(ethernet_frame_value: MessageValue) -> None:
 def test_no_verification_sequence_nested_messages(
     sequence_message_package: Package, message_sequence_value: MessageValue
 ) -> None:
-    sequence_message_one = sequence_message_package["Sequence_Element"]
+    sequence_message_one = sequence_message_package.new_message("Sequence_Element")
     sequence_message_one.set("Byte", 5)
-    sequence_message_two = sequence_message_package["Sequence_Element"]
+    sequence_message_two = sequence_message_package.new_message("Sequence_Element")
     sequence_message_two.set("Byte", 6)
     sequence: List[TypeValue] = [sequence_message_one, sequence_message_two]
     message_sequence_value.set("Length", 2)
@@ -278,11 +278,11 @@ def test_no_verification_sequence_nested_messages(
         skip_model_verification=True,
         skip_message_verification=True,
     )
-    sequence_message_package_unv = pyrflx_["Sequence_Message"]
-    sequence_message_unv = sequence_message_package_unv["Message_Sequence"]
-    sequence_element_one_unv = sequence_message_package_unv["Sequence_Element"]
+    sequence_message_package_unv = pyrflx_.package("Sequence_Message")
+    sequence_message_unv = sequence_message_package_unv.new_message("Message_Sequence")
+    sequence_element_one_unv = sequence_message_package_unv.new_message("Sequence_Element")
     sequence_element_one_unv.set("Byte", 5)
-    sequence_element_two_unv = sequence_message_package_unv["Sequence_Element"]
+    sequence_element_two_unv = sequence_message_package_unv.new_message("Sequence_Element")
     sequence_element_two_unv.set("Byte", 6)
     sequence_unv: List[TypeValue] = [sequence_element_one_unv, sequence_element_two_unv]
     sequence_message_unv.set("Length", 2)