From 2b068946a092ecad6c6cc21d7c1fb07059d78e1e Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Thu, 11 Apr 2024 10:41:21 +0200 Subject: [PATCH] add: error handling for get_divided_map --- app/lib/pages/default_page.dart | 20 +++++++------- app/lib/pages/loading_page.dart | 2 +- app/lib/server_requests/init_state.dart | 6 ++-- app/lib/widgets/main_layout.dart | 2 -- server/main.py | 2 +- .../__pycache__/add_lake.cpython-311.pyc | Bin 8891 -> 8891 bytes .../__pycache__/get_lake.cpython-311.pyc | Bin 1132 -> 0 bytes .../__pycache__/get_lake_data.cpython-311.pyc | Bin 0 -> 1589 bytes .../get_lake_relation.cpython-311.pyc | Bin 0 -> 1759 bytes .../get_measurements.cpython-311.pyc | Bin 4839 -> 4970 bytes server/map_handler/get_lake.py | 15 ---------- server/map_handler/get_lake_relation.py | 26 ++++++++++++++++++ server/map_handler/get_measurements.py | 10 +++++-- .../lake_relations/all_lake_names.json | 7 ----- 14 files changed, 49 insertions(+), 41 deletions(-) delete mode 100644 server/map_handler/__pycache__/get_lake.cpython-311.pyc create mode 100644 server/map_handler/__pycache__/get_lake_data.cpython-311.pyc create mode 100644 server/map_handler/__pycache__/get_lake_relation.cpython-311.pyc delete mode 100644 server/map_handler/get_lake.py create mode 100644 server/map_handler/get_lake_relation.py diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart index ca25bf5f..fe40b009 100644 --- a/app/lib/pages/default_page.dart +++ b/app/lib/pages/default_page.dart @@ -1,15 +1,12 @@ import 'dart:async'; -import 'package:app/server_requests/fetch_relation.dart'; -import 'package:app/server_requests/init_state.dart'; +import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:app/server_requests/init_state.dart'; import 'package:liquid_pull_to_refresh/liquid_pull_to_refresh.dart'; import '../consts.dart'; -import '../data_classes.dart'; import '../widgets/main_layout.dart'; import '../utils/custom_search_delegate.dart'; -import '../server_requests/fetch_relation.dart'; -import '../server_requests/fetch_markers.dart'; class DefaultPage extends StatefulWidget { const DefaultPage({Key? key}) : super(key: key); @@ -31,7 +28,7 @@ class _DefaultPageState extends State<DefaultPage> { } Future<void> _handleRefresh() async { - return await initialiseState(); + return await initialiseState(false); } @override @@ -64,10 +61,13 @@ class _DefaultPageState extends State<DefaultPage> { showSearch( // Fetch new relation and measurements on search context: context, delegate: CustomSearchDelegate((String result) { - setState(() { - selectedLake = result; - }); - initialiseState(); + // Make request only if the selected lake is different from the current selected lake + if (result != selectedLake) { + setState(() { + selectedLake = result; + }); + initialiseState(false); + } }), ); }, diff --git a/app/lib/pages/loading_page.dart b/app/lib/pages/loading_page.dart index c58553cd..f9d12dc1 100644 --- a/app/lib/pages/loading_page.dart +++ b/app/lib/pages/loading_page.dart @@ -25,7 +25,7 @@ class _LoadingPageState extends State<LoadingPage> } Future<void> _navigateToDefaultPage() async { - await initialiseState(); + await initialiseState(true); // Navigate to the default page once state is initialised Navigator.of(context).pushReplacement(MaterialPageRoute( diff --git a/app/lib/server_requests/init_state.dart b/app/lib/server_requests/init_state.dart index 5e11cc66..77eccc9d 100644 --- a/app/lib/server_requests/init_state.dart +++ b/app/lib/server_requests/init_state.dart @@ -13,7 +13,7 @@ import '../server_requests/fetch_relation.dart'; /// initialiseState makes three requests to the server, one requesting /// measurements for the selected relation, the other requesting the relation, /// and the last requesting the list of all system lakes -Future<void> initialiseState() async { +Future<void> initialiseState(bool fetchSearchOptions) async { bool serverConnection = true; late Future<List<Measurement>> markerListFuture; @@ -46,7 +46,9 @@ Future<void> initialiseState() async { relationFuture = loadSavedRelation(); } - initSearchOptions(); + if (fetchSearchOptions) { + initSearchOptions(); + } //selectedRelation = await relationFuture; selectedRelation = await relationFuture; // NB update once fixed diff --git a/app/lib/widgets/main_layout.dart b/app/lib/widgets/main_layout.dart index 570a8c53..25e6f0bf 100644 --- a/app/lib/widgets/main_layout.dart +++ b/app/lib/widgets/main_layout.dart @@ -1,6 +1,4 @@ import 'dart:typed_data'; -import 'package:flutter_map/flutter_map.dart'; -import 'package:fuzzy/fuzzy.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/server/main.py b/server/main.py index d0570e78..566e64f3 100644 --- a/server/main.py +++ b/server/main.py @@ -8,7 +8,7 @@ from http.server import HTTPServer, BaseHTTPRequestHandler from map_handler.add_lake import cut_map from server.consts import LAKE_RELATIONS_PATH -from map_handler.get_lake import get_divided_map +from map_handler.get_lake_relation import get_divided_map from map_handler.get_measurements import get_all_markers from map_handler.input_new_data import input_new_Lidar_data diff --git a/server/map_handler/__pycache__/add_lake.cpython-311.pyc b/server/map_handler/__pycache__/add_lake.cpython-311.pyc index 3337d8de7c10d6e98b86ea0835797f3599d8cd47..0d77e9519bd32398199d7cec00dd815e8bd81763 100644 GIT binary patch delta 19 Zcmdn(y4#g&IWI340}yae-N?032>>>Q1q1*9 delta 19 Zcmdn(y4#g&IWI340}wdZY~<Rg1OPW!1tS0e diff --git a/server/map_handler/__pycache__/get_lake.cpython-311.pyc b/server/map_handler/__pycache__/get_lake.cpython-311.pyc deleted file mode 100644 index 136f83f681989d911f21f4c715020cd44e8a2066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 zcmZuxO-vI(6rSl$|ELrrw3zgwF&>I3qKUC8np7kaC1|7`fX2<HGljx-ceAsAEhX{5 zL5+#T3)h}7hKom!;>lx|ltA`sJaDU`3E||M#kMr?X6NnuzW3hzyqDdNot+&BWZNIf z{l*CW5TGHR|Hl4#FxC)76sxF!Cox9Uvw|i)R2oNdvM0jg*y$ckJsy^y4UeYMBTvT0 z<)^9i!)#*>5#xg?!Q5A2r!`bY6#yrN;&t$Ez&sKxBAckeiZ_K5tiui)&0XBsCORIw z4q&56U}X8509k>SUB)E<l(^d4zWNQc>?wOH-d1$WYF~d@f@;BN&&Nm$T|(CoCySn! z(ga$BN=_gQql{)nbzG?&J6VH6s4P{EowCJKUwgIM5p)VckNjhM-yx-RW=Pj8rdbKA zXt2^*#W2)-R<ZKBc6FBPS}7>g{6fDl9c-4o^HwgAj0c@g&NM2Uj2pVfnG<s13{xmG zose)H+1w$z!8B9!*dZqP9q(c;uQGU<d5bwdre$@?;>01GsW~SooU*1Am_yt+LKREl z1oAI{9Nrzeoq5ig$upXz&1W7kK4<Ah#xV8i>$e65GT>TZW~QJR@{FQU73^td$*MBP z`i-K~B>-F~PZ^aV$n1fIMf3PiP_NJ~3G9&Q7KyHMo5X4)RwXf)>)9ebt1qgTZ`veT zBgraBHfftgYb07F(Z4>_5#A18tc=*<#OIJ5zVl_=4yJ0sR2^Y&>}z_rtNVTNZSl?0 zyQSBpE&=B{T=h$Y{1K|fon{>z9Gphi1IQa(d9*{^gQnM}K1@}5?MS>9iQA;FM*6Ca zho6I+ZpI?1L1}Z4+(-Uz5(YgMmqb%V_4>2WQ;WMza|`qd?L!VSyFncW1`9f!SJ^#N f`~$>C$Ok~dbuivViE8^(4|L!wb#zjhy^!<|$jJRg diff --git a/server/map_handler/__pycache__/get_lake_data.cpython-311.pyc b/server/map_handler/__pycache__/get_lake_data.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1b4d24d13d09a2c4b32ab6de3f73969fb265183 GIT binary patch literal 1589 zcmZ`(O>7%Q6rT0YuDx+KB&vTvp$M7=$r5%#D@4MtOsPcL5-O4&5?NS_cal2UKh3NY zV%bs-J#g$HQd?9Bp8_ZxIC7*nj^1cdt(B0FP!GKsrIn(dc(aLrwv?IGoA15(-kUcw zZ}taO9YN4$?`77`iU|G9m0pXTf}^(p+(A0h1p}?}F=hy6Y&9luEE=MTS219G3$04J zu!M5bWA3_`6M{3>idQd}zr1{{xV-Si;!^o~arrYazqC%=vSt`%Q=^-NvI?x-Z!#dR zAIXrx9pnoA8PpIOv3;-}^m0Q@(H-)2@ensw2Spb``JC4~sEHf6HRL()+Xr~iSDO;- z5qfl00a?i@^fqF6JNAvZg0=+#tsnuqtMpybhSb9iX&-iR(BH}bu*4`!7w^ZKa)isz zCTtBk%5BCQs1@(c4v#vHG6e+8#4w|WbxD_>-zRW~cGP1c6g?##b0e%I&S)hEya8&& zTcZPQfb@7Yzo^D*3@R$ISXat=b*r$!Y%36GE*2yxF*LUdYSJVct5ISS%YFPiM6Qos zvMm?1yu0I&`ncveMzs=>XLx|RRCCwzb2*jrdI_-Y5R39+2rwm@9^h~l$*?t@1(IGf z9TupJSbCWf=GYb^K{8Zt0-Mkv$)`>*@VD2h27!TAT@uK|s@OWoB?8Qdu@=ac8f7*O z6hqr2WlJ+jFg}!iS=U@Gz+nWnx4{#mTCvTqs}|8uRE6glLdGxi_0#t3lS}WFZZLRL zCCjyHrB4albZw{PP<#Et{OoKArnU$znVM6+sad)Km_Noa9lm(M*$GCug)_K;z6RlW zWw9Bk-(B=5`(|tF#~m*_?`P-RIQ2+T{}_9twcw5Ae@S{{@Bg~wDMeo?c99^R|82SR z@~ht~-zoQ!_mkhMT@h^IL@55@lqXyaY%fB`$Hy-+KTV+YD|=V&Hoa8dPv!s2PVUv) z=Pr2Ji+=WER}#~57lGLQ{OJgqNbil@{m>iF`Qy3Wg}-p(A<i7)%x&i3Ngq$P@nnbF zQinKo`>Xc!yB?nN@mw3v_01m6_&C$XnXZf^<<^x`^2)>X^kI6sweF=0e!Ae{86VHI zdmo#CgZnvMRK*7>E>6TBqy&&TnewN=Yl>e+p#ml4vXcs&I<*a5P$9gIL5;JpY{Pr` z2^~QoM9+eFmiWN5^_oFGqEn#qpAEYT0uEgeIw-jt_72LoqhAMo+>U<T#2I0>i~cL< HIf(Z!Q)P5} literal 0 HcmV?d00001 diff --git a/server/map_handler/__pycache__/get_lake_relation.cpython-311.pyc b/server/map_handler/__pycache__/get_lake_relation.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15407de3dee5ad887f2b1a901bf523fecd0dc368 GIT binary patch literal 1759 zcmcgs&u<e)6n?WmoLL;JjpLGFBT|X>;Db$QRnasNkqM4kKmie|D#((x@=U<s?5<`v z7_0;##G!{?KuAGI2%kc$To8XiRjML!w2>>Kl{i&BaB~$77N@>h$4*Sr9xBw?-8b)j z@6CJP%sl&1B(ewOs1D7aRRR78j7_0z&Ktw1tN;T>O0YoA69P=R1?Lr}&O%aqEyI$; zA3T*gna!Wgp30p2=Jd>L{!HfF*M&|F856<}Yrw`6L|4E7k4U&Zyls(7q=F!8OJx;3 zYhCXbu&gX8)vn!HFXvVK*1Ev5ij48;T~ELYAB4l;YGviBItOLk%^VPXmY^!x?HEj5 zMV@P2u0f=>BMbqiG5y_Ym{s2`wwJ5Sc}bp6FsgkWZTq~WR_S)Tqq9&izg`RP3TELT zc+pNgz$YN4{$;;??`FU~y!ZXi1-!gi533W)+CSa`{l8c(Yu7b-W(=fOCS_>%Nz$09 z7<pE_lD_2HmQTd%=SaTNKV@4Ux4e{h&Eb^~O~)w}3#M1JtwS=dqAz;$sV|Fnv44th zP$a{?W;@&xve|r1aFh8Fms>0^xa-)K%l&X*UPKQUeptHNy6fxZ`C^IVB#IvQL)<FZ zjQa!A2+r8vw7qDttPr;FjqKF|cO;9X?rSbD&HIL2nzzga?rT97jhUY56Yk0e{aB8- z(^FsNzIC~9bCzc<=8kjsvS&LvN7xrW8yg+Xq3a44xdqe7Uo<UNLj3~w@+I>!NBX5; z+iB;T|A9pDsEUlUJVuKlEFsIdkMRg@KvRqAi9aI)zehj)(WplcKR#KHPX01jk7OH> zY!iqv@;tUaIJ7c$XYBU)-SO{_H&w&}M<D)^A#bGE!gkYIt=4XEGXzHDC5^wJ@q3@w z=}3c))ab}M?SDy!U(n%u2WrXjI-O|Hi5i{g!gU&N(0Gl;gXKT$*$j?7Ox#aYzpL*{ zHTI?IG~J--TIX%O3h!@%swcKYknX=$#^UYwRXDblGSJ>n-fjUrxmL3end9tE;?3Pm z96JIJK02yC=||;fEu-{3Ra8`;>O|_H%po*>J(4l9d)436K=w~&2h?W+IwCVkRkpco zpL7Ac+;f8;K+qUJ!3Gupu@}W#I<a80#S%X%5@^bQU3U}(HUJ^(kgD~*O&TM3xI2Z2 H<D$O-aou?$ literal 0 HcmV?d00001 diff --git a/server/map_handler/__pycache__/get_measurements.cpython-311.pyc b/server/map_handler/__pycache__/get_measurements.cpython-311.pyc index 04e435195bb84b483975508c3e1f2e1f7c2ac5ab..4428ea3d1cf7782690c3cd887061ae76458f248e 100644 GIT binary patch delta 519 zcmaE^`bv#=IWI340}v$46;FFSk++&jj%{PtU*^ecStRPkN@PJ&5Rk<WW2MNYGcIFf zU|0>r5Kt?YheK_RXbS%t`DIK%)j$kaou$lBq5$JFFsLvT#ny_KC?iBt6l%mJW;4uX zLbZsIAw{uPY;qoJ-Q*Bf<H_o5{FA4#PGnS@tih(tsJ_{UZ9lUBe_p;qZfat2X;Er! zYF<h4WOFVJ_9~|6*vv1ClasiVSYMt1+B3O@t8@~#1RHBXQD$DrW^wK#jGTv=85kNE zJ}~)ge!?@4$@Z?4+#Ib7YUUSIEiOt~UXilw@b2*b%EllqKSygp$Ogp=QYIIrOs+_o zba?;x@swNS0|Ps&G>n*hj$bb30~-S;?{yBTOB_-&j4yJ?U*V9yz#)HwgXcPj#3c@i z8FCjituJ!eT;Z^}z+nRyzQ`eUg+uBB2KoU6ANYZGfM}7)ECN|Fl0cs{d6;;ZGn_Ez z@{(gd$>=ETCCPkBlGRIYbEkkfBjbX}3k7E}noqV7Di8`~Vl?`|fJ7Ed-Y2990I&Ut AZ2$lO delta 492 zcmaE*_FR>BIWI340}$-46-(PTk++&@AM3`hzs!;>%NQ9LRs%5vq%dVOfmp@DldD)% z>xD{Wp%OqUMGjRhBSVUOtyrE|i9AA0mH>=hBbvg$MqwGywAEk}LE=Ew+R6+iN-#AH z3@Qvoa<$?pwkXz!&t{m*1hPv2;V_70lee%MPxfa`o$SMAJ^48+|Kw?GqKs;r*Rbtp z)=~G%S4c@LNmMA$$V|>q$W2WxDOM=SNL5JA&r8WH$;{7FNXswHOQ~Xtj-6c1rNR92 z1jFQ2TuPHKa+S)l78GUXmE2;<D$dWl#hOx@TTpz9)3qWwwE(1Xa|-tnM$SHF28ITP z4@@4L4SDA=Da;LCATl#@PUH&3S#dMs?(zs;5VE<*V|#_i_5zRX4Jo<F5BL?inOLPi zFhGdOJOXkO9o#VZ0|-8_0;NDS*W@;VENKZ~xHNe(d$KW{WaIMGV?HS$;;G4eQj^tF lZ!?deI3wen$tps#7%e967b*}6WMVY>z<@+%Om-C31ORiwe}e!3 diff --git a/server/map_handler/get_lake.py b/server/map_handler/get_lake.py deleted file mode 100644 index 02c076a0..00000000 --- a/server/map_handler/get_lake.py +++ /dev/null @@ -1,15 +0,0 @@ -from server.consts import LAKE_RELATIONS_PATH - - -# Writes contents of a lake json file to the response -def get_divided_map(self, file_name): - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - - # Extract contents from JSON file - with open(LAKE_RELATIONS_PATH + file_name + "_div.json", "r") as file: - data = file.read() - - # Write contents of the JSON file to response - self.wfile.write(data.encode('utf-8')) diff --git a/server/map_handler/get_lake_relation.py b/server/map_handler/get_lake_relation.py new file mode 100644 index 00000000..d24d32c8 --- /dev/null +++ b/server/map_handler/get_lake_relation.py @@ -0,0 +1,26 @@ +from server.consts import LAKE_RELATIONS_PATH + + +# Writes contents of a lake json file to the response +def get_divided_map(self, file_name): + + try: + # Extract contents from JSON file + with open(LAKE_RELATIONS_PATH + file_name + "_div.json", "r") as file: + data = file.read() + + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + + # Write contents of the JSON file to response + self.wfile.write(data.encode('utf-8')) + except FileNotFoundError: + self.send_response(404) + self.send_header("Content-type", "application/json") + self.end_headers() + except Exception as e: + self.send_response(500) + self.send_header("Content-type", "application/json") + self.end_headers() + diff --git a/server/map_handler/get_measurements.py b/server/map_handler/get_measurements.py index c7a88f81..c97becd2 100644 --- a/server/map_handler/get_measurements.py +++ b/server/map_handler/get_measurements.py @@ -133,9 +133,8 @@ def get_all_markers(self, cursor, lake_name): # Convert dictionary values to list of measurements data = list(measurement_data.values()) + test_measurements - if len(rows) == 0 or len(data) == 0: # Return 500 and empty list if no data is found - print(f"No data which meets the condition found") - marker_data = '[]' + if len(data) == 0: + marker_data = json.dumps(['no measurements']) else: # Convert list of dictionaries to JSON marker_data = json.dumps(data, indent=4) @@ -144,6 +143,11 @@ def get_all_markers(self, cursor, lake_name): print(f"Error in querying database: {e}") marker_data = '[]' + # Set headers + self.send_response(500) + self.send_header("Content-type", "application/json") + self.end_headers() + # Set headers self.send_response(200) self.send_header("Content-type", "application/json") diff --git a/server/map_handler/lake_relations/all_lake_names.json b/server/map_handler/lake_relations/all_lake_names.json index fc247216..939b10a4 100644 --- a/server/map_handler/lake_relations/all_lake_names.json +++ b/server/map_handler/lake_relations/all_lake_names.json @@ -1,11 +1,4 @@ [ "Mj\u00c3\u00b8sa", - "Bogstadsvannet", - "Einavatnet", - "Femsj\u00c3\u00b8en", - "Femunden", - "Fjellsj\u00c3\u00b8en", - "Gjende", - "Gjersj\u00c3\u00b8en", "Skumsj\u00c3\u00b8en" ] \ No newline at end of file -- GitLab