From f268466b9ba387d75d149673bb583392189e776d Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Fri, 9 Feb 2024 13:18:57 +0100 Subject: [PATCH] fix: update_map endpoint, now working --- .../__pycache__/data_structs.cpython-311.pyc | Bin 2445 -> 3945 bytes server/data_structs.py | 53 +++++++++++++++--- server/main.py | 7 ++- .../__pycache__/get_markers.cpython-311.pyc | Bin 2652 -> 2626 bytes server/map/get_markers.py | 19 ++++--- 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/server/__pycache__/data_structs.cpython-311.pyc b/server/__pycache__/data_structs.cpython-311.pyc index 133d8fe1d896175c75442992de70415e7e6bd522..4163607b4b1b56fb78c7310f4a0863892bb42ce3 100644 GIT binary patch literal 3945 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 literal 2445 zcmb7FJ!~UI6rT0|+Kw*<^5+nTT<#9B2RcQZ4gms$L?lRYX%Y%7qh)V*oZDpWH8bl# zA{QyHNI@AXAf>np6wy#pUPYZE#cC_0tLPj#)m8W2tiAp_BzVbwZ{EDon|U+ed;YCZ z$PtjL{uh0&67n34z9_vx_d6Jz5|_A=PwJ#XB$6Rt5;yaNxbm+VLVkxYk%}Zd3V75p zPeyn&@aSV6*)_I^nf(Vtm{M%Gc1T07PMuy*p|qaSU4_9Zp`;?Yq>^zZD!Un~xH461 znyWlfDw?Z8I4#z;XoCkV&TOp5N_fzuv1U7=w@;mZVi*#SF2mPd12`pZsZA^xCDP7- zC8d@OR+_3yw#d1(Y03<b#&iS&z*J&|Q@=Jg&2iHekQWcW__+Etr;Jw{VWU-Dr+hCA zn$;!?cHaMJZLJEfeafnE3%12W)^b9AuXzv~mgP0P(6SDvlf>@zC*a)(e-q${M6b^r zD?jPc%mS!vG`9pQe+++JaFb0_$1n}MPAx0WSynx8TRx7bEbIH0?e{#g*9hY*ZM5o? z!CS=2qag5E0V13eb^{cfLco0mU~2qRfTQ%UlabZ(&-Xh7)KgEWKWBvcS4bjb(2<8P z!URh91AvK#m*L?RR{;{J@M-Yr@EKID72Pb5L3MLLhJ2iVNNwI?v`#TKKWOZDVauhl z;oG4YF(g4;Xfo<}O)rGmpb=-o$DXs-pq$6Ky8WZ|1NC+uhw&7*YcxEte7aBl*svX^ z#cb!m$>KSClJaUFCjJkv+6u4?4<n?lf`#{+SQ=P(Ly4t>)vpWEHo!s_3PE-<EN#<Z z3!qpD0mHII1f&aFLMS6F1DIKs$MJt$&M{jgw2*`mNRh*tp{q_giXQ$sz!CYov<j@e z5iP8MD)d$P?y+)dEJi)&;%#tFM@#SEY^k^CxNuw$EZH<QHVwfTl7qbl5UVvmu)`!n z+>Fg449Gf<CIV8IQ-EQzX4RWd?{o;LKOPA6>?@%zzI~MFAQU=UzSWUoRdoNuM6YiM zEu61{<OI0y2&u7Apmg5@m>{+2W<YACX1J>8XwWt*x~l_~jrhhxo9$7yP3uh{FOBsb z8mvRJfVSfu(pYr@AG)5#Y}adXCuIw4lyb5mb{*?=((a(s4R<|hH|=@Au)!F6<AA5w z8wWf^4yQX0xTvvPu=5bZZliez;cWm@O&BN^jk-8S8)w@5=uM<#LvnL$7tj#rmw`xA zQEBC}1Pnvky>+<&tODlsn&j*vSh=BIDc;OUF9YIWkzuOcbpR-4vI{y97^f>?Jh&dR zJGdOOtMu2q(i#3dWj4>%q$WkVjV8-XSZzw;GB`$G5#<%@VPLtQ6CTcuCElCId*gQj zpvV@M&I(bfe6|c}o@_+3rISiDw|KJG$!o=2ha`~A^~%W@D<@GYYz0EGHxNWcVdU|$ zTE#g8>?(X4V7RO_X#RQFOf6$sfqGUF>SFsFp~s=9t8lhSNU8|8*))};#*q)nDa8>+ ztNn%XN%GV78G9Gj;T7^<06MZHNf9YujQ)2tMJjj5BwXR#^}tcgNjE!W60UIWdf-?p QN|47ST;bgHD;y%hmw0OEga7~l diff --git a/server/data_structs.py b/server/data_structs.py index c7f4c05f..26428d4f 100644 --- a/server/data_structs.py +++ b/server/data_structs.py @@ -1,42 +1,79 @@ -from datetime import datetime # Sensor contains data related to a single sensor class Sensor: - def __init__(self, ID: int, type: enumerate, active: bool): + def __init__(self, ID: int, type: str, active: bool): self.ID = ID self.type = type self.active = active + def to_dict(self): + return { + 'ID': self.ID, + 'type': self.type, + 'active': self.active + } + +# DateTime contains the date and time for a measurement +class DateAndTime: + def __init__(self, year: int, month: int, day: int, hour: int, minute: int): + self.year = year + self.month = month + self.day = day + self.hour = hour + self.minute = minute + + def to_dict(self): + return { + 'year': self.year, + 'month': self.month, + 'day': self.day, + 'hour': self.hour, + 'minute': self.minute + } -# Measurement contains geo-data related to a single measurement point at a given time +# Measurement contains geo-data related to a single measurement point at a given time. It includes an instance +# of the class Sensor. class Measurement: - def __init__(self, longitude: float, latitude: float, datetime: datetime, precipitation: float, thickness: float, + def __init__(self, longitude: float, latitude: float, datetime: DateAndTime, sensor: Sensor, precipitation: float, thickness: float, max_weight: float, safety_level: float, accuracy: float): self.longitude = longitude self.latitude = latitude self.datetime = datetime + self.sensor = sensor self.precipitation = precipitation self.thickness = thickness self.max_weight = max_weight self.safety_level = safety_level self.accuracy = accuracy - + + def to_dict(self): + return { + 'longitude': self.longitude, + 'latitude': self.latitude, + 'datetime': self.datetime.to_dict(), + 'sensor': self.sensor.to_dict(), + 'precipitation': self.precipitation, + 'thickness': self.thickness, + 'max_weight': self.max_weight, + 'safety_level': self.safety_level, + 'accuracy': self.accuracy + } + # MarkerTemplate is a template for map marker data. It includes an instance of the # DataPoint type. class MarkerTemplate: - def __init__(self, geoData: Measurement, size: float, color: enumerate, radius: float): + def __init__(self, geoData: Measurement, size: float, color: str): self.geoData = geoData self.longitude = geoData.longitude self.latitude = geoData.latitude self.size = size self.color = color - self.radius = radius def to_dict(self): return { + 'geo_data': self.geoData.to_dict(), 'latitude': self.latitude, 'longitude': self.longitude, 'size': self.size, 'color': self.color, - 'radius': self.radius } \ No newline at end of file diff --git a/server/main.py b/server/main.py index 1fc670f9..ace59dd7 100644 --- a/server/main.py +++ b/server/main.py @@ -35,7 +35,9 @@ class IceHTTP(BaseHTTPRequestHandler): self.end_headers() self.wfile.write(b"Root path hit!") - elif self.path == '/update_map': + + # Update_map endpoint + elif self.path == '/update_map': # NB: should be POST? # Fetch marker data markers_data, resp_code = get_markers() @@ -45,7 +47,7 @@ class IceHTTP(BaseHTTPRequestHandler): self.end_headers() # Write the JSON data to response object - self.wfile.write(markers_data) + self.wfile.write(str(markers_data).encode('utf-8')) # Listen for pressing of q key to terminate server def on_key_press(server, event): @@ -73,6 +75,7 @@ if __name__ == "__main__": # Register key press event handler keyboard.on_press(lambda event: on_key_press(server, event)) + # Run server indefinitely server.serve_forever() except Exception as e: diff --git a/server/map/__pycache__/get_markers.cpython-311.pyc b/server/map/__pycache__/get_markers.cpython-311.pyc index 43698edae3b8e474e9db41d43ba5065054d66146..fe067d8d451136985eb529449e19ff358e97b22b 100644 GIT binary patch delta 1277 zcmb7EO-vI(6rSn+bhkf1%hFP+6bi&NBoJ(g9*Dt6Of&`+G{Rm?%Ph5}3%V_-Aq&*V zfrA$^F&@QBZA23iFWxl9crFRira^Bea<U|xG#Y0XT4|eTd^7Xr&71H2%$wQWk={!7 zr*^vq5c=hQuRK_@d%7DS0FM9y2qu7hFhdzCAa0^CO6$zpUUMf<*ero=ka0jVR|Vn; zhyzr$mhts-$dn}xHY!ePYy|}#2_O>N%RmvTL6By{BrK{`wyHMSrrKq@+8~pJiJna~ zs!ehek+~HhI}jWP0e+WeHo9Qy>kF`0hCQ~TbtIfp&d#E1F%>UC7qsGs@YXW2AS<$E zIg%h52efEPF=ZJ5WJi!-M8wsgm^zdNHK4{C6q~B}CBB-FLpSLFIS<=%^K&UHlHg<< z2Ir~_T98X;bXYNP*Wvjpd@J(k?2!O%b$D~iT#f~ROXrYR=i+QxwLqQ(I))vLw}nT? zb-re&o$hdE<kQU<GVL8vW>H94%f<l2`Lc{USAZ_y$BYm9@oUE2BkCgRnl??DCds8O zic8}7;hctPaF>|`X&C6nKbU?z#CkeoUrCm`PU3BsKGNvU$9u{1`#r<ab1!0_@5rOW z_&OV~6a_>sH5F48e4m}b-&pTU59ffe3-|IvE%Z<tO-Q5HsnL7T+Of`iLzbdBsmvzl zw1Kj4vM82a4g3+0XoL6}e>zBW>8Ox)f-H;HsFJ#=hP4?*OKPWxhSnqbgnS(tP%^b) zr@41o@~yM$k(@sl+4OHogWJ;Js`$xJhI7u`*rsDk3T{imYNc~a3T;cFRq>14pS$rY zoxdvQr{aZy&>JRyWjr5I^0$*E2DZ+_JwW-s!B=hd@QeS6{|g-Zg%9|rFcC3oYLwV0 zEUj~qn@)t2Ga7whMkTZ^Dg`K`rTQ)msdH#Pp`6i1$ddj)lADB)LqJ#nV#a6%V96K_ bzY{NwUC4uf^a60@t9wcCLRSgYGb5GXr0pr4 delta 1417 zcmbtUO>7fK6n-=NV>|XbNt4(KZb%@c;6@EU2ZThRX)I6=X(TI$B&$LRp0#6V*G^^^ z1&|Yi!~ykC744xMsf0`<+5<vWb0|{PL&b3-r7E&e50xr#Pp*_oh!ZpGIKcr<JkNZy ze*501@4YwnZ=Fv&wR@V@0^EAF-;JZUw4Ngo1n?aYAjky0ej*+5@7Tl^)-eJDa*{|9 zc1OPTeaAj9lrm4d&v)H)wJFHQgIb&O{M;1;LnTrf^GxjCks@t+z(B8YxA2%LFapio zNQjcnpcT?XmZob~SPy$X#cZ|O^fvyi-T=Lwph<}PszT62998^e)-jx{Wn9I>!*R(y ziv}ayE$8e)KD8y=J3{U^Xs+ZaJ3i7vf+R#V5++Jn<!bq^TM<a>)~D@<_Hux~<GXHY zw2YnYMgfoyNJkTECqbl(L`alGcd;T;YS4DSg;r{!?IC-1(JCay1%F6-chT;M-TM|+ z+3_``1E@tz`ij`qrM+&qq;*MTUs1}*jex8C&XE0Xixf-9WS}VTdUK%6>%PBTdq!GT zoM0mtAh+E=GI#@uihEn?JM~c-Pr?8=;hnexK*P&wQ6&e{IE82U+?UlAb#m)mLQ8O2 znt>%0Kjdyohlesx|GaLW-5eavB!0~PwWv>wW}oqrsv*u;?Gw-{V2FczPL3;72z0-d zr%z{}i#Sn!H7ejFhYa7`UVNJA`FlG0^8-%%toPpY&(BYcRz)J^*A}WB93DzaJ3{?# zmpYOVw}y%~dE`_SN@D^9c|{?YtOdIgICD8=EI8RhKJKgdY$I<M=+VZ*G506+#1RqR zUpE>Tslklld}Ynjd4t;YIQNLE>__|;cMWPd;`aN7O40qRQ)^3qBxjg@o?W=eNSe*% zn3-n_i|a|ck)%%sK3*Gm+`(qPWb=7;rC5_t_X_$C1a5j*<5)sBL;o~$&9W3>={c4& zS$<(Xxww&Be3Ps69%KiH*HVus*|`g>Kx+Ui=rb(DjbR~f3=45%ScpsDo1y>xpv7*F ztah%N8^ek9c;eTo_0Sg^?kE07TSNWVKb`QV;LSr!p`xVCS$p1_gV#Sg$h}lt2Cu;{ z{UcU^Tr!Q*G{Jr1pUnQn{W=h9hhEma+`EDC@eu~^Tu&gvnpe#qMUfi337&vgxnWFE diff --git a/server/map/get_markers.py b/server/map/get_markers.py index fa7524e3..fe91e6ce 100644 --- a/server/map/get_markers.py +++ b/server/map/get_markers.py @@ -1,10 +1,9 @@ import os import sys -from datetime import datetime current_dir = os.path.dirname(__file__) parent_dir = os.path.abspath(os.path.join(current_dir, '..')) sys.path.append(parent_dir) -from data_structs import Measurement, Sensor, MarkerTemplate +from data_structs import Measurement, Sensor, MarkerTemplate, DateAndTime from flask import json # get_markers parses a list of MarkerTemplate objects to json, and returns either a successfully @@ -15,12 +14,16 @@ def get_markers(): sensor1 = Sensor(ID=1, type="Type1", active=True) sensor2 = Sensor(ID=2, type="Type2", active=False) - measurement1 = Measurement(longitude=10.9771, latitude=60.7066, datetime=datetime(2023, 12, 31, 15, 43, 2), - sensor=sensor1, precipitation=0.0, thickness=0.0, max_weight=0.0, safety_level=0.0, accuracy=2.5), - measurement2 = Measurement(longitude=10.8171, latitude=60.6366, datetime=datetime(2024, 1, 7, 23, 59, 59), - sensor=sensor2, precipitation=0.0, thickness=0.0, max_weight=0.0, safety_level=0.0, accuracy=1.5), - measurement3 = Measurement(longitude=10.8471, latitude=60.7366, datetime=datetime(2024, 2, 3, 12, 00, 19), - sensor=sensor1, precipitation=0.0, thickness=0.0, max_weight=0.0, safety_level=0.0, accuracy=4.0), + datetime1 = DateAndTime(2023, 12, 31, 15, 43) + datetime2 = DateAndTime(2024, 1, 15, 12, 2) + datetime3 = DateAndTime(2024, 1, 31, 18, 10) + + measurement1 = Measurement(longitude=10.9771, latitude=60.7066, datetime=datetime1, sensor=sensor1, + precipitation=0.0, thickness=0.0, max_weight=0.0, safety_level=0.0, accuracy=2.5) + measurement2 = Measurement(longitude=10.8171, latitude=60.6366, datetime=datetime2, sensor=sensor2, + precipitation=0.0, thickness=0.0, max_weight=0.0, safety_level=0.0, accuracy=1.5) + measurement3 = Measurement(longitude=10.8471, latitude=60.7366, datetime=datetime3, sensor=sensor1, + precipitation=0.0, thickness=0.0, max_weight=0.0, safety_level=0.0, accuracy=4.0) testData = [ MarkerTemplate(measurement1, 30.0-measurement1.accuracy, "Green"), -- GitLab