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
2 changes: 1 addition & 1 deletion .github/workflows/black.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: "Black"

on: [push]
on: [push,pull_request]
jobs:
black:
runs-on: ${{ matrix.os }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: "Coverage"

on: [push]
on: [push,pull_request]
jobs:
coverage:
runs-on: ${{ matrix.os }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: "Test Doc Creation (Sphinx)"
on: [push]
on: [push,pull_request]
jobs:
docbuild:
name: Check Docs
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/linting.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: "Linting"
on: [push]
on: [push,pull_request]
jobs:
linting:
name: Python Code Quality and Lint
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Tests

on: [push]
on: [push,pull_request]
jobs:
tests:
runs-on: ${{ matrix.os }}
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/psf/black
rev: 21.5b2 # Replace by any tag/version: https://github.com/psf/black/tags
rev: 22.3.0 # Replace by any tag/version: https://github.com/psf/black/tags
hooks:
- id: black
language_version: python3 # Should be a command that runs python3.6+
73 changes: 1 addition & 72 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -65,85 +65,14 @@ confidence=
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
disable=print-statement,
parameter-unpacking,
unpacking-in-except,
old-raise-syntax,
backtick,
long-suffix,
old-ne-operator,
old-octal-literal,
import-star-module-level,
non-ascii-bytes-literal,
raw-checker-failed,
disable=raw-checker-failed,
bad-inline-option,
locally-disabled,
file-ignored,
suppressed-message,
useless-suppression,
deprecated-pragma,
use-symbolic-message-instead,
apply-builtin,
basestring-builtin,
buffer-builtin,
cmp-builtin,
coerce-builtin,
execfile-builtin,
file-builtin,
long-builtin,
raw_input-builtin,
reduce-builtin,
standarderror-builtin,
unicode-builtin,
xrange-builtin,
coerce-method,
delslice-method,
getslice-method,
setslice-method,
no-absolute-import,
old-division,
dict-iter-method,
dict-view-method,
next-method-called,
metaclass-assignment,
indexing-exception,
raising-string,
reload-builtin,
oct-method,
hex-method,
nonzero-method,
cmp-method,
input-builtin,
round-builtin,
intern-builtin,
unichr-builtin,
map-builtin-not-iterating,
zip-builtin-not-iterating,
range-builtin-not-iterating,
filter-builtin-not-iterating,
using-cmp-argument,
eq-without-hash,
div-method,
idiv-method,
rdiv-method,
exception-message-attribute,
invalid-str-codec,
sys-max-int,
bad-python3-import,
deprecated-string-function,
deprecated-str-translate-call,
deprecated-itertools-function,
deprecated-types-field,
next-method-defined,
dict-items-not-iterating,
dict-keys-not-iterating,
dict-values-not-iterating,
deprecated-operator-function,
deprecated-urllib-function,
xreadlines-attribute,
deprecated-sys-function,
exception-escape,
comprehension-escape,
line-too-long

# Enable the message, report, category or checker with the given id(s). You can
Expand Down
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#
# This file is autogenerated by pip-compile with python 3.9
# This file is autogenerated by pip-compile with python 3.10
# To update, run:
#
# pip-compile requirements.in
#
attrs==21.2.0
attrs==21.4.0
# via -r requirements.in
iso3166==2.0.2
# via -r requirements.in
Expand All @@ -16,7 +16,7 @@ marshmallow-enum==1.5.1
# via -r requirements.in
packaging==21.3
# via marshmallow
pyparsing==3.0.7
pyparsing==3.0.9
# via packaging
stringcase==1.2.0
# via -r requirements.in
38 changes: 19 additions & 19 deletions src/bo4e/bo/angebot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from datetime import datetime
from typing import List, Optional

import attr
import attrs
from marshmallow import fields
from marshmallow_enum import EnumField # type:ignore[import]

Expand All @@ -19,7 +19,7 @@


# pylint: disable=too-few-public-methods, too-many-instance-attributes
@attr.s(auto_attribs=True, kw_only=True)
@attrs.define(auto_attribs=True, kw_only=True)
class Angebot(Geschaeftsobjekt):
"""
Mit diesem BO kann ein Versorgungsangebot zur Strom- oder Gasversorgung oder die Teilnahme an einer Ausschreibung
Expand All @@ -32,45 +32,45 @@ class Angebot(Geschaeftsobjekt):

"""

bo_typ: BoTyp = attr.ib(default=BoTyp.ANGEBOT)
bo_typ: BoTyp = attrs.field(default=BoTyp.ANGEBOT)
# required attributes
#: Eindeutige Nummer des Angebotes
angebotsnummer: str = attr.ib(validator=attr.validators.matches_re(r"^\d+$"))
angebotsnummer: str = attrs.field(validator=attrs.validators.matches_re(r"^\d+$"))
#: Erstellungsdatum des Angebots
angebotsdatum: datetime = attr.ib(validator=attr.validators.instance_of(datetime))
angebotsdatum: datetime = attrs.field(validator=attrs.validators.instance_of(datetime))
#: Sparte, für die das Angebot abgegeben wird (Strom/Gas)
sparte: Sparte = attr.ib(validator=attr.validators.instance_of(Sparte))
sparte: Sparte = attrs.field(validator=attrs.validators.instance_of(Sparte))
#: Ersteller des Angebots
angebotsgeber: Geschaeftspartner = attr.ib(validator=attr.validators.instance_of(Geschaeftspartner))
angebotsgeber: Geschaeftspartner = attrs.field(validator=attrs.validators.instance_of(Geschaeftspartner))
#: Empfänger des Angebots
angebotsnehmer: Geschaeftspartner = attr.ib(validator=attr.validators.instance_of(Geschaeftspartner))
angebotsnehmer: Geschaeftspartner = attrs.field(validator=attrs.validators.instance_of(Geschaeftspartner))

varianten: List[Angebotsvariante] = attr.ib(
validator=attr.validators.deep_iterable(
member_validator=attr.validators.instance_of(Angebotsvariante),
varianten: List[Angebotsvariante] = attrs.field(
validator=attrs.validators.deep_iterable(
member_validator=attrs.validators.instance_of(Angebotsvariante),
iterable_validator=check_list_length_at_least_one,
)
)
""" Eine oder mehrere Varianten des Angebots mit den Angebotsteilen;
Ein Angebot besteht mindestens aus einer Variante."""

# optional attributes
anfragereferenz: Optional[str] = attr.ib(
default=None, validator=attr.validators.optional(attr.validators.instance_of(str))
anfragereferenz: Optional[str] = attrs.field(
default=None, validator=attrs.validators.optional(attrs.validators.instance_of(str))
)
""" Referenz auf eine Anfrage oder Ausschreibung;
Kann dem Empfänger des Angebotes bei Zuordnung des Angebotes zur Anfrage bzw. Ausschreibung helfen."""
#: Bis zu diesem Zeitpunkt (Tag/Uhrzeit) inklusive gilt das Angebot
bindefrist: Optional[datetime] = attr.ib(
default=None, validator=attr.validators.optional(attr.validators.instance_of(datetime))
bindefrist: Optional[datetime] = attrs.field(
default=None, validator=attrs.validators.optional(attrs.validators.instance_of(datetime))
)
#: Person, die als Angebotsnehmer das Angebot angenommen hat
unterzeichner_angebotsnehmer: Optional[Ansprechpartner] = attr.ib(
default=None, validator=attr.validators.optional(attr.validators.instance_of(Ansprechpartner))
unterzeichner_angebotsnehmer: Optional[Ansprechpartner] = attrs.field(
default=None, validator=attrs.validators.optional(attrs.validators.instance_of(Ansprechpartner))
)
#: Person, die als Angebotsgeber das Angebots ausgestellt hat
unterzeichner_angebotsgeber: Optional[Ansprechpartner] = attr.ib(
default=None, validator=attr.validators.optional(attr.validators.instance_of(Ansprechpartner))
unterzeichner_angebotsgeber: Optional[Ansprechpartner] = attrs.field(
default=None, validator=attrs.validators.optional(attrs.validators.instance_of(Ansprechpartner))
)


Expand Down
26 changes: 14 additions & 12 deletions src/bo4e/bo/ansprechpartner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Contains Ansprechpartner class
and corresponding marshmallow schema for de-/serialization
"""
import attr
import attrs
from marshmallow import fields
from marshmallow_enum import EnumField # type:ignore[import]

Expand All @@ -17,7 +17,7 @@


# pylint: disable=too-many-instance-attributes, too-few-public-methods
@attr.s(auto_attribs=True, kw_only=True)
@attrs.define(auto_attribs=True, kw_only=True)
class Ansprechpartner(Geschaeftsobjekt):
"""
Object containing information about a Ansprechpartner
Expand All @@ -28,28 +28,30 @@ class Ansprechpartner(Geschaeftsobjekt):
"""

# required attributes
bo_typ: BoTyp = attr.ib(default=BoTyp.ANSPRECHPARTNER)
bo_typ: BoTyp = attrs.field(default=BoTyp.ANSPRECHPARTNER)
nachname: str #: Nachname (Familienname) des Ansprechpartners
geschaeftspartner: Geschaeftspartner #: Der Geschäftspartner, für den dieser Ansprechpartner modelliert wird

# optional attributes
anrede: Anrede = attr.ib(default=None) #: Mögliche Anrede des Ansprechpartners
individuelle_anrede: str = attr.ib(default=None)
anrede: Anrede = attrs.field(default=None) #: Mögliche Anrede des Ansprechpartners
individuelle_anrede: str = attrs.field(default=None)
"""
Im Falle einer nicht standardisierten Anrede kann hier eine frei definierbare Anrede vorgegeben werden.
Beispiel: "Sehr geehrte Frau Müller, sehr geehrter Herr Dr. Müller"
"""

titel: Titel = attr.ib(default=None) #: Möglicher Titel des Ansprechpartners
vorname: str = attr.ib(default=None) #: Vorname des Ansprechpartners
e_mail_adresse: str = attr.ib(default=None) #: E-Mail Adresse
kommentar: str = attr.ib(default=None) #: Weitere Informationen zum Ansprechpartner
titel: Titel = attrs.field(default=None) #: Möglicher Titel des Ansprechpartners
vorname: str = attrs.field(default=None) #: Vorname des Ansprechpartners
e_mail_adresse: str = attrs.field(default=None) #: E-Mail Adresse
kommentar: str = attrs.field(default=None) #: Weitere Informationen zum Ansprechpartner
#: Adresse des Ansprechpartners, falls diese von der Adresse des Geschäftspartners abweicht
adresse: Adresse = attr.ib(default=None)
adresse: Adresse = attrs.field(default=None)
#: Liste der Telefonnummern, unter denen der Ansprechpartner erreichbar ist
rufnummer: Rufnummer = attr.ib(default=None) # todo: make this a list and rename to rufnummern
rufnummer: Rufnummer = attrs.field(default=None) # todo: make this a list and rename to rufnummern
#: Liste der Abteilungen und Zuständigkeiten des Ansprechpartners
zustaendigkeit: Zustaendigkeit = attr.ib(default=None) # todo: make this a list and rename to "zustaendigkeiten"
zustaendigkeit: Zustaendigkeit = attrs.field(
default=None
) # todo: make this a list and rename to "zustaendigkeiten"


class AnsprechpartnerSchema(GeschaeftsobjektSchema):
Expand Down
38 changes: 20 additions & 18 deletions src/bo4e/bo/ausschreibung.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from datetime import datetime
from typing import List, Optional

import attr
import attrs
from marshmallow import fields
from marshmallow_enum import EnumField # type:ignore[import]

Expand All @@ -20,7 +20,7 @@


# pylint: disable=too-few-public-methods, too-many-instance-attributes
@attr.s(auto_attribs=True, kw_only=True)
@attrs.define(auto_attribs=True, kw_only=True)
class Ausschreibung(Geschaeftsobjekt):
"""
Das BO Ausschreibung dient zur detaillierten Darstellung von ausgeschriebenen Energiemengen in der Energiewirtschaft
Expand All @@ -31,48 +31,50 @@ class Ausschreibung(Geschaeftsobjekt):
"""

# required attributes
bo_typ: BoTyp = attr.ib(default=BoTyp.AUSSCHREIBUNG)
bo_typ: BoTyp = attrs.field(default=BoTyp.AUSSCHREIBUNG)
#: Vom Herausgeber der Ausschreibung vergebene eindeutige Nummer
ausschreibungsnummer: str = attr.ib(validator=attr.validators.instance_of(str))
ausschreibungsnummer: str = attrs.field(validator=attrs.validators.instance_of(str))
#: Aufzählung für die Typisierung von Ausschreibungen
ausschreibungstyp: Ausschreibungstyp = attr.ib(validator=attr.validators.instance_of(Ausschreibungstyp))
ausschreibungstyp: Ausschreibungstyp = attrs.field(validator=attrs.validators.instance_of(Ausschreibungstyp))
#: Bezeichnungen für die Ausschreibungsphasen
ausschreibungsstatus: Ausschreibungsstatus = attr.ib(validator=attr.validators.instance_of(Ausschreibungsstatus))
ausschreibungsstatus: Ausschreibungsstatus = attrs.field(
validator=attrs.validators.instance_of(Ausschreibungsstatus)
)
#: Kennzeichen, ob die Ausschreibung kostenpflichtig ist
kostenpflichtig: bool = attr.ib(validator=attr.validators.instance_of(bool))
kostenpflichtig: bool = attrs.field(validator=attrs.validators.instance_of(bool))
#: Gibt den Veröffentlichungszeitpunkt der Ausschreibung an
veroeffentlichungszeitpunkt: datetime = attr.ib(validator=attr.validators.instance_of(datetime))
ausschreibender: Geschaeftspartner = attr.ib(validator=attr.validators.instance_of(Geschaeftspartner))
veroeffentlichungszeitpunkt: datetime = attrs.field(validator=attrs.validators.instance_of(datetime))
ausschreibender: Geschaeftspartner = attrs.field(validator=attrs.validators.instance_of(Geschaeftspartner))
"""
Mit diesem Objekt können Geschäftspartner übertragen werden.
Sowohl Unternehmen, als auch Privatpersonen können Geschäftspartner sein
"""
abgabefrist: Zeitraum = attr.ib(validator=attr.validators.instance_of(Zeitraum))
abgabefrist: Zeitraum = attrs.field(validator=attrs.validators.instance_of(Zeitraum))
"""
Diese Komponente wird zur Abbildung von Zeiträumen in Form von Dauern oder der Angabe von Start und Ende verwendet.
Es muss daher entweder eine Dauer oder ein Zeitraum in Form von Start und Ende angegeben sein
"""
bindefrist: Zeitraum = attr.ib(validator=attr.validators.instance_of(Zeitraum))
bindefrist: Zeitraum = attrs.field(validator=attrs.validators.instance_of(Zeitraum))
"""
Diese Komponente wird zur Abbildung von Zeiträumen in Form von Dauern oder der Angabe von Start und Ende verwendet.
Es muss daher entweder eine Dauer oder ein Zeitraum in Form von Start und Ende angegeben sein
"""
#: Die einzelnen Lose, aus denen sich die Ausschreibung zusammensetzt
lose: List[Ausschreibungslos] = attr.ib(
validator=attr.validators.deep_iterable(
member_validator=attr.validators.instance_of(Ausschreibungslos),
lose: List[Ausschreibungslos] = attrs.field(
validator=attrs.validators.deep_iterable(
member_validator=attrs.validators.instance_of(Ausschreibungslos),
iterable_validator=check_list_length_at_least_one,
)
)

# optional attributes
#: Aufzählung der unterstützten Ausschreibungsportale
ausschreibungportal: Optional[Ausschreibungsportal] = attr.ib(
default=None, validator=attr.validators.optional(attr.validators.instance_of(Ausschreibungsportal))
ausschreibungportal: Optional[Ausschreibungsportal] = attrs.field(
default=None, validator=attrs.validators.optional(attrs.validators.instance_of(Ausschreibungsportal))
)
#: Internetseite, auf der die Ausschreibung veröffentlicht wurde (falls vorhanden)
webseite: Optional[str] = attr.ib(
default=None, validator=attr.validators.optional(attr.validators.instance_of(str))
webseite: Optional[str] = attrs.field(
default=None, validator=attrs.validators.optional(attrs.validators.instance_of(str))
)


Expand Down
Loading