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

Issue:
Implement COM StandorteigenschaftenAllgemein
https://www.bo4e.de/dokumentation/komponenten/comndorteigenschaftenallgemein

refer to #174 in the docstring


Discussion / hints:

Fix patch:
diff --git a/src/bo4e/com/standorteigenschaftenallgemein.py b/src/bo4e/com/standorteigenschaftenallgemein.py
new file mode 100644
index 000000000..310a965d9
--- /dev/null
+++ b/src/bo4e/com/standorteigenschaftenallgemein.py
@@ -0,0 +1,54 @@
+"""
+Contains StandorteigenschaftenAllgemein class
+and corresponding marshmallow schema for de-/serialization
+"""
+
+
+import attr
+from marshmallow import fields, post_load
+
+from bo4e.com.com import COM, COMSchema
+
+# pylint: disable=too-few-public-methods
+@attr.s(auto_attribs=True, kw_only=True)
+class StandorteigenschaftenAllgemein(COM):
+    """
+    Allgemeine Standorteigenschaften
+    """
+
+    # required attributes
+    #: Die Postleitzahl des Standorts
+    postleitzahl: str = attr.ib(validator=attr.validators.instance_of(str))
+    #: Die Ortsbezeichnung des Standorts
+    ort: str = attr.ib(validator=attr.validators.instance_of(str))
+    #: Der Name des Kreises in dem der Standort liegt
+    kreisname: str = attr.ib(validator=attr.validators.instance_of(str))
+    #: Der Name der Gemeinde des Standortes
+    gemeindename: str = attr.ib(validator=attr.validators.instance_of(str))
+    #: Die standardisierte Kennziffer der Gemeinde
+    gemeindekennziffer: str = attr.ib(validator=attr.validators.instance_of(str))
+    #: Anzahl der Einwohner in der Gemeinde
+    gemeindeeinwohner: int = attr.ib(validator=attr.validators.instance_of(int))
+    #: Das Bundesland zu dem der Standort gehört
+    bundesland: str = attr.ib(validator=attr.validators.instance_of(str))
+
+
+class StandorteigenschaftenAllgemeinSchema(COMSchema):
+    """
+    Schema for de-/serialization of StandorteigenschaftenAllgemein.
+    """
+
+    # required attributes
+    postleitzahl = fields.Str()
+    ort = fields.Str()
+    kreisname = fields.Str()
+    gemeindename = fields.Str()
+    gemeindekennziffer = fields.Str()
+    gemeindeeinwohner = fields.Int()
+    bundesland = fields.Str()
+
+    # pylint: disable=no-self-use, unused-argument
+    @post_load
+    def deserialize(self, data, **kwargs) -> StandorteigenschaftenAllgemein:
+        """Deserialize JSON to StandorteigenschaftenAllgemein object"""
+        return StandorteigenschaftenAllgemein(**data)


Test patch:
diff --git a/tests/test_standorteigenschaftenallgemein.py b/tests/test_standorteigenschaftenallgemein.py
new file mode 100644
index 000000000..63fecac8e
--- /dev/null
+++ b/tests/test_standorteigenschaftenallgemein.py
@@ -0,0 +1,46 @@
+import pytest  # type:ignore[import]
+
+from bo4e.com.standorteigenschaftenallgemein import StandorteigenschaftenAllgemein, StandorteigenschaftenAllgemeinSchema
+from tests.serialization_helper import assert_serialization_roundtrip  # type:ignore[import]
+
+
+class TestStandorteigenschaftenAllgemein:
+    @pytest.mark.parametrize(
+        "standorteigenschaftenallgemein, expected_json_dict",
+        [
+            pytest.param(
+                StandorteigenschaftenAllgemein(
+                    postleitzahl="66646",
+                    ort="Alsweiler",
+                    kreisname="St. Wendel",
+                    gemeindename="Marpingen",
+                    gemeindekennziffer="10 0 46 112",
+                    gemeindeeinwohner=9961,
+                    bundesland="Saarland",
+                ),
+                {
+                    "postleitzahl": "66646",
+                    "ort": "Alsweiler",
+                    "kreisname": "St. Wendel",
+                    "gemeindename": "Marpingen",
+                    "gemeindekennziffer": "10 0 46 112",
+                    "gemeindeeinwohner": 9961,
+                    "bundesland": "Saarland",
+                },
+            )
+        ],
+    )
+    def test_standorteigenschaftenallgemein_serialization_roundtrip(
+        self, standorteigenschaftenallgemein: StandorteigenschaftenAllgemein, expected_json_dict: dict
+    ):
+        """
+        Test de-/serialisation of StandorteigenschaftenAllgemein with minimal attributes.
+        """
+        assert_serialization_roundtrip(
+            standorteigenschaftenallgemein, StandorteigenschaftenAllgemeinSchema(), expected_json_dict
+        )
+
+    def test_standorteigenschaftenallgemein_missing_required_attributes(self):
+        with pytest.raises(TypeError) as excinfo:
+            _ = StandorteigenschaftenAllgemein()
+        assert "missing 7 required" in str(excinfo.value)