Skip to content

Commit 3a50cd0

Browse files
authored
Implement BO PreisblattNetznutzung (#325)
1 parent 366ac4d commit 3a50cd0

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""
2+
Contains PreisblattNetnutzung class and corresponding marshmallow schema for de-/serialization
3+
"""
4+
5+
import attr
6+
from marshmallow_enum import EnumField # type:ignore[import]
7+
8+
from bo4e.bo.preisblatt import Preisblatt, PreisblattSchema
9+
from bo4e.enum.bilanzierungsmethode import Bilanzierungsmethode
10+
from bo4e.enum.botyp import BoTyp
11+
from bo4e.enum.kundengruppe import Kundengruppe
12+
from bo4e.enum.netzebene import Netzebene
13+
14+
15+
# pylint: disable=too-few-public-methods
16+
@attr.s(auto_attribs=True, kw_only=True)
17+
class PreisblattNetznutzung(Preisblatt):
18+
"""
19+
Die Variante des Preisblattmodells zur Abbildung der Netznutzungspreise
20+
"""
21+
22+
bo_typ: BoTyp = attr.ib(default=BoTyp.PREISBLATTNETZNUTZUNG)
23+
# required attributes (additional to those of Preisblatt)
24+
#: Die Preise gelten für Marktlokationen der angebebenen Bilanzierungsmethode
25+
bilanzierungsmethode: Bilanzierungsmethode = attr.ib(validator=attr.validators.instance_of(Bilanzierungsmethode))
26+
#: Die Preise gelten für Marktlokationen in der angebebenen Netzebene
27+
netzebene: Netzebene = attr.ib(validator=attr.validators.instance_of(Netzebene))
28+
kundengruppe: Kundengruppe = attr.ib(validator=attr.validators.instance_of(Kundengruppe))
29+
30+
# there are no optional attributes (additionally to those of Preisblatt)
31+
32+
33+
class PreisblattNetznutzungSchema(PreisblattSchema):
34+
"""
35+
Schema for de-/serialization of PreisblattNetznutzung
36+
"""
37+
38+
class_name = PreisblattNetznutzung # type:ignore[assignment]
39+
# required attributes
40+
bilanzierungsmethode = EnumField(Bilanzierungsmethode)
41+
netzebene = EnumField(Netzebene)
42+
kundengruppe = EnumField(Kundengruppe)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import pytest # type:ignore[import]
2+
3+
from bo4e.bo.preisblattnetznutzung import PreisblattNetznutzung, PreisblattNetznutzungSchema
4+
from bo4e.enum.bilanzierungsmethode import Bilanzierungsmethode
5+
from bo4e.enum.kundengruppe import Kundengruppe
6+
from bo4e.enum.netzebene import Netzebene
7+
from bo4e.enum.preisstatus import Preisstatus
8+
from bo4e.enum.sparte import Sparte
9+
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]
10+
from tests.test_marktteilnehmer import example_marktteilnehmer # type:ignore[import]
11+
from tests.test_preisposition import example_preisposition # type:ignore[import]
12+
from tests.test_zeitraum import example_zeitraum # type:ignore[import]
13+
14+
15+
class TestPreisblatt:
16+
@pytest.mark.parametrize(
17+
"preisblatt_netznutzung",
18+
[
19+
pytest.param(
20+
PreisblattNetznutzung(
21+
bezeichnung="foo",
22+
sparte=Sparte.STROM,
23+
preisstatus=Preisstatus.ENDGUELTIG,
24+
preispositionen=[example_preisposition],
25+
gueltigkeit=example_zeitraum,
26+
herausgeber=example_marktteilnehmer,
27+
bilanzierungsmethode=Bilanzierungsmethode.TLP_GEMEINSAM,
28+
netzebene=Netzebene.MSP,
29+
kundengruppe=Kundengruppe.SLP_G_GKO,
30+
)
31+
),
32+
],
33+
)
34+
def test_serialization_roundtrip(self, preisblatt_netznutzung: PreisblattNetznutzung):
35+
"""
36+
Test de-/serialisation
37+
"""
38+
assert_serialization_roundtrip(preisblatt_netznutzung, PreisblattNetznutzungSchema())
39+
40+
def test_missing_required_attribute(self):
41+
with pytest.raises(TypeError) as excinfo:
42+
_ = PreisblattNetznutzung()
43+
assert "missing 8 required" in str(excinfo.value) # 5 from preisblatt + 3 from preisblatt netznutzung

0 commit comments

Comments
 (0)