From 4375855a6c44a64782595af7dd520e80cf55f23c Mon Sep 17 00:00:00 2001 From: Fstei Date: Mon, 9 Sep 2024 16:28:17 +0200 Subject: [PATCH 1/5] Add Erreichbarkeit --- src/bo4e/bo/geschaeftspartner.py | 2 ++ src/bo4e/com/erreichbarkeit.py | 39 +++++++++++++++++++++++++++++ src/bo4e/com/zeitfenster.py | 30 +++++++++++++++++++++++ tests/test_erreichbarkeit.py | 42 ++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 src/bo4e/com/erreichbarkeit.py create mode 100644 src/bo4e/com/zeitfenster.py create mode 100644 tests/test_erreichbarkeit.py diff --git a/src/bo4e/bo/geschaeftspartner.py b/src/bo4e/bo/geschaeftspartner.py index 992bb0650..869d0b0c4 100644 --- a/src/bo4e/bo/geschaeftspartner.py +++ b/src/bo4e/bo/geschaeftspartner.py @@ -8,6 +8,7 @@ from pydantic import Field +from ..com.erreichbarkeit import Erreichbarkeit from ..enum.typ import Typ from ..utils import postprocess_docstring from .geschaeftsobjekt import Geschaeftsobjekt @@ -82,3 +83,4 @@ class Geschaeftspartner(Geschaeftsobjekt): #: Todo: Add optional connection to marktteilnehmer as discussed in workshop #: not clear what is the best solution here - circular import marktteilnehmer? #: discussed in workshop on Feb 6 2024: yes we need the bidirectional option, let's figure out a solution somehow. + erreichbarkeit: Optional[Erreichbarkeit] = None diff --git a/src/bo4e/com/erreichbarkeit.py b/src/bo4e/com/erreichbarkeit.py new file mode 100644 index 000000000..57eaee358 --- /dev/null +++ b/src/bo4e/com/erreichbarkeit.py @@ -0,0 +1,39 @@ +""" +Contains Erreichbarkeit class and corresponding marshmallow schema for de-/serialization +""" + +# pylint: disable=too-few-public-methods, too-many-instance-attributes +# pylint: disable=no-name-in-module + +from typing import Optional + +from ..com.zeitfenster import Zeitfenster +from ..utils import postprocess_docstring +from .com import COM + + +@postprocess_docstring +class Erreichbarkeit(COM): + """ + Eine Komponente zur Abbildung der Erreichbarkeit + + .. raw:: html + + + + .. HINT:: + `Erreichbarkeit JSON Schema `_ + + """ + + montag_erreichbarkeit: Optional[Zeitfenster] = None + + dienstag_erreichbarkeit: Optional[Zeitfenster] = None + + mittwoch_erreichbarkeit: Optional[Zeitfenster] = None + + donnerstag_erreichbarkeit: Optional[Zeitfenster] = None + + freitag_erreichbarkeit: Optional[Zeitfenster] = None + + mittagspause: Optional[Zeitfenster] = None diff --git a/src/bo4e/com/zeitfenster.py b/src/bo4e/com/zeitfenster.py new file mode 100644 index 000000000..6ef67c729 --- /dev/null +++ b/src/bo4e/com/zeitfenster.py @@ -0,0 +1,30 @@ +""" +Contains Zeitfenster class and corresponding marshmallow schema for de-/serialization +""" + +# pylint: disable=too-few-public-methods, too-many-instance-attributes +# pylint: disable=no-name-in-module + +from datetime import time +from typing import Optional + +from ..utils import postprocess_docstring +from .com import COM + + +@postprocess_docstring +class Zeitfenster(COM): + """ + Eine Komponente zur Abbildung des Zeitfensters für die Erreichbarkeit + + .. raw:: html + + + + .. HINT:: + `Zeitfenster JSON Schema `_ + + """ + + startzeit: Optional[time] = None + endzeit: Optional[time] = None diff --git a/tests/test_erreichbarkeit.py b/tests/test_erreichbarkeit.py new file mode 100644 index 000000000..5bf6ff63f --- /dev/null +++ b/tests/test_erreichbarkeit.py @@ -0,0 +1,42 @@ +from datetime import time, timezone + +import pytest + +from bo4e.com.erreichbarkeit import Erreichbarkeit +from bo4e.com.zeitfenster import Zeitfenster +from tests.serialization_helper import assert_serialization_roundtrip + + +class TestErreichbarkeit: + @pytest.mark.parametrize( + "erreichbarkeit", + [ + pytest.param( + Erreichbarkeit( + montag_erreichbarkeit=Zeitfenster( + startzeit=time(8, 00, tzinfo=timezone.utc), endzeit=time(17, 00, tzinfo=timezone.utc) + ), + dienstag_erreichbarkeit=Zeitfenster( + startzeit=time(8, 00, tzinfo=timezone.utc), endzeit=time(17, 00, tzinfo=timezone.utc) + ), + mittwoch_erreichbarkeit=Zeitfenster( + startzeit=time(8, 00, tzinfo=timezone.utc), endzeit=time(17, 00, tzinfo=timezone.utc) + ), + donnerstag_erreichbarkeit=Zeitfenster( + startzeit=time(8, 00, tzinfo=timezone.utc), endzeit=time(17, 00, tzinfo=timezone.utc) + ), + freitag_erreichbarkeit=Zeitfenster( + startzeit=time(8, 00, tzinfo=timezone.utc), endzeit=time(17, 00, tzinfo=timezone.utc) + ), + mittagspause=Zeitfenster( + startzeit=time(12, 00, tzinfo=timezone.utc), endzeit=time(13, 00, tzinfo=timezone.utc) + ), + ), + ), + ], + ) + def test_serialization_roundtrip(self, erreichbarkeit: Erreichbarkeit) -> None: + """ + Test de-/serialisation of Erreichbarkeit. + """ + assert_serialization_roundtrip(erreichbarkeit) From 83bec5c2942c5082fbace67de9647e999041b1c6 Mon Sep 17 00:00:00 2001 From: Fstei Date: Mon, 9 Sep 2024 16:35:19 +0200 Subject: [PATCH 2/5] konsti test --- tests/test_zeitfenster.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tests/test_zeitfenster.py diff --git a/tests/test_zeitfenster.py b/tests/test_zeitfenster.py new file mode 100644 index 000000000..17149b9aa --- /dev/null +++ b/tests/test_zeitfenster.py @@ -0,0 +1,25 @@ +from datetime import time, timezone + +import pytest + +from bo4e.com.zeitfenster import Zeitfenster +from tests.serialization_helper import assert_serialization_roundtrip + + +class TestZeitfenster: + @pytest.mark.parametrize( + "zeitfenster", + [ + pytest.param( + Zeitfenster( + startzeit=time(8, 00, tzinfo=timezone.utc), + endzeit=time(17, 00, tzinfo=timezone.utc), + ), + ), + ], + ) + def test_serialization_roundtrip(self, zeitfenster: Zeitfenster) -> None: + """ + Test de-/serialisation of Zeitfenster. + """ + assert_serialization_roundtrip(zeitfenster) From e16e1db2fbda8c8ce575a4afb5ebcaff24dae493 Mon Sep 17 00:00:00 2001 From: Fstei Date: Tue, 10 Sep 2024 10:38:10 +0200 Subject: [PATCH 3/5] improve test --- tests/test_geschaeftspartner.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_geschaeftspartner.py b/tests/test_geschaeftspartner.py index 786ad90af..0761301a5 100644 --- a/tests/test_geschaeftspartner.py +++ b/tests/test_geschaeftspartner.py @@ -1,3 +1,5 @@ +from datetime import time, timezone + import pytest from bo4e import ( @@ -11,6 +13,8 @@ Person, Titel, ) +from bo4e.com.erreichbarkeit import Erreichbarkeit +from bo4e.com.zeitfenster import Zeitfenster from tests.serialization_helper import assert_serialization_roundtrip @@ -55,6 +59,20 @@ class TestGeschaeftspartner: adresse=Adresse( postleitzahl="1014", ort="Wien 1", strasse="Ballhausplatz", hausnummer="2", landescode=Landescode.AT # type: ignore[attr-defined] ), + erreichbarkeit=Erreichbarkeit( + montag_erreichbarkeit=Zeitfenster( + startzeit=time(14, 00, tzinfo=timezone.utc), endzeit=time(17, 00, tzinfo=timezone.utc) + ), + mittwoch_erreichbarkeit=Zeitfenster( + startzeit=time(6, 00, tzinfo=timezone.utc), endzeit=time(12, 00, tzinfo=timezone.utc) + ), + freitag_erreichbarkeit=Zeitfenster( + startzeit=time(5, 00, tzinfo=timezone.utc), endzeit=time(22, 00, tzinfo=timezone.utc) + ), + mittagspause=Zeitfenster( + startzeit=time(12, 00, tzinfo=timezone.utc), endzeit=time(13, 00, tzinfo=timezone.utc) + ), + ), ), id="Landescode!=DE, DE is default", ), From 82d51980649f7a5f58853bc7a02abc9377cec14e Mon Sep 17 00:00:00 2001 From: Fstei Date: Wed, 11 Sep 2024 08:46:21 +0200 Subject: [PATCH 4/5] add to init --- src/bo4e/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bo4e/__init__.py b/src/bo4e/__init__.py index 255977773..22e2bb12e 100644 --- a/src/bo4e/__init__.py +++ b/src/bo4e/__init__.py @@ -177,6 +177,7 @@ "TechnischeRessourceVerbrauchsart", "Themengebiet", "Titel", + "Erreichbarkeit", "Typ", "Verbrauchsart", "Vertragsart", @@ -252,6 +253,7 @@ from .com.dienstleistung import Dienstleistung from .com.energieherkunft import Energieherkunft from .com.energiemix import Energiemix +from .com.erreichbarkeit import Erreichbarkeit from .com.fremdkostenblock import Fremdkostenblock from .com.fremdkostenposition import Fremdkostenposition from .com.geokoordinaten import Geokoordinaten From df3db2939bd2b56cee7aaa0d5682eac0bbe86118 Mon Sep 17 00:00:00 2001 From: Fstei Date: Wed, 11 Sep 2024 08:58:07 +0200 Subject: [PATCH 5/5] init --- src/bo4e/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bo4e/__init__.py b/src/bo4e/__init__.py index 22e2bb12e..4d9316103 100644 --- a/src/bo4e/__init__.py +++ b/src/bo4e/__init__.py @@ -193,6 +193,7 @@ "Zaehlergroesse", "Zaehlertyp", "ZaehlertypSpezifikation", + "Zeitfenster", "ZusatzAttribut", "__version__", "__gh_version__", @@ -295,6 +296,7 @@ from .com.verwendungszweckpromarktrolle import VerwendungszweckProMarktrolle from .com.zaehlwerk import Zaehlwerk from .com.zaehlzeitregister import Zaehlzeitregister +from .com.zeitfenster import Zeitfenster from .com.zeitraum import Zeitraum from .com.zeitreihenwert import Zeitreihenwert from .com.zeitspanne import Zeitspanne