From a40db140b2be4ec170abc4f1961188bc369d9b8f Mon Sep 17 00:00:00 2001 From: osman <ahmed.osman@rwth-aachen.de> Date: Tue, 21 Nov 2023 10:28:21 +0200 Subject: [PATCH] update get price-estimate --- demos/demo2/demo2_dzwald.py | 73 +++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/demos/demo2/demo2_dzwald.py b/demos/demo2/demo2_dzwald.py index ad50d6a..ea712c6 100644 --- a/demos/demo2/demo2_dzwald.py +++ b/demos/demo2/demo2_dzwald.py @@ -12,6 +12,7 @@ import datetime import base64 from urllib.parse import quote import requests +import json import api import broker_api @@ -24,8 +25,24 @@ sys.path.insert(0, os.path.dirname(parentdir)) from model import enums, models, configs, security, utils +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + # print info logs to console -logger = logging.getLogger("broker_api") +logger = logging.getLogger("dzwald") +ch = logging.StreamHandler() +ch.setLevel(logging.INFO) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +ch.setFormatter(formatter) +logger.addHandler(ch) logger.setLevel(logging.INFO) # Thing ID and secret in the S3I-Identityprovider @@ -211,14 +228,14 @@ def create_holzliste(): menge=4.7, stammlaenge=4.3, stammnummer="2", - mittendurchmesser=63.0, + mittendurchmesser=37.0, gueteklasse=enums.Gueteklasse.Qualitaet_A ), models.Einzelstamm( menge=2.7, stammlaenge=2.3, stammnummer="3", - mittendurchmesser=63.0, + mittendurchmesser=37.0, gueteklasse=enums.Gueteklasse.Qualitaet_A, klammerstammabschnittsnummer="1" ), @@ -250,7 +267,7 @@ def create_holzliste(): polterliste=[polter], sortimentstyp=enums.Sortimentstyp.Stammholz, sorte=enums.Sorte.lang, - holzart=enums.Holzart.Fichte, + holzart=enums.Holzart.Kiefer, preismatrix=create_preismatrix()) return holzliste @@ -266,7 +283,7 @@ def create_zu_faellende_baeume(): baum1 = models.StehenderBaum( hoehe=20.3, bhd=30.2, - baumart=enums.Holzart.Fichte, + baumart=enums.Holzart.Kiefer, position=models.Standort(koordinate=koordinate_baum1, notiz="Die Position Fichte") ) @@ -278,7 +295,7 @@ def create_zu_faellende_baeume(): baum2 = models.StehenderBaum( hoehe=17.0, bhd=31.2, - baumart=enums.Holzart.Eiche, + baumart=enums.Holzart.Kiefer, position=models.Standort(koordinate=koordinate_baum2, notiz="Die Position Eiche") ) @@ -289,7 +306,7 @@ def create_zu_faellende_baeume(): baum3 = models.StehenderBaum( hoehe=15.3, bhd=20.2, - baumart=enums.Holzart.Buche, + baumart=enums.Holzart.Kiefer, position=models.Standort(koordinate=koordinate_baum3, notiz="Die Position Buche") ) @@ -308,7 +325,7 @@ def create_zu_faellende_baeume(): def create_holzpreisbereiche(): # TODO: Warum braucht man Holzpreisbereich, wenn es schon Preismatrizen gibt? holzpreisbereich = models.Holzpreisbereich( - baumart=enums.Holzart.Fichte, + baumart=enums.Holzart.Kiefer, preis_von=50.0, preis_bis=80.0, sorte=enums.Sorte.lang, @@ -354,7 +371,7 @@ def create_bestandesdaten(): id=model.Identifier("https://www.company.com/submodels/bestandesdaten"), umring=create_umring(), waldbesitzer=create_example_contact(kontaktrolle=enums.Kontaktrolle.Waldbesitzer), - baumarten=[enums.Holzart.Fichte] + baumarten=[enums.Holzart.Kiefer] ) return bestandesdaten @@ -501,6 +518,7 @@ def getHolzpreisbereich(provider: api.ModelProvider, HolzlisteId: str): # TODO: REST # CALL to Forstify # create a placeholder reply for now + """ reply = { "Baumart": "kie", "PreisVon": 14500.0, @@ -511,28 +529,37 @@ def getHolzpreisbereich(provider: api.ModelProvider, HolzlisteId: str): "Datum": "8/4/2023, 10:56:39 AM", "Quelle": "Forstify Marktplatz Angebote" } + """ + convert_table = { + "d3a": 34.0, + "d3b": 39.0, + "d4": 49.0, + "d5": 59.0, + } + headers = {"Content-Type": "application/json", "X-API-KEY": "1234"} + serializer = json_serialization.AASToJsonEncoder() + reply = requests.get(url="https://forstify-app-research.azurewebsites.net/api/v2/external/priceestimate", + headers=headers, data=json.dumps({"value": serializer.encode(holzliste_sm)})) + logger.info(f"{bcolors.OKCYAN}Received price-estimate: {reply.json()}{bcolors.ENDC}") + reply_json = reply.json() date_format = '%m/%d/%Y, %H:%M:%S %p' holzpreisbereich = models.Holzpreisbereich( - baumart=enums.Holzart(reply["Baumart"]), - preis_von=reply["PreisVon"], - preis_bis=reply["PreisBis"], - sorte=enums.Sorte(reply["Sorte"]), - mittendurchmesser_bis=reply["MittendurchmesserBis"], - mittendurchmesser_von=reply["MittendurchmesserVon"], - datum=datetime.datetime.strptime(reply["Datum"], date_format), - quelle=reply["Quelle"], + baumart=enums.Holzart(reply_json["Baumart"]), + preis_von=float(reply_json["PreisVon"]), + preis_bis=float(reply_json["PreisBis"]), + sorte=enums.Sortimentstyp(reply_json["Sorte"]), + mittendurchmesser_bis=convert_table[reply_json["MittendurchmesserBis"]], + mittendurchmesser_von=convert_table[reply_json["MittendurchmesserVon"]], + datum=datetime.datetime.strptime(reply_json["Datum"], date_format), + quelle=reply_json["Quelle"], holzliste=model.ModelReference.from_referable(holzliste_sm) ) holzpreisbereiche_id = "https://www.company.com/submodels/holzpreisbereiche" holzpreisbereiche: model.SubmodelElementList = provider.getValue( f"/aas/submodels/{helpers.encode_id(holzpreisbereiche_id)}/submodel" ) - #headers = {"Content-Type": "application/json", "X-API-KEY": "1234"} - #serializer = json_serialization.AASToJsonEncoder() - #reply = requests.get(url="https://forstify-app-research.azurewebsites.net/api/v2/external/priceestimate", - # headers=headers, data=serializer.encode(holzliste_sm)) utils.add_items_to_se_list(holzpreisbereiche, [holzpreisbereich]) - return reply + return reply_json @@ -579,7 +606,7 @@ def main(): #print(getHolzpreisbereich(provider, HolzlisteId)) # set last flag to True to enable security - server = broker_api.S3IBServer(access_token, provider, dzwald_id, loop, "https://www.company.com/security", True) + server = broker_api.S3IBServer(access_token, provider, dzwald_id, loop, "https://www.company.com/security", False) # add callable associated with operation 'getHolzpreisbereich' to server callable = lambda **kwargs : getHolzpreisbereich(provider, **kwargs) -- GitLab