Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions src/bo4e/com/standorteigenschaftenallgemein.py
Original file line number Diff line number Diff line change
@@ -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))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
gemeindekennziffer: str = attr.ib(validator=attr.validators.instance_of(str))
gemeindekennziffer: str = attr.ib(validator=attr.validators.instance_of(str))
# https://de.wikipedia.org/wiki/Amtlicher_Gemeindeschl%C3%BCssel#Aufbau
# one could write a validator for this

#: 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)
46 changes: 46 additions & 0 deletions tests/test_standorteigenschaftenallgemein.py
Original file line number Diff line number Diff line change
@@ -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)