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