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
57 changes: 57 additions & 0 deletions src/bo4e/bo/standorteigenschaften.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
"""
Contains Standorteigenschaften class
and corresponding marshmallow schema for de-/serialization
"""
from typing import List, Optional

import attr
from marshmallow import fields

from bo4e.bo.geschaeftsobjekt import Geschaeftsobjekt, GeschaeftsobjektSchema
from bo4e.com.standorteigenschaftenallgemein import StandorteigenschaftenAllgemein, StandorteigenschaftenAllgemeinSchema
from bo4e.com.standorteigenschaftengas import StandorteigenschaftenGas, StandorteigenschaftenGasSchema
from bo4e.com.standorteigenschaftenstrom import StandorteigenschaftenStrom, StandorteigenschaftenStromSchema
from bo4e.enum.botyp import BoTyp
from bo4e.validators import check_list_length_at_least_one


# pylint: disable=too-few-public-methods
@attr.s(auto_attribs=True, kw_only=True)
class Standorteigenschaften(Geschaeftsobjekt):
"""
Modelliert die regionalen und spartenspezifischen Eigenschaften einer gegebenen Adresse.
"""

# required attributes
bo_typ: BoTyp = attr.ib(default=BoTyp.STANDORTEIGENSCHAFTEN)
#: Allgemeine Eigenschaften
eigenschaften_allgemein: StandorteigenschaftenAllgemein = attr.ib(
validator=attr.validators.instance_of(StandorteigenschaftenAllgemein)
)
#: Eigenschaften zur Sparte Strom
eigenschaften_strom: List[StandorteigenschaftenStrom] = attr.ib(
validator=attr.validators.deep_iterable(
member_validator=attr.validators.instance_of(StandorteigenschaftenStrom),
iterable_validator=check_list_length_at_least_one,
)
)
# optional attributes
#: Eigenschaften zur Sparte Gas
eigenschaften_gas: Optional[StandorteigenschaftenGas] = attr.ib(
validator=attr.validators.optional(attr.validators.instance_of(StandorteigenschaftenGas)), default=None
)


class StandorteigenschaftenSchema(GeschaeftsobjektSchema):
"""
Schema for de-/serialization of Standorteigenschaften
"""

class_name = Standorteigenschaften
# required attributes
eigenschaften_allgemein = fields.Nested(StandorteigenschaftenAllgemeinSchema)

eigenschaften_strom = fields.List(fields.Nested(StandorteigenschaftenStromSchema))

# optional attributes
eigenschaften_gas = fields.Nested(StandorteigenschaftenGasSchema, load_default=None)
1 change: 1 addition & 0 deletions src/bo4e/enum/botyp.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class BoTyp(StrEnum):
PREISBLATTUMLAGEN = "PREISBLATTUMLAGEN"
RECHNUNG = "RECHNUNG"
REGIONALTARIF = "REGIONALTARIF"
STANDORTEIGENSCHAFTEN = "STANDORTEIGENSCHAFTEN"
TARIFINFO = "TARIFINFO"
TARIFKOSTEN = "TARIFKOSTEN"
TARIFPREISBLATT = "TARIFPREISBLATT"
Expand Down
30 changes: 30 additions & 0 deletions tests/test_standorteigenschaften.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import pytest # type:ignore[import]

from bo4e.bo.standorteigenschaften import Standorteigenschaften, StandorteigenschaftenSchema
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]
from tests.test_standorteigenschaftenallgemein import example_standorteigenschaften_allgemein # type:ignore[import]
from tests.test_standorteigenschaftengas import example_standorteigenschaften_gas # type:ignore[import]
from tests.test_standorteigenschaftenstrom import example_standorteigenschaften_strom # type:ignore[import]


class TestStandorteigenschaften:
@pytest.mark.parametrize(
"standorteigenschaften",
[
pytest.param(
Standorteigenschaften(
eigenschaften_allgemein=example_standorteigenschaften_allgemein,
eigenschaften_strom=[example_standorteigenschaften_strom],
eigenschaften_gas=example_standorteigenschaften_gas,
)
),
],
)
def test_serialization_roundtrip(self, standorteigenschaften: Standorteigenschaften):
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

hier

assert_serialization_roundtrip(standorteigenschaften, StandorteigenschaftenSchema())

def test_missing_required_attribute(self):
with pytest.raises(TypeError) as excinfo:
_ = Standorteigenschaften()

assert "missing 2 required" in str(excinfo.value)
42 changes: 20 additions & 22 deletions tests/test_standorteigenschaftenallgemein.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,30 @@
from bo4e.com.standorteigenschaftenallgemein import StandorteigenschaftenAllgemein, StandorteigenschaftenAllgemeinSchema
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]

example_standorteigenschaften_allgemein = StandorteigenschaftenAllgemein(
postleitzahl="66646",
ort="Alsweiler",
kreisname="St. Wendel",
gemeindename="Marpingen",
gemeindekennziffer="10 0 46 112",
gemeindeeinwohner=9961,
bundesland="Saarland",
)
example_standorteigenschaften_allgemein_dict = {
"postleitzahl": "66646",
"ort": "Alsweiler",
"kreisname": "St. Wendel",
"gemeindename": "Marpingen",
"gemeindekennziffer": "10 0 46 112",
"gemeindeeinwohner": 9961,
"bundesland": "Saarland",
}


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",
},
)
],
[pytest.param(example_standorteigenschaften_allgemein, example_standorteigenschaften_allgemein_dict)],
)
def test_standorteigenschaftenallgemein_serialization_roundtrip(
self, standorteigenschaftenallgemein: StandorteigenschaftenAllgemein, expected_json_dict: dict
Expand Down
10 changes: 6 additions & 4 deletions tests/test_standorteigenschaftengas.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@
from bo4e.com.standorteigenschaftengas import StandorteigenschaftenGas, StandorteigenschaftenGasSchema
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]

example_standorteigenschaften_gas = StandorteigenschaftenGas(
netzkontonummern=["GASPOOLNH700xxxx"],
marktgebiete=[MarktgebietInfo(marktgebiet="Gaspool", marktgebietcode="37Z701133MH0000B")],
)


class TestStandorteigenschaftenGas:
@pytest.mark.parametrize(
"standorteigenschaftengas, expected_json_dict",
[
pytest.param(
StandorteigenschaftenGas(
netzkontonummern=["GASPOOLNH700xxxx"],
marktgebiete=[MarktgebietInfo(marktgebiet="Gaspool", marktgebietcode="37Z701133MH0000B")],
),
example_standorteigenschaften_gas,
{
"netzkontonummern": ["GASPOOLNH700xxxx"],
"marktgebiete": [{"marktgebiet": "Gaspool", "marktgebietcode": "37Z701133MH0000B"}],
Expand Down
12 changes: 7 additions & 5 deletions tests/test_standorteigenschaftenstrom.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,19 @@
from bo4e.com.standorteigenschaftenstrom import StandorteigenschaftenStrom, StandorteigenschaftenStromSchema
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]

example_standorteigenschaften_strom = StandorteigenschaftenStrom(
regelzone="Transnet BW",
bilanzierungsgebiet_eic="11YW-ALBSTADT--5",
regelzone_eic="10YDE-ENBW-----N",
)


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",
),
example_standorteigenschaften_strom,
{
"regelzone": "Transnet BW",
"bilanzierungsgebietEic": "11YW-ALBSTADT--5",
Expand Down