Repository: bo4e/BO4E-python (language: python)

Issue:
Implement COM StandorteigenschaftenStrom
https://www.bo4e.de/dokumentation/komponenten/com-standorteigenschaften-strom
for eic see #147 


Discussion / hints:

Fix patch:
diff --git a/src/bo4e/com/standorteigenschaftenstrom.py b/src/bo4e/com/standorteigenschaftenstrom.py
new file mode 100644
index 000000000..6a4b1aff3
--- /dev/null
+++ b/src/bo4e/com/standorteigenschaftenstrom.py
@@ -0,0 +1,41 @@
+"""
+Contains StandorteigenschaftenStrom class
+and corresponding marshmallow schema for de-/serialization
+"""
+
+import attr
+from marshmallow import fields
+
+from bo4e.com.com import COM, COMSchema
+
+
+# pylint: disable=too-few-public-methods
+@attr.s(auto_attribs=True, kw_only=True)
+class StandorteigenschaftenStrom(COM):
+    """
+    Standorteigenschaften der Sparte Strom
+    """
+
+    # required attributes
+    #: Die EIC-Nummer des Bilanzierungsgebietes
+    bilanzierungsgebiet_eic: str = attr.ib(validator=attr.validators.instance_of(str))
+    # todo: use EIC validation: https://github.com/Hochfrequenz/BO4E-python/issues/147
+
+    #: Der Name der Regelzone
+    regelzone: str = attr.ib(validator=attr.validators.instance_of(str))
+
+    #: De EIC-Nummer der Regelzone
+    regelzone_eic: str = attr.ib(validator=attr.validators.instance_of(str))
+    # todo: use EIC validation: https://github.com/Hochfrequenz/BO4E-python/issues/147
+
+
+class StandorteigenschaftenStromSchema(COMSchema):
+    """
+    Schema for de-/serialization of StandorteigenschaftenStrom.
+    """
+
+    class_name = StandorteigenschaftenStrom
+    # required attributes
+    bilanzierungsgebiet_eic = fields.Str()
+    regelzone = fields.Str()
+    regelzone_eic = fields.Str()


Test patch:
diff --git a/tests/test_standorteigenschaftenstrom.py b/tests/test_standorteigenschaftenstrom.py
new file mode 100644
index 000000000..54ba330ed
--- /dev/null
+++ b/tests/test_standorteigenschaftenstrom.py
@@ -0,0 +1,36 @@
+import pytest  # type:ignore[import]
+
+from bo4e.com.standorteigenschaftenstrom import StandorteigenschaftenStrom, StandorteigenschaftenStromSchema
+from tests.serialization_helper import assert_serialization_roundtrip  # type:ignore[import]
+
+
+class TestStandorteigenschaftenStrom:
+    @pytest.mark.parametrize(
+        "standorteigenschaften_strom, expected_json_dict",
+        [
+            pytest.param(
+                StandorteigenschaftenStrom(
+                    regelzone="Transnet BW",
+                    bilanzierungsgebiet_eic="11YW-ALBSTADT--5",
+                    regelzone_eic="10YDE-ENBW-----N",
+                ),
+                {
+                    "regelzone": "Transnet BW",
+                    "bilanzierungsgebietEic": "11YW-ALBSTADT--5",
+                    "regelzoneEic": "10YDE-ENBW-----N",
+                },
+            )
+        ],
+    )
+    def test_serialization_roundtrip(
+        self, standorteigenschaften_strom: StandorteigenschaftenStrom, expected_json_dict: dict
+    ):
+        assert_serialization_roundtrip(
+            standorteigenschaften_strom, StandorteigenschaftenStromSchema(), expected_json_dict
+        )
+
+    def test_missing_required_attributes(self):
+        with pytest.raises(TypeError) as excinfo:
+            _ = StandorteigenschaftenStrom()
+
+        assert "missing 3 required" in str(excinfo.value)