Skip to content

Commit

Permalink
Merge pull request #10 from jodal/api-v2
Browse files Browse the repository at this point in the history
Use Brreg's API v2
  • Loading branch information
jodal authored Nov 16, 2023
2 parents 3d5b1b1 + 5cb0bbe commit fde80f7
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 72 deletions.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ classifiers = [
python = ">= 3.8.0"
httpx = ">= 0.24"
pydantic = ">= 2"
typing-extensions = ">= 4.4.0"

[tool.poetry.group.dev.dependencies]
nox = "^2023.4.22"
Expand Down
7 changes: 6 additions & 1 deletion src/brreg/enhetsregisteret/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ def get_enhet(self, organisasjonsnummer: str) -> Optional[Enhet]:
"""
res: Optional[httpx.Response] = None
try:
res = self._client.get(f"/enheter/{organisasjonsnummer}")
res = self._client.get(
f"/enheter/{organisasjonsnummer}",
headers={
"accept": "application/vnd.brreg.enhetsregisteret.enhet.v2+json"
},
)
if res.status_code in (404, 410):
return None
res.raise_for_status()
Expand Down
43 changes: 33 additions & 10 deletions src/brreg/enhetsregisteret/_types.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import datetime as dt
from typing import List, Optional

from pydantic import BaseModel, ConfigDict, Field
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field
from pydantic.alias_generators import to_camel
from typing_extensions import Annotated

__all__ = [
"Adresse",
Expand All @@ -13,6 +14,13 @@
]


# Same as `Optional[dt.date]`, except that this version deserializes empty
# strings to `None`.
DateOrNone = Annotated[
Optional[dt.date], BeforeValidator(lambda v: v if v != "" else None)
]


class InstitusjonellSektorkode(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)

Expand Down Expand Up @@ -64,9 +72,6 @@ class Naeringskode(BaseModel):
#: Tekstlig beskrivelse av næringskoden
beskrivelse: Optional[str] = None

#: Beskriver om dette er en hjelpeenhetskode
hjelpeenhetskode: Optional[bool] = None


class Organisasjonsform(BaseModel):
"""Organisasjonsform er virksomhetens formelle organisering.
Expand All @@ -84,7 +89,7 @@ class Organisasjonsform(BaseModel):
beskrivelse: str

#: Dato når organisasjonsformen evt. ble ugyldig
utgaatt: Optional[dt.date] = None
utgaatt: DateOrNone = None


class Enhet(BaseModel):
Expand All @@ -94,7 +99,7 @@ class Enhet(BaseModel):
er registrert i Enhetsregisteret. Identifiseres med organisasjonsnummer.
"""

model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
model_config = ConfigDict(alias_generator=to_camel)

#: Organisasjonsnummer
organisasjonsnummer: str
Expand All @@ -112,7 +117,7 @@ class Enhet(BaseModel):
postadresse: Optional[Adresse] = None

#: Registreringsdato i Enhetsregisteret
registreringsdato_enhetsregisteret: Optional[dt.date] = None
registreringsdato_enhetsregisteret: DateOrNone = None

#: Hvorvidt enheten er registrert i MVA-registeret
registrert_i_mvaregisteret: Optional[bool] = None
Expand All @@ -130,17 +135,23 @@ class Enhet(BaseModel):
#: Næringskode 3
naeringskode3: Optional[Naeringskode] = None

#: Hjelpeenhetskode
hjelpeenhetskode: Optional[Naeringskode] = None

#: Antall ansatte
antall_ansatte: Optional[int] = None

#: Angir om enheten har registrert ansatte
har_registrert_antall_ansatte: Optional[bool] = None

#: Organisasjonsnummeret til overordnet enhet i offentlig sektor
overordnet_enhet: Optional[str] = None

#: Forretningsadresse
forretningsadresse: Optional[Adresse] = None

#: Stiftelsesdato
stiftelsesdato: Optional[dt.date] = None
stiftelsesdato: DateOrNone = None

#: Sektorkode
institusjonell_sektorkode: Optional[InstitusjonellSektorkode] = None
Expand All @@ -160,6 +171,9 @@ class Enhet(BaseModel):
#: Hvorvidt enheten er konkurs
konkurs: Optional[bool] = None

#: Kjennelsesdato for konkursen
konkursdato: DateOrNone = None

#: Hvorvidt enheten er under avvikling
under_avvikling: Optional[bool] = None

Expand All @@ -169,8 +183,17 @@ class Enhet(BaseModel):
#: Målform
maalform: Optional[str] = None

#: Enhetens vedtektsdato
vedtektsdato: DateOrNone = None

#: Enhetens formål
vedtektsfestet_formaal: List[str] = Field(default_factory=list)

#: Enhetens aktivitet
aktivitet: List[str] = Field(default_factory=list)

#: Nedleggelsesdato for underenheten
nedleggelsesdato: Optional[dt.date] = None
nedleggelsesdato: DateOrNone = None

#: Dato under-/enheten ble slettet
slettedato: Optional[dt.date] = None
slettedato: DateOrNone = None
28 changes: 14 additions & 14 deletions tests/data/deleted-organization-details-response.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
{
"organisasjonsnummer" : "815597222",
"navn" : "SLETTET ENHET AS",
"organisasjonsform" : {
"kode" : "UTBG",
"beskrivelse" : "Frivillig registrert utleiebygg",
"utgaatt" : "2017-07-17",
"_links" : {
"self" : {
"href" : "https://data.brreg.no/enhetsregisteret/api/organisasjonsformer/UTBG"
"organisasjonsnummer": "123456789",
"navn": "SLETTET ENHET AS",
"organisasjonsform": {
"kode": "UTBG",
"beskrivelse": "Frivillig registrert utleiebygg",
"utgaatt": "2017-07-17",
"_links": {
"self": {
"href": "http://localhost/enhetsregisteret/api/organisasjonsformer/UTBG"
}
}
},
"slettedato" : "2017-10-20",
"_links" : {
"self" : {
"href" : "https://data.brreg.no/enhetsregisteret/api/enheter/815597222"
"slettedato": "2017-10-20",
"_links": {
"self": {
"href": "http://localhost/enhetsregisteret/api/enheter/123456789"
}
}
}
}
87 changes: 46 additions & 41 deletions tests/data/organization-details-response.json
Original file line number Diff line number Diff line change
@@ -1,51 +1,56 @@
{
"organisasjonsnummer" : "818511752",
"navn" : "SESAM STASJON",
"organisasjonsform" : {
"kode" : "AS",
"beskrivelse" : "Aksjeselskap",
"_links" : {
"self" : {
"href" : "https://data.brreg.no/enhetsregisteret/api/organisasjonsformer/AS"
"organisasjonsnummer": "112233445",
"navn": "SESAM STASJON",
"organisasjonsform": {
"kode": "AS",
"beskrivelse": "Aksjeselskap",
"_links": {
"self": {
"href": "http://localhost/enhetsregisteret/api/organisasjonsformer/AS"
}
}
},
"postadresse" : {
"land" : "Norge",
"landkode" : "NO",
"postnummer" : "0122",
"poststed" : "OSLO",
"adresse" : [ "c/o reder K. Rusing", "Postboks 1752 Vika", "" ],
"kommune" : "OSLO",
"kommunenummer" : "0301"
"postadresse": {
"land": "Norge",
"landkode": "NO",
"postnummer": "0122",
"poststed": "OSLO",
"adresse": ["c/o reder K. Rusing", "Postboks 1752 Vika", ""],
"kommune": "OSLO",
"kommunenummer": "0301"
},
"registreringsdatoEnhetsregisteret" : "2017-10-20",
"registrertIMvaregisteret" : true,
"naeringskode1" : {
"beskrivelse" : "Skipsmegling",
"kode" : "52.292"
"registreringsdatoEnhetsregisteret": "2017-10-20",
"registrertIMvaregisteret": true,
"naeringskode1": {
"kode": "52.292",
"beskrivelse": "Skipsmegling"
},
"antallAnsatte" : 50,
"forretningsadresse" : {
"land" : "Norge",
"landkode" : "NO",
"postnummer" : "0101",
"poststed" : "OSLO",
"adresse" : [ "Tyvholmen 1", null, null, "" ],
"kommune" : "OSLO",
"kommunenummer" : "0301"
"antallAnsatte": 50,
"harRegistrertAntallAnsatte": true,
"forretningsadresse": {
"land": "Norge",
"landkode": "NO",
"postnummer": "0101",
"poststed": "OSLO",
"adresse": ["Tyvholmen 1", null, null, ""],
"kommune": "OSLO",
"kommunenummer": "0301"
},
"stiftelsesdato" : "2017-10-20",
"registrertIForetaksregisteret" : true,
"registrertIStiftelsesregisteret" : false,
"registrertIFrivillighetsregisteret" : false,
"konkurs" : false,
"underAvvikling" : false,
"underTvangsavviklingEllerTvangsopplosning" : false,
"maalform" : "Bokmål",
"_links" : {
"self" : {
"href" : "https://data.brreg.no/enhetsregisteret/api/enheter/818511752"
"stiftelsesdato": "2017-10-20",
"registrertIForetaksregisteret": true,
"registrertIStiftelsesregisteret": false,
"registrertIFrivillighetsregisteret": false,
"konkurs": false,
"konkursdato": "",
"underAvvikling": false,
"underTvangsavviklingEllerTvangsopplosning": false,
"maalform": "Bokmål",
"vedtektsdato": "2017-10-21",
"vedtektsfestetFormaal": [""],
"aktivitet": [],
"_links": {
"self": {
"href": "http://localhost/enhetsregisteret/api/enheter/112233445"
}
}
}
13 changes: 7 additions & 6 deletions tests/test_enhetsregisteret.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@ def test_get_enhet(
) -> None:
httpx_mock.add_response( # pyright: ignore[reportUnknownMemberType]
method="GET",
url="https://data.brreg.no/enhetsregisteret/api/enheter/818511752",
url="https://data.brreg.no/enhetsregisteret/api/enheter/112233445",
status_code=200,
headers={"content-type": "application/json"},
content=organization_details_response,
)

org = enhetsregisteret.Client().get_enhet("818511752")
org = enhetsregisteret.Client().get_enhet("112233445")

assert org is not None
assert org.organisasjonsnummer == "818511752"
assert org.organisasjonsnummer == "112233445"
assert org.navn == "SESAM STASJON"
assert org.hjemmeside is None
assert org.registreringsdato_enhetsregisteret == date(2017, 10, 20)
Expand All @@ -31,6 +31,7 @@ def test_get_enhet(
kode="52.292", beskrivelse="Skipsmegling"
)
assert org.antall_ansatte == 50
assert org.har_registrert_antall_ansatte is True
assert org.forretningsadresse == enhetsregisteret.Adresse(
land="Norge",
landkode="NO",
Expand Down Expand Up @@ -59,16 +60,16 @@ def test_get_enhet_when_deleted(
) -> None:
httpx_mock.add_response( # pyright: ignore[reportUnknownMemberType]
method="GET",
url="https://data.brreg.no/enhetsregisteret/api/enheter/815597222",
url="https://data.brreg.no/enhetsregisteret/api/enheter/123456789",
status_code=200,
headers={"content-type": "application/json"},
content=deleted_organization_details_response,
)

org = enhetsregisteret.Client().get_enhet("815597222")
org = enhetsregisteret.Client().get_enhet("123456789")

assert org is not None
assert org.organisasjonsnummer == "815597222"
assert org.organisasjonsnummer == "123456789"
assert org.navn == "SLETTET ENHET AS"
assert org.organisasjonsform == enhetsregisteret.Organisasjonsform(
kode="UTBG",
Expand Down

0 comments on commit fde80f7

Please sign in to comment.