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