diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70f55db..fb401e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,9 +19,6 @@ jobs: fail-fast: false matrix: include: - - name: "pytest (3.9)" - python: "3.9" - tox: "3.9" - name: "pytest (3.10)" python: "3.10" tox: "3.10" @@ -34,6 +31,9 @@ jobs: - name: "pytest (3.13)" python: "3.13" tox: "3.13" + - name: "pytest (3.14)" + python: "3.14" + tox: "3.14" coverage: true - name: "mypy" python: "3.13" diff --git a/pyproject.toml b/pyproject.toml index b4b7225..7d1837e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "brreg" version = "1.3.0" description = "API client for Brønnøysundregistrene." authors = [{ name = "Stein Magnus Jodal", email = "stein.magnus@jodal.no" }] -requires-python = ">=3.9" +requires-python = ">=3.10" readme = "README.md" license = "Apache-2.0" keywords = ["brreg", "enhetsregisteret"] @@ -76,7 +76,7 @@ disallow_untyped_defs = true [tool.pyright] -pythonVersion = "3.9" +pythonVersion = "3.10" typeCheckingMode = "strict" # Already covered by tests and careful import ordering: reportImportCycles = false @@ -85,7 +85,7 @@ reportPrivateUsage = false [tool.ruff] -target-version = "py39" +target-version = "py310" [tool.ruff.lint] select = ["ALL"] @@ -112,11 +112,11 @@ keep-runtime-typing = true [tool.tox] env_list = [ - "3.9", "3.10", "3.11", "3.12", "3.13", + "3.14", "docs", "mypy", "pyright", diff --git a/src/brreg/_exceptions.py b/src/brreg/_exceptions.py index 1e191e4..99abe8d 100644 --- a/src/brreg/_exceptions.py +++ b/src/brreg/_exceptions.py @@ -1,6 +1,3 @@ -from typing import Optional - - class BrregError(Exception): """Top-level exception. @@ -16,9 +13,9 @@ def __init__( self, msg: str, *, - method: Optional[str], - url: Optional[str], - status_code: Optional[int], + method: str | None, + url: str | None, + status_code: int | None, ) -> None: super().__init__(f"REST API exception: {msg}") self.method = method diff --git a/src/brreg/enhetsregisteret/_client.py b/src/brreg/enhetsregisteret/_client.py index f76a602..a0ba800 100644 --- a/src/brreg/enhetsregisteret/_client.py +++ b/src/brreg/enhetsregisteret/_client.py @@ -1,7 +1,7 @@ from collections.abc import Generator from contextlib import contextmanager from types import TracebackType -from typing import Any, Optional +from typing import Any import httpx @@ -48,9 +48,9 @@ def __enter__(self) -> "Client": def __exit__( self, - exc_type: Optional[type[BaseException]] = None, - exc_value: Optional[BaseException] = None, - traceback: Optional[TracebackType] = None, + exc_type: type[BaseException] | None = None, + exc_value: BaseException | None = None, + traceback: TracebackType | None = None, ) -> None: self.close() @@ -78,7 +78,7 @@ def close(self) -> None: def get_enhet( self, organisasjonsnummer: Organisasjonsnummer, - ) -> Optional[Enhet]: + ) -> Enhet | None: """Get :class:`Enhet` given an organization number.""" orgnr = OrganisasjonsnummerValidator.validate_python(organisasjonsnummer) with error_handler(): @@ -99,7 +99,7 @@ def get_enhet( def get_underenhet( self, organisasjonsnummer: Organisasjonsnummer, - ) -> Optional[Underenhet]: + ) -> Underenhet | None: """Get :class:`Underenhet` given an organization number.""" orgnr = OrganisasjonsnummerValidator.validate_python(organisasjonsnummer) with error_handler(): @@ -184,7 +184,7 @@ def error_handler() -> Generator[None, Any, None]: try: yield except httpx.HTTPError as exc: - response: Optional[httpx.Response] = getattr(exc, "response", None) + response: httpx.Response | None = getattr(exc, "response", None) raise BrregRestError( str(exc), method=(exc.request.method if exc.request else None), diff --git a/src/brreg/enhetsregisteret/_pagination.py b/src/brreg/enhetsregisteret/_pagination.py index 87dcf96..f01db4b 100644 --- a/src/brreg/enhetsregisteret/_pagination.py +++ b/src/brreg/enhetsregisteret/_pagination.py @@ -1,16 +1,7 @@ -from collections.abc import Iterator -from typing import ( - Callable, - Generic, - Optional, - TypeVar, -) - -from pydantic import ( - AliasPath, - BaseModel, - Field, -) +from collections.abc import Callable, Iterator +from typing import Generic, TypeVar + +from pydantic import AliasPath, BaseModel, Field from brreg.enhetsregisteret._queries import Query from brreg.enhetsregisteret._responses import Enhet, Underenhet @@ -75,7 +66,7 @@ def __init__( # Expose the empty first page, even if it says the totalt number of pages is 0. self.page_numbers = range(max(1, page.total_pages)) - def get_page(self, page_number: int) -> Optional[Page[T]]: + def get_page(self, page_number: int) -> Page[T] | None: """Get a page by its 0-indexed page number.""" if page_number not in self.page_numbers: return None diff --git a/src/brreg/enhetsregisteret/_queries.py b/src/brreg/enhetsregisteret/_queries.py index 8069a92..70008f3 100644 --- a/src/brreg/enhetsregisteret/_queries.py +++ b/src/brreg/enhetsregisteret/_queries.py @@ -1,13 +1,8 @@ import datetime as dt -from typing import Literal, Optional +from typing import Literal from urllib.parse import urlencode -from pydantic import ( - BaseModel, - Field, - NonNegativeInt, - PositiveInt, -) +from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt from brreg.enhetsregisteret._types import ( CommaList, @@ -28,13 +23,13 @@ class Query(BaseModel): """The fields here are available on all queries.""" #: Sortering av resultatsett - sort: Optional[Literal["ASC", "DESC"]] = None + sort: Literal["ASC", "DESC"] | None = None #: Sidestørrelse - size: Optional[PositiveInt] = None + size: PositiveInt | None = None #: Sidenummer - page: Optional[NonNegativeInt] = None + page: NonNegativeInt | None = None def as_url_query(self) -> str: params = self.model_dump( @@ -52,7 +47,7 @@ class EnhetQuery(Query): """The query type for enhet search.""" #: Enhetens navn - navn: Optional[str] = None + navn: str | None = None #: Organisasjonsnummeret til enheten organisasjonsnummer: CommaList[Organisasjonsnummer] = Field( @@ -60,46 +55,46 @@ class EnhetQuery(Query): ) #: Organisasjonsnummeret til enhetens overordnede enhet - overordnet_enhet: Optional[Organisasjonsnummer] = Field( + overordnet_enhet: Organisasjonsnummer | None = Field( default=None, serialization_alias="overordnetEnhet", ) #: Minste antall ansatte hos enheten - fra_antall_ansatte: Optional[PositiveInt] = Field( + fra_antall_ansatte: PositiveInt | None = Field( default=None, serialization_alias="fraAntallAnsatte", ) #: Største antall ansatte hos enheten - til_antall_ansatte: Optional[PositiveInt] = Field( + til_antall_ansatte: PositiveInt | None = Field( default=None, serialization_alias="tilAntallAnsatte", ) #: Hvorvidt enheten er registrert som konkurs - konkurs: Optional[bool] = None + konkurs: bool | None = None #: Hvorvidt enheten er registrert i Mva-registeret - registrert_i_mvaregisteret: Optional[bool] = Field( + registrert_i_mvaregisteret: bool | None = Field( default=None, serialization_alias="registrertIMvaregisteret", ) #: Hvorvidt enheten er registrert i Foretaksregisteret - registrert_i_foretaksregisteret: Optional[bool] = Field( + registrert_i_foretaksregisteret: bool | None = Field( default=None, serialization_alias="registrertIForetaksregisteret", ) #: Hvorvidt enheten er registrert i Stiftelsesregisteret - registrert_i_stiftelsesregisteret: Optional[bool] = Field( + registrert_i_stiftelsesregisteret: bool | None = Field( default=None, serialization_alias="registrertIStiftelsesregisteret", ) #: Hvorvidt enheten er registrert i Frivillighetsregisteret - registrert_i_frivillighetsregisteret: Optional[bool] = Field( + registrert_i_frivillighetsregisteret: bool | None = Field( default=None, serialization_alias="registrertIFrivillighetsregisteret", ) @@ -112,31 +107,31 @@ class EnhetQuery(Query): #: Hvorvidt enheten er registrert som under tvangsavvikling eller #: tvangsoppløsning - under_tvangsavvikling_eller_tvangsopplosning: Optional[bool] = None + under_tvangsavvikling_eller_tvangsopplosning: bool | None = None #: Hvorvidt enheten er registrert som under avvikling - under_avvikling: Optional[bool] = None + under_avvikling: bool | None = None #: Tidligste registreringsdato i Enhetsregisteret - fra_registreringsdato_enhetsregisteret: Optional[dt.date] = Field( + fra_registreringsdato_enhetsregisteret: dt.date | None = Field( default=None, serialization_alias="fraRegistreringsdatoEnhetsregisteret", ) #: Seneste registreringsdato i Enhetsregisteret - til_registreringsdato_enhetsregisteret: Optional[dt.date] = Field( + til_registreringsdato_enhetsregisteret: dt.date | None = Field( default=None, serialization_alias="tilRegistreringsdatoEnhetsregisteret", ) #: Tidligste stiftelsesdato for enheten - fra_stiftelsesdato: Optional[dt.date] = Field( + fra_stiftelsesdato: dt.date | None = Field( default=None, serialization_alias="fraStiftelsesdato", ) #: Seneste stiftelsesdato for enheten - til_stiftelsesdato: Optional[dt.date] = Field( + til_stiftelsesdato: dt.date | None = Field( default=None, serialization_alias="tilStiftelsesdato", ) @@ -147,7 +142,7 @@ class EnhetQuery(Query): ) #: Enhetens hjemmeside - hjemmeside: Optional[str] = None + hjemmeside: str | None = None #: Enhetens institusjonelle sektorkode institusjonell_sektorkode: CommaList[Sektorkode] = Field( @@ -167,7 +162,7 @@ class EnhetQuery(Query): ) #: Poststedet til enhetens postadresse - postadresse_poststed: Optional[str] = Field( + postadresse_poststed: str | None = Field( default=None, serialization_alias="postadresse.poststed", ) @@ -179,7 +174,7 @@ class EnhetQuery(Query): ) #: Adresse til enhetens postadresse - postadresse_adresse: Optional[str] = Field( + postadresse_adresse: str | None = Field( default=None, serialization_alias="postadresse.adresse", ) @@ -197,7 +192,7 @@ class EnhetQuery(Query): ) #: Poststedet til enhetens forretningsadresse - forretningsadresse_poststed: Optional[str] = Field( + forretningsadresse_poststed: str | None = Field( default=None, serialization_alias="forretningsadresse.poststed", ) @@ -209,7 +204,7 @@ class EnhetQuery(Query): ) #: Adresse til enhetens forretningsadresse - forretningsadresse_adresse: Optional[str] = Field( + forretningsadresse_adresse: str | None = Field( default=None, serialization_alias="forretningsadresse.adresse", ) @@ -230,7 +225,7 @@ class UnderenhetQuery(Query): """The query type for underenhet search.""" #: Underenhetens navn - navn: Optional[str] = None + navn: str | None = None #: Organisasjonsnummeret til underenheten organisasjonsnummer: CommaList[Organisasjonsnummer] = Field( @@ -238,73 +233,73 @@ class UnderenhetQuery(Query): ) #: Organisasjonsnummeret til underenhetens overordnede enhet - overordnet_enhet: Optional[Organisasjonsnummer] = Field( + overordnet_enhet: Organisasjonsnummer | None = Field( default=None, serialization_alias="overordnetEnhet", ) #: Minste antall ansatte hos underenheten - fra_antall_ansatte: Optional[PositiveInt] = Field( + fra_antall_ansatte: PositiveInt | None = Field( default=None, serialization_alias="fraAntallAnsatte", ) #: Største antall ansatte hos underenheten - til_antall_ansatte: Optional[PositiveInt] = Field( + til_antall_ansatte: PositiveInt | None = Field( default=None, serialization_alias="tilAntallAnsatte", ) #: Hvorvidt underenheten er registrert i Mva-registeret - registrert_i_mvaregisteret: Optional[bool] = Field( + registrert_i_mvaregisteret: bool | None = Field( default=None, serialization_alias="registrertIMvaregisteret", ) #: Tidligste registreringsdato i Enhetsregisteret - fra_registreringsdato_enhetsregisteret: Optional[dt.date] = Field( + fra_registreringsdato_enhetsregisteret: dt.date | None = Field( default=None, serialization_alias="fraRegistreringsdatoEnhetsregisteret", ) #: Seneste registreringsdato i Enhetsregisteret - til_registreringsdato_enhetsregisteret: Optional[dt.date] = Field( + til_registreringsdato_enhetsregisteret: dt.date | None = Field( default=None, serialization_alias="tilRegistreringsdatoEnhetsregisteret", ) #: Tidligste oppstartsdato for enheten - fra_oppstartsdato: Optional[dt.date] = Field( + fra_oppstartsdato: dt.date | None = Field( default=None, serialization_alias="fraOppstartsdato", ) #: Seneste oppstartsdato for enheten - til_oppstartsdato: Optional[dt.date] = Field( + til_oppstartsdato: dt.date | None = Field( default=None, serialization_alias="tilOppstartsdato", ) #: Tidligste registreringsdato for eierskifte - fra_dato_eierskifte: Optional[dt.date] = Field( + fra_dato_eierskifte: dt.date | None = Field( default=None, serialization_alias="fraDatoEierskifte", ) #: Seneste registreringsdato for eierskifte - til_dato_eierskifte: Optional[dt.date] = Field( + til_dato_eierskifte: dt.date | None = Field( default=None, serialization_alias="tilDatoEierskifte", ) #: Tidligste nedleggelsesdato for enheten - fra_nedleggelsesdato: Optional[dt.date] = Field( + fra_nedleggelsesdato: dt.date | None = Field( default=None, serialization_alias="fraNedleggelsesdato", ) #: Seneste nedleggelsesdato for enheten - til_nedleggelsesdato: Optional[dt.date] = Field( + til_nedleggelsesdato: dt.date | None = Field( default=None, serialization_alias="tilNedleggelsesdato", ) @@ -315,7 +310,7 @@ class UnderenhetQuery(Query): ) #: Enhetens hjemmeside - hjemmeside: Optional[str] = None + hjemmeside: str | None = None #: Kommunenummer til underenhetens postadresse postadresse_kommunenummer: CommaList[Kommunenummer] = Field( @@ -330,7 +325,7 @@ class UnderenhetQuery(Query): ) #: Poststedet til underenhetens postadresse - postadresse_poststed: Optional[str] = Field( + postadresse_poststed: str | None = Field( default=None, serialization_alias="postadresse.poststed", ) @@ -342,7 +337,7 @@ class UnderenhetQuery(Query): ) #: Adresse til underenhetens postadresse - postadresse_adresse: Optional[str] = Field( + postadresse_adresse: str | None = Field( default=None, serialization_alias="postadresse.adresse", ) @@ -360,7 +355,7 @@ class UnderenhetQuery(Query): ) #: Poststedet til enhetens beliggenhetsadresse - beliggenhetsadresse_poststed: Optional[str] = Field( + beliggenhetsadresse_poststed: str | None = Field( default=None, serialization_alias="beliggenhetsadresse.poststed", ) @@ -372,7 +367,7 @@ class UnderenhetQuery(Query): ) #: Adresse til enhetens beliggenhetsadresse - beliggenhetsadresse_adresse: Optional[str] = Field( + beliggenhetsadresse_adresse: str | None = Field( default=None, serialization_alias="beliggenhetsadresse.adresse", ) diff --git a/src/brreg/enhetsregisteret/_responses.py b/src/brreg/enhetsregisteret/_responses.py index df766d6..8d2d0c8 100644 --- a/src/brreg/enhetsregisteret/_responses.py +++ b/src/brreg/enhetsregisteret/_responses.py @@ -1,11 +1,7 @@ import datetime as dt from typing import Optional -from pydantic import ( - BaseModel, - ConfigDict, - Field, -) +from pydantic import BaseModel, ConfigDict, Field from pydantic.alias_generators import to_camel from brreg.enhetsregisteret._types import DateOrNone @@ -23,35 +19,35 @@ class InstitusjonellSektor(BaseModel): model_config = ConfigDict(alias_generator=to_camel) #: Sektorkoden - kode: Optional[str] = None + kode: str | None = None #: Tekstlig beskrivelse av sektorkoden - beskrivelse: Optional[str] = None + beskrivelse: str | None = None class Adresse(BaseModel): model_config = ConfigDict(alias_generator=to_camel) #: Adresse - adresse: list[Optional[str]] = Field(default_factory=list) + adresse: list[str | None] = Field(default_factory=list) #: Postnummer - postnummer: Optional[str] = None + postnummer: str | None = None #: Poststed - poststed: Optional[str] = None + poststed: str | None = None #: Kommunenummer - kommunenummer: Optional[str] = None + kommunenummer: str | None = None #: Kommune - kommune: Optional[str] = None + kommune: str | None = None #: Landkode - landkode: Optional[str] = None + landkode: str | None = None #: Land - land: Optional[str] = None + land: str | None = None class Naering(BaseModel): @@ -64,10 +60,10 @@ class Naering(BaseModel): model_config = ConfigDict(alias_generator=to_camel) #: Næringskoden - kode: Optional[str] = None + kode: str | None = None #: Tekstlig beskrivelse av næringskoden - beskrivelse: Optional[str] = None + beskrivelse: str | None = None class Organisasjonsform(BaseModel): @@ -108,77 +104,77 @@ class Enhet(BaseModel): organisasjonsform: Organisasjonsform #: Hjemmeside - hjemmeside: Optional[str] = None + hjemmeside: str | None = None #: Enhetens postadresse - postadresse: Optional[Adresse] = None + postadresse: Adresse | None = None #: Registreringsdato i Enhetsregisteret registreringsdato_enhetsregisteret: DateOrNone = None #: Hvorvidt enheten er registrert i MVA-registeret - registrert_i_mvaregisteret: Optional[bool] = None + registrert_i_mvaregisteret: bool | None = None #: Enheter som i utgangspunktet ikke er mva-pliktig, kan søke om frivillig #: registrering i Merverdiavgiftsregisteret frivillig_mva_registrert_beskrivelser: list[str] = Field(default_factory=list) #: Næringskode 1 - naeringskode1: Optional[Naering] = None + naeringskode1: Naering | None = None #: Næringskode 2 - naeringskode2: Optional[Naering] = None + naeringskode2: Naering | None = None #: Næringskode 3 - naeringskode3: Optional[Naering] = None + naeringskode3: Naering | None = None #: Hjelpeenhetskode - hjelpeenhetskode: Optional[Naering] = None + hjelpeenhetskode: Naering | None = None #: Antall ansatte - antall_ansatte: Optional[int] = None + antall_ansatte: int | None = None #: Angir om enheten har registrert ansatte - har_registrert_antall_ansatte: Optional[bool] = None + har_registrert_antall_ansatte: bool | None = None #: Organisasjonsnummeret til overordnet enhet i offentlig sektor - overordnet_enhet: Optional[str] = None + overordnet_enhet: str | None = None #: Forretningsadresse - forretningsadresse: Optional[Adresse] = None + forretningsadresse: Adresse | None = None #: Stiftelsesdato stiftelsesdato: DateOrNone = None #: Sektorkode - institusjonell_sektorkode: Optional[InstitusjonellSektor] = None + institusjonell_sektorkode: InstitusjonellSektor | None = None #: Hvorvidt enheten er registrert i Foretaksregisteret - registrert_i_foretaksregisteret: Optional[bool] = None + registrert_i_foretaksregisteret: bool | None = None #: Hvorvidt enheten er registrert i Stiftelsesregisteret - registrert_i_stiftelsesregisteret: Optional[bool] = None + registrert_i_stiftelsesregisteret: bool | None = None #: Hvorvidt enheten er registrert i Frivillighetsregisteret - registrert_i_frivillighetsregisteret: Optional[bool] = None + registrert_i_frivillighetsregisteret: bool | None = None #: År for siste innsendte årsregnskap - siste_innsendte_aarsregnskap: Optional[int] = None + siste_innsendte_aarsregnskap: int | None = None #: Hvorvidt enheten er konkurs - konkurs: Optional[bool] = None + konkurs: bool | None = None #: Kjennelsesdato for konkursen konkursdato: DateOrNone = None #: Hvorvidt enheten er under avvikling - under_avvikling: Optional[bool] = None + under_avvikling: bool | None = None #: Hvorvidt enheten er under tvangsavvikling eller tvangsoppløsning - under_tvangsavvikling_eller_tvangsopplosning: Optional[bool] = None + under_tvangsavvikling_eller_tvangsopplosning: bool | None = None #: Målform - maalform: Optional[str] = None + maalform: str | None = None #: Enhetens vedtektsdato vedtektsdato: DateOrNone = None @@ -215,44 +211,44 @@ class Underenhet(BaseModel): organisasjonsform: Organisasjonsform #: Underenhetens hjemmeside - hjemmeside: Optional[str] = None + hjemmeside: str | None = None #: Underenhetens postadresse - postadresse: Optional[Adresse] = None + postadresse: Adresse | None = None #: Underenhetens registreringsdato i Enhetsregisteret registreringsdato_enhetsregisteret: DateOrNone = None #: Hvorvidt underenheten er registrert i MVA-registeret - registrert_i_mvaregisteret: Optional[bool] = None + registrert_i_mvaregisteret: bool | None = None #: Underenheter som i utgangspunktet ikke er mva-pliktig, kan søke om #: frivillig registrering i Merverdiavgiftsregisteret frivillig_mva_registrert_beskrivelser: list[str] = Field(default_factory=list) #: Næringskode 1 - naeringskode1: Optional[Naering] = None + naeringskode1: Naering | None = None #: Næringskode 2 - naeringskode2: Optional[Naering] = None + naeringskode2: Naering | None = None #: Næringskode 3 - naeringskode3: Optional[Naering] = None + naeringskode3: Naering | None = None #: Hjelpeenhetskode - hjelpeenhetskode: Optional[Naering] = None + hjelpeenhetskode: Naering | None = None #: Antall ansatte - antall_ansatte: Optional[int] = None + antall_ansatte: int | None = None #: Angir om enheten har registrert ansatte - har_registrert_antall_ansatte: Optional[bool] = None + har_registrert_antall_ansatte: bool | None = None #: Underenhetens overordnede enhet - overordnet_enhet: Optional[str] = None + overordnet_enhet: str | None = None #: Underenhetens beliggenhetsadresse - beliggenhetsadresse: Optional[Adresse] = None + beliggenhetsadresse: Adresse | None = None #: Underenhetens oppstartsdato oppstartsdato: DateOrNone = None @@ -284,7 +280,7 @@ class RollePersonNavn(BaseModel): fornavn: str #: Personens mellomnavn - mellomnavn: Optional[str] = None + mellomnavn: str | None = None #: Personens etternavn etternavn: str @@ -326,7 +322,7 @@ class RolleFullmektig(BaseModel): model_config = ConfigDict(alias_generator=to_camel) #: Navn på fullmektig - navn: Optional[str] = None + navn: str | None = None #: Adresser/adresselinjer knyttet til fullmektig adresse: list[str] = Field(default_factory=list) @@ -339,16 +335,16 @@ class Rolle(BaseModel): type: RolleType #: Person som innehar rollen - person: Optional[RollePerson] = None + person: RollePerson | None = None #: Enhet som innehar rollen - enhet: Optional[RolleEnhet] = None + enhet: RolleEnhet | None = None #: Rollens ansvarsandel for selskapets forpliktelser, i brøk eller prosent - ansvarsandel: Optional[str] = None + ansvarsandel: str | None = None #: Kode og beskrivelse av hvem rollen representerer (ikke innehaver) - valgt_av: Optional[RolleType] = None + valgt_av: RolleType | None = None #: Fratrådt fra rolle fratraadt: bool @@ -357,7 +353,7 @@ class Rolle(BaseModel): fullmektige: list[RolleFullmektig] = Field(default_factory=list) #: Rekkefølgen på rollen i gruppen - rekkefolge: Optional[int] = None + rekkefolge: int | None = None class RolleGruppeType(BaseModel): diff --git a/src/brreg/enhetsregisteret/_types.py b/src/brreg/enhetsregisteret/_types.py index 4fb821a..6752185 100644 --- a/src/brreg/enhetsregisteret/_types.py +++ b/src/brreg/enhetsregisteret/_types.py @@ -1,12 +1,7 @@ import datetime as dt -from typing import Annotated, Optional, TypeVar +from typing import Annotated, TypeVar -from pydantic import ( - BeforeValidator, - Field, - PlainSerializer, - TypeAdapter, -) +from pydantic import BeforeValidator, Field, PlainSerializer, TypeAdapter T = TypeVar("T") @@ -23,7 +18,7 @@ # Same as `Optional[dt.date]`, except that this version deserializes empty # strings to `None`. DateOrNone = Annotated[ - Optional[dt.date], + dt.date | None, BeforeValidator(lambda v: v if v != "" else None), ] diff --git a/tests/enhetsregisteret/test_types.py b/tests/enhetsregisteret/test_types.py index 01272f8..cd93b7e 100644 --- a/tests/enhetsregisteret/test_types.py +++ b/tests/enhetsregisteret/test_types.py @@ -1,5 +1,3 @@ -from typing import Optional - import pytest from brreg.enhetsregisteret import ( @@ -28,8 +26,8 @@ ) def test_kommunenummer( value: str, - expected: Optional[str], - error: Optional[str], + expected: str | None, + error: str | None, ) -> None: if expected: assert KommunenummerValidator.validate_python(value) == expected @@ -61,8 +59,8 @@ def test_kommunenummer( ) def test_organisasjonsnummer( value: str, - expected: Optional[str], - error: Optional[str], + expected: str | None, + error: str | None, ) -> None: if expected: assert OrganisasjonsnummerValidator.validate_python(value) == expected @@ -91,8 +89,8 @@ def test_organisasjonsnummer( ) def test_sektorkode( value: str, - expected: Optional[str], - error: Optional[str], + expected: str | None, + error: str | None, ) -> None: if expected: assert SektorkodeValidator.validate_python(value) == expected