Skip to content

Commit

Permalink
Remove validators
Browse files Browse the repository at this point in the history
  • Loading branch information
lord-haffi committed Oct 6, 2023
1 parent b573551 commit 412a848
Show file tree
Hide file tree
Showing 10 changed files with 1 addition and 319 deletions.
20 changes: 0 additions & 20 deletions src/bo4e/bo/marktlokation.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
from bo4e.enum.netzebene import Netzebene
from bo4e.enum.sparte import Sparte
from bo4e.enum.verbrauchsart import Verbrauchsart
from bo4e.validators import combinations_of_fields, validate_marktlokations_id


class Marktlokation(Geschaeftsobjekt):
Expand All @@ -44,7 +43,6 @@ class Marktlokation(Geschaeftsobjekt):
bo_typ: BoTyp = BoTyp.MARKTLOKATION
#: Identifikationsnummer einer Marktlokation, an der Energie entweder verbraucht, oder erzeugt wird.
marktlokations_id: Optional[str] = None
_marktlokations_id_check = field_validator("marktlokations_id")(validate_marktlokations_id)
#: Sparte der Marktlokation, z.B. Gas oder Strom
sparte: Optional[Sparte] = None
#: Kennzeichnung, ob Energie eingespeist oder entnommen (ausgespeist) wird
Expand Down Expand Up @@ -116,21 +114,3 @@ class Marktlokation(Geschaeftsobjekt):

kundengruppen: Optional[list[Kundentyp]] = None
#: Kundengruppen der Marktlokation

# pylint: disable=duplicate-code
_validate_address_info = combinations_of_fields(
"lokationsadresse",
"geoadresse",
"katasterinformation",
valid_combinations={
(1, 0, 0),
(0, 1, 0),
(0, 0, 1),
(0, 0, 0),
},
custom_error_message=(
"More than one address information is given. "
'You have to chose either "lokationsadresse", "geoadresse" or "katasterinformation".'
),
)
"Checks that if an address is given, that there is only one valid address given"
51 changes: 0 additions & 51 deletions src/bo4e/bo/messlokation.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,6 @@
from bo4e.enum.botyp import BoTyp
from bo4e.enum.netzebene import Netzebene
from bo4e.enum.sparte import Sparte
from bo4e.validators import combinations_of_fields

# Structure of a Messlokations-ID
# Ländercode nach DIN ISO 3166 (2 Stellen)
# Verteilnetzbetreiber (6 Stellen)
# Postleitzahl (5 Stellen)
# Zählpunktnummer (20 Stellen alphanumerisch)
# source: https://de.wikipedia.org/wiki/Z%C3%A4hlpunkt#Struktur_der_Z%C3%A4hlpunktbezeichnung

_melo_id_pattern = re.compile(r"^[A-Z]{2}\d{6}\d{5}[A-Z\d]{20}$")


# pylint: disable=too-many-instance-attributes, too-few-public-methods

Expand Down Expand Up @@ -93,43 +82,3 @@ class Messlokation(Geschaeftsobjekt):
Alternativ zu einer postalischen Adresse und Geokoordinaten kann hier eine Ortsangabe mittels Gemarkung und
Flurstück erfolgen.
"""

# pylint: disable=unused-argument, no-self-argument
@field_validator("messlokations_id", mode="after")
@classmethod
def _validate_messlokations_id_country_code(cls, messlokations_id: str) -> str:
# The regex pattern in the annotated type above already checks for the correct format
if not messlokations_id[0:2] in countries:
raise ValueError(f"The country code '{messlokations_id[0:2]}' is not a valid country code")
return messlokations_id

# pylint: disable=duplicate-code
_validate_address_info = combinations_of_fields(
"messadresse",
"geoadresse",
"katasterinformation",
valid_combinations={
(1, 0, 0),
(0, 1, 0),
(0, 0, 1),
(0, 0, 0),
},
custom_error_message=(
"More than one address information is given. "
'You have to chose either "messadresse", "geoadresse" or "katasterinformation".'
),
)
"Checks that if an address is given, that there is only one valid address given"

# pylint: disable=no-self-argument
@model_validator(mode="before")
@classmethod
def validate_grundzustaendiger_x_codenr(cls, data: Any) -> dict[str, Any]:
"""Checks that if a codenr is given, that there is only one valid codenr given."""
assert isinstance(data, dict), "data is not a dict"
if (
data.get("grundzustaendiger_msb_codenr", None) is not None
and data.get("grundzustaendiger_msbim_codenr", None) is not None
):
raise ValueError("More than one codenr is given.")
return data
24 changes: 0 additions & 24 deletions src/bo4e/com/adresse.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

from bo4e.com.com import COM
from bo4e.enum.landescode import Landescode
from bo4e.validators import combinations_of_fields

# pylint: disable=too-many-instance-attributes, too-few-public-methods

Expand Down Expand Up @@ -45,26 +44,3 @@ class Adresse(COM):
co_ergaenzung: Optional[str] = None
#: Offizieller ISO-Landescode
landescode: Optional[Landescode] = Landescode.DE # type:ignore

_strasse_xor_postfach = combinations_of_fields(
"strasse",
"hausnummer",
"postfach",
valid_combinations={
(1, 1, 0),
(0, 0, 1),
(0, 0, 0),
},
custom_error_message='You have to define either "strasse" and "hausnummer" or "postfach".',
)
"""
An address is valid if it contains a postfach XOR (a strasse AND hausnummer).
This functions checks for these conditions of a valid address.
Nur folgende Angabekombinationen sind (nach der Abfrage) möglich:
Straße w f f
Hausnummer w f f
Postfach f w f
Postleitzahl w w w
Ort w w w
"""
1 change: 0 additions & 1 deletion src/bo4e/com/aufabschlag.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ class AufAbschlag(COM):
#: Diesem Preis oder den Kosten ist der Auf/Abschlag zugeordnet. Z.B. Arbeitspreis, Gesamtpreis etc..
auf_abschlagsziel: Optional[AufAbschlagsziel] = None
einheit: Optional[Waehrungseinheit] = None
_einheit_check = field_validator("einheit")(einheit_only_for_abschlagstyp_absolut)
""" Gibt an in welcher Währungseinheit der Auf/Abschlag berechnet wird. Euro oder Ct..
(Nur im Falle absoluter Aufschlagstypen). """
#: Internetseite, auf der die Informationen zum Auf-/Abschlag veröffentlicht sind.
Expand Down
10 changes: 0 additions & 10 deletions src/bo4e/com/kostenposition.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from bo4e.com.com import COM
from bo4e.com.menge import Menge
from bo4e.com.preis import Preis
from bo4e.validators import check_bis_is_later_than_von


class Kostenposition(COM):
Expand Down Expand Up @@ -48,7 +47,6 @@ class Kostenposition(COM):
von: Optional[datetime] = None
#: exklusiver bis-Zeitpunkt der Kostenzeitscheibe
bis: Optional[datetime] = None
_bis_check = field_validator("bis")(check_bis_is_later_than_von)

#: Die Menge, die in die Kostenberechnung eingeflossen ist. Beispiel: 3.660 kWh
menge: Optional[Menge] = None
Expand All @@ -61,11 +59,3 @@ class Kostenposition(COM):

#: Detaillierung des Artikels (optional). Beispiel: 'Drehstromzähler'
artikeldetail: Optional[str] = None

@staticmethod
def _get_inclusive_start(values: ValidationInfo) -> Optional[datetime]:
return values.data["von"]

# @staticmethod
# def _get_exclusive_end(values) -> Optional[datetime]:
# return values['bis']
11 changes: 0 additions & 11 deletions src/bo4e/com/rechnungsposition.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from bo4e.com.steuerbetrag import Steuerbetrag
from bo4e.enum.bdewartikelnummer import BDEWArtikelnummer
from bo4e.enum.zeiteinheit import Zeiteinheit
from bo4e.validators import check_bis_is_later_than_von


class Rechnungsposition(COM):
Expand All @@ -39,7 +38,6 @@ class Rechnungsposition(COM):

lieferung_von: Optional[datetime] = None #: Start der Lieferung für die abgerechnete Leistung (inklusiv)
lieferung_bis: Optional[datetime] = None #: Ende der Lieferung für die abgerechnete Leistung (exklusiv)
_bis_check = field_validator("lieferung_bis")(check_bis_is_later_than_von)

#: Bezeichung für die abgerechnete Position
positionstext: Optional[str] = None
Expand Down Expand Up @@ -80,12 +78,3 @@ class Rechnungsposition(COM):

#: Standardisierte vom BDEW herausgegebene Liste, welche im Strommarkt die BDEW-Artikelnummer ablöst
artikel_id: Optional[str] = None

@staticmethod
def _get_inclusive_start(values: ValidationInfo) -> datetime:
"""return the inclusive start (used in the validator)"""
return values.data["lieferung_von"]

# def _get_exclusive_end(self) -> datetime:
# """return the exclusive end (used in the validator)"""
# return self.lieferung_bis
11 changes: 0 additions & 11 deletions src/bo4e/com/verbrauch.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from bo4e.com.com import COM
from bo4e.enum.mengeneinheit import Mengeneinheit
from bo4e.enum.wertermittlungsverfahren import Wertermittlungsverfahren
from bo4e.validators import check_bis_is_later_than_von


class Verbrauch(COM):
Expand Down Expand Up @@ -44,13 +43,3 @@ class Verbrauch(COM):
startdatum: Optional[datetime] = None
#: Exklusives Ende des Zeitraumes, für den der Verbrauch angegeben wird
enddatum: Optional[datetime] = None
_bis_check = field_validator("enddatum")(check_bis_is_later_than_von)

@staticmethod
def _get_inclusive_start(values: ValidationInfo) -> Optional[datetime]:
"""a method for easier usage of the check_bis_is_later_than_von validator"""
return values.data["startdatum"]

# def _get_exclusive_end(self) -> Optional[datetime]:
# """a method for easier usage of the check_bis_is_later_than_von validator"""
# return self.enddatum
27 changes: 0 additions & 27 deletions src/bo4e/com/zeitraum.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

from bo4e.com.com import COM
from bo4e.enum.zeiteinheit import Zeiteinheit
from bo4e.validators import combinations_of_fields

# pylint: disable=too-few-public-methods

Expand Down Expand Up @@ -38,29 +37,3 @@ class Zeitraum(COM):
enddatum: Optional[datetime] = None
startzeitpunkt: Optional[datetime] = None
endzeitpunkt: Optional[datetime] = None

_time_range_possibilities = combinations_of_fields(
"einheit",
"dauer",
"startdatum",
"enddatum",
"startzeitpunkt",
"endzeitpunkt",
valid_combinations={
(1, 1, 0, 0, 0, 0),
(0, 0, 1, 1, 0, 0),
(0, 0, 0, 0, 1, 1),
},
custom_error_message="""
Please choose from one of the three possibilities to specify the timerange:
- einheit and dauer
- startdatum and enddatum
- startzeitpunkt and endzeitpunkt
""",
)
"""
Validator that ensures that exactly one of the three possibilities to specify the timerange is chosen.
- einheit and dauer
- startdatum and enddatum
- startzeitpunkt and endzeitpunkt
"""
12 changes: 1 addition & 11 deletions src/bo4e/com/zeitreihenwert.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
and corresponding marshmallow schema for de-/serialization
"""
from datetime import datetime
from typing import Optional

from pydantic import field_validator
from pydantic_core.core_schema import ValidationInfo

from bo4e.com.zeitreihenwertkompakt import Zeitreihenwertkompakt
from bo4e.validators import check_bis_is_later_than_von

# pylint: disable=too-few-public-methods

Expand All @@ -33,13 +33,3 @@ class Zeitreihenwert(Zeitreihenwertkompakt):
datum_uhrzeit_bis: Optional[
datetime
] = None #: Datum Uhrzeit mit Auflösung Sekunden an dem das Messintervall endet (exklusiv)
_bis_check = field_validator("datum_uhrzeit_bis")(check_bis_is_later_than_von)

@staticmethod
def _get_inclusive_start(values: ValidationInfo) -> datetime:
"""return the inclusive start (used in the validator)"""
return values.data["datum_uhrzeit_von"]

# def _get_exclusive_end(self) -> datetime:
# """return the exclusive end (used in the validator)"""
# return self.datum_uhrzeit_bis
Loading

0 comments on commit 412a848

Please sign in to comment.