Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/add additional funcs for adressenreg #194

Merged
merged 5 commits into from
Apr 4, 2023
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
6 changes: 3 additions & 3 deletions crabpy/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,12 +200,12 @@ def get_adressen(
def get_perceel(self, perceel_id):
return self._get(f"/v2/percelen/{perceel_id}")

def get_percelen(self, status=None, adresOjbectId=None):
def get_percelen(self, status=None, adresObjectId=None):
params = {}
if status is not None:
params["status"] = status
if adresOjbectId is not None:
params["adresOjbectId"] = adresOjbectId
if adresObjectId is not None:
params["adresOjbectId"] = adresObjectId
return self._get_list(f"/v2/percelen", "percelen", params=params)

def get_gebouw(self, gebouw_id):
Expand Down
106 changes: 97 additions & 9 deletions crabpy/gateway/adressenregister.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
LOG = logging.getLogger(__name__)
AUTO = object()


LONG_CACHE = make_region()
SHORT_CACHE = make_region()

Expand Down Expand Up @@ -258,6 +257,17 @@ def get_postinfo_by_gemeentenaam(self, gemeente_naam):
for postinfo in self.client.get_postinfos(gemeentenaam=gemeente_naam)
]

@LONG_CACHE.cache_on_arguments()
def get_postinfo_by_id(self, postcode):
"""
Retrieve a `postinfo` by crab id.

:param integer gemeente_id: The crab id of the municipality.
:rtype: :class:`Postinfo`
"""
return Postinfo.from_get_response(self.client.get_postinfo(postcode), self)


@LONG_CACHE.cache_on_arguments()
def list_deelgemeenten(self, gewest=2):
"""
Expand Down Expand Up @@ -354,6 +364,77 @@ def list_adressen_by_straat(self, straat):
for adres in self.client.get_adressen(straatnaamObjectId=straat.id)
]

@LONG_CACHE.cache_on_arguments()
def get_adres_by_id(self, adres_id):
"""
Retrieve a `adres` by the Id.

:param integer adres_id: The id of the `adres`.
:rtype: :class:`Adres`
"""
return Adres.from_get_response(self.client.get_adres(adres_id), self)

@SHORT_CACHE.cache_on_arguments()
def list_adressen_with_params(
self,
gemeentenaam=None,
postcode=None,
straatnaam=None,
homoniem_toevoeging=None,
huisnummer=None,
busnummer=None,
niscode=None,
status=None,
straatnaamObjectId=None,
):
"""
List all `adressen` with the given parameters.

:param gemeentenaam: string
:param postcode:integer
:param straatnaam: string
:param homoniem_toevoeging: string
:param huisnummer: string
:param busnummer: string
:param niscode: string
:param status: string
:param straatnaamObjectId: integer
:return: :rtype: Adres
"""
return [
Adres.from_list_response(adres, self)
for adres in self.client.get_adressen(
gemeentenaam=gemeentenaam,
postcode=postcode,
straatnaam=straatnaam,
homoniem_toevoeging=homoniem_toevoeging,
huisnummer=huisnummer,
busnummer=busnummer,
niscode=niscode,
status=status,
straatnaamObjectId=straatnaamObjectId,
)
]

@SHORT_CACHE.cache_on_arguments()
def list_percelen_with_params(self, status=None, adresObjectId=None):
"""
List all `percelen` with the given parameters.

:param status: str
:param adresOjbectId: str
:return: :rtype:
"""

return [
Perceel.from_list_response(perceel, self)
for perceel
in self.client.get_percelen(
status=status,
adresObjectId=adresObjectId
)
]

@SHORT_CACHE.cache_on_arguments()
def list_adressen_by_perceel(self, perceel):
"""
Expand Down Expand Up @@ -488,12 +569,12 @@ def taal(self):
def naam(self, taal="nl"):
for _taal in [taal, self.taal]:
naam = next(
(
gemeentenaam["spelling"]
for gemeentenaam in self._source_json["gemeentenamen"]
if gemeentenaam["taal"] == _taal
), None
)
(
gemeentenaam["spelling"]
for gemeentenaam in self._source_json["gemeentenamen"]
if gemeentenaam["taal"] == _taal
), None
)
if naam:
return naam

Expand Down Expand Up @@ -663,6 +744,8 @@ def __init__(
self.postinfo = postinfo
if busnummer is not AUTO:
self.busnummer = busnummer
if status is not AUTO:
self.status = status

@classmethod
def from_list_response(cls, adres, gateway):
Expand All @@ -679,7 +762,8 @@ def from_list_response(cls, adres, gateway):
def from_get_response(cls, adres, gateway):
res = Adres(
id_=adres["identificator"]["objectId"],
gateway=gateway)
gateway=gateway
)
res._source_json = adres
return res

Expand All @@ -691,6 +775,10 @@ def label(self):
def huisnummer(self):
return self._source_json["huisnummer"]

@LazyProperty
def status(self):
return self._source_json["adresStatus"]

@LazyProperty
def straat(self):
return Straat(
Expand Down Expand Up @@ -899,4 +987,4 @@ def __str__(self):
return f"Postinfo {self.id}"

def __repr__(self):
return f"Postinfo(id={self.id})"
return f"Postinfo(id={self.id})"
51 changes: 51 additions & 0 deletions tests/gateway/test_adressenregister.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,20 @@ def create_client_get_adres_item():
}


def create_client_get_perceel_list_item():
return {
"@type": "Perceel",
"identificator": {
"id": "https://data.vlaanderen.be/id/perceel/13013C0384-02H003",
"naamruimte": "https://data.vlaanderen.be/id/perceel",
"objectId": "13013C0384-02H003",
"versieId": "2004-02-13T05:34:17+01:00"
},
"detail": "https://api.basisregisters.vlaanderen.be/v2/percelen/13013C0384-02H003",
"perceelStatus": "gerealiseerd"
}


def create_client_get_perceel_item():
return {
"identificator": {
Expand Down Expand Up @@ -493,6 +507,31 @@ def test_list_adressen_by_straat(self, gateway, client):
assert res[0].label == "Goorbaan 59, 2230 Herselt"
assert res[0].status == "inGebruik"

def test_list_adressen_by_straat_and_huisnummer(self, gateway, client):
client.get_adressen.return_value = [
create_client_list_adressen_item(),
]
res = gateway.list_adressen_with_params(
straatnaamObjectId=1,
huisnummer="59",
)
assert len(res) == 1
assert res[0].id == "200001"
assert res[0].huisnummer == "59"
assert res[0].label == "Goorbaan 59, 2230 Herselt"
assert res[0].status == "inGebruik"

def test_list_percelen_by_adres(self, gateway, client):
client.get_percelen.return_value = [
create_client_get_perceel_list_item(),
]
res = gateway.list_percelen_with_params(
adresObjectId=200001,
)
assert len(res) == 1
assert res[0].id == "13013C0384-02H003"
assert res[0].status == "gerealiseerd"

def test_list_adressen_by_perceel(self, gateway, client):
client.get_adres.return_value = create_client_get_adres_item()
client.get_perceel.return_value = create_client_get_perceel_item()
Expand All @@ -506,6 +545,11 @@ def test_list_adressen_by_perceel(self, gateway, client):
assert len(res) == 1
assert res[0].id == "763445"

def test_get_adres_by_id(self, gateway, client):
client.get_adres.return_value = create_client_get_adres_item()
res = gateway.get_adres_by_id(763445)
assert res.id == '763445'

def test_get_perceel_by_id(self, gateway, client):
client.get_perceel.return_value = create_client_get_perceel_item()
res = gateway.get_perceel_by_id("1")
Expand Down Expand Up @@ -726,3 +770,10 @@ def test_get_postinfo(self, gateway, client):
postinfo_fr = Postinfo("7850", gateway)
assert postinfo_fr.namen("fr") == ["Enghien"]
assert postinfo_fr.id == "7850"

def test_get_postinfo_by_postcode(self, gateway, client):
client.get_postinfo.return_value = create_client_get_post_info()
postinfo = gateway.get_postinfo_by_id("7850")
assert postinfo.namen("nl") == ["EDINGEN", "Lettelingen", "Mark"]
assert postinfo.id == "7850"
assert postinfo.status == "gerealiseerd"