Source code for ngsildclient.model.helper.postal
#!/usr/bin/env python3
# Software Name: ngsildclient
# SPDX-FileCopyrightText: Copyright (c) 2021 Orange
# SPDX-License-Identifier: Apache 2.0
#
# This software is distributed under the Apache 2.0;
# see the NOTICE file for more details.
#
# Author: Fabien BATTELLO <fabien.battello@orange.com> et al.
from __future__ import annotations
from dataclasses import dataclass
[docs]@dataclass
class PostalAddress:
"""A PostalAddress as defined here : https://schema.org/PostalAddress.
"""
country: str = None
locality: str = None
region: str = None
pobox: str = None
postalcode: str = None
streetaddress: str = None
def to_dict(self):
d = {}
if self.streetaddress and self.pobox:
raise ValueError("Provide either a Street Address or a PO Box but not both")
if self.streetaddress:
d["streetAddress"] = self.streetaddress
if self.pobox:
d["postOfficeBoxNumber"] = self.pobox
if self.locality:
d["addressLocality"] = self.locality
if self.postalcode:
d["postalCode"] = self.postalcode
if self.region:
d["addressRegion"] = self.region
if self.country:
d["addressCountry"] = self.country
if not d:
raise ValueError("PostalAddress is empty")
return d
[docs]class PostalAddressBuilder:
"""A helper class that allows to easily build a PostalAddress property.
Example
-------
>>> from ngsildclient import *
>>> builder = PostalAddressBuilder()
>>> address = builder.street("C/ La Pereda 14")
.locality("Santander")
.region("Cantabria")
.country("Spain")
.build()
>>> # Add an address property to the entity you're creating
>>> busstop = Entity("PublicTransportStop", "santander:busStop:463")
>>> busstop.prop("adress", address)
>>> busstop.pprint()
{
"@context": [
"https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
],
"id": "urn:ngsi-ld:PublicTransportStop:santander:busStop:463",
"type": "PublicTransportStop",
"adress": {
"type": "Property",
"value": {
"streetAddress": "C/ La Pereda 14",
"addressLocality": "Santander",
"addressRegion": "Cantabria",
"addressCountry": "Spain"
}
}
}
"""
def __init__(self):
self._addr: PostalAddress = PostalAddress()
def country(self, value: str) -> PostalAddressBuilder:
self._addr.country = value
return self
def locality(self, value: str) -> PostalAddressBuilder:
self._addr.locality = value
return self
def region(self, value: str) -> PostalAddressBuilder:
self._addr.region = value
return self
def pobox(self, value: str) -> PostalAddressBuilder:
self._addr.pobox = value
return self
def postalcode(self, value: str) -> PostalAddressBuilder:
self._addr.postalcode = value
return self
def street(self, value: str) -> PostalAddressBuilder:
self._addr.streetaddress = value
return self
def build(self) -> dict:
return self._addr.to_dict()