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
35 changes: 35 additions & 0 deletions src/bo4e/bo/preisblattkonzessionsabgabe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
Contains PreisblattKonzessionsabgabe class and corresponding marshmallow schema for de-/serialization
"""

import attr
from marshmallow_enum import EnumField # type:ignore[import]

from bo4e.bo.preisblatt import Preisblatt, PreisblattSchema
from bo4e.enum.botyp import BoTyp
from bo4e.enum.kundengruppeka import KundengruppeKA


# pylint: disable=too-few-public-methods
@attr.s(auto_attribs=True, kw_only=True)
class PreisblattKonzessionsabgabe(Preisblatt):
"""
Die Variante des Preisblattmodells zur Abbildung von allgemeinen Abgaben
"""

bo_typ: BoTyp = attr.ib(default=BoTyp.PREISBLATTKONZESSIONSABGABE)
# required attributes (additional to those of Preisblatt)
#: Kundegruppe anhand derer die Höhe der Konzessionabgabe festgelegt ist
kundengruppe_k_a: KundengruppeKA = attr.ib(validator=attr.validators.instance_of(KundengruppeKA))

# there are no optional attributes (additionally to those of Preisblatt)


class PreisblattKonzessionsabgabeSchema(PreisblattSchema):
"""
Schema for de-/serialization of PreisblattKonzessionsabgabe
"""

class_name = PreisblattKonzessionsabgabe # type:ignore[assignment]
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Is this a new approach how to deserialize into the right class?

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.

it's not new, just new born ;)
yep, but I didn't manage to override it so that mypy accepts it too.

# required attributes
kundengruppe_k_a = EnumField(KundengruppeKA, data_key="kundengruppeKA")
39 changes: 39 additions & 0 deletions tests/test_preisblatt_konzessionsabgabe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import pytest # type:ignore[import]

from bo4e.bo.preisblattkonzessionsabgabe import PreisblattKonzessionsabgabe, PreisblattKonzessionsabgabeSchema
from bo4e.enum.kundengruppeka import KundengruppeKA
from bo4e.enum.preisstatus import Preisstatus
from bo4e.enum.sparte import Sparte
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]
from tests.test_marktteilnehmer import example_marktteilnehmer # type:ignore[import]
from tests.test_preisposition import example_preisposition # type:ignore[import]
from tests.test_zeitraum import example_zeitraum # type:ignore[import]


class TestPreisblatt:
@pytest.mark.parametrize(
"preisblatt_ka",
[
pytest.param(
PreisblattKonzessionsabgabe(
bezeichnung="foo",
sparte=Sparte.STROM,
preisstatus=Preisstatus.ENDGUELTIG,
preispositionen=[example_preisposition],
gueltigkeit=example_zeitraum,
herausgeber=example_marktteilnehmer,
kundengruppe_k_a=KundengruppeKA.G_SONDERKUNDE,
)
),
],
)
def test_serialization_roundtrip(self, preisblatt_ka: PreisblattKonzessionsabgabe):
"""
Test de-/serialisation
"""
assert_serialization_roundtrip(preisblatt_ka, PreisblattKonzessionsabgabeSchema())

def test_missing_required_attribute(self):
with pytest.raises(TypeError) as excinfo:
_ = PreisblattKonzessionsabgabe()
assert "missing 6 required" in str(excinfo.value) # 5 from preisblatt + 1 from preisblatt konzessionsabgabe