From 860d5f92229aa2fddc745c14fff02241d12b3a71 Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Mon, 13 May 2024 14:02:04 +0200 Subject: [PATCH] update: modularize add_new_lake, and add unit test --- .coverage | Bin 53248 -> 53248 bytes server/main.py | 12 +++--- .../__pycache__/add_new_lake.cpython-311.pyc | Bin 9885 -> 10143 bytes .../get_lake_relation.cpython-311.pyc | Bin 2035 -> 2043 bytes server/map_handler/add_new_lake.py | 36 ++++++++++-------- server/map_handler/get_lake_relation.py | 2 +- ..._add_new_lake.cpython-311-pytest-8.2.0.pyc | Bin 3749 -> 4717 bytes ...lake_relation.cpython-311-pytest-8.2.0.pyc | Bin 3036 -> 3036 bytes .../unit_tests/test_add_new_lake.py | 16 +++++--- 9 files changed, 38 insertions(+), 28 deletions(-) diff --git a/.coverage b/.coverage index 33e83fadb35bea307b53549f033bd58858f40a41..8ccad4cf530884d0d7e09dae50f7d7ef537febf1 100644 GIT binary patch delta 101 zcmZozz}&Eac>`O6&@2Z2pZp*BU-IAPzr??he;NO*&4L0={FCSOi&|}Bl4oOK<aA*B wr^>)2!hirLSQ}10_imWU>A=nkR3N}=kj}#bWJs}?g`e`ZPhs5rvR~W*01aOoU;qFB delta 99 zcmZozz}&Eac>`O6&>RN-pZp*BU-IAOzrw$ne+B=X&4L0g{F7((i&{i6%CoUBayqd6 rQ)NH_0t{;N^%>LD7#P`EfeHjz4br(-fDADfv!~1CH*J2|FYW*UWZxJk diff --git a/server/main.py b/server/main.py index 8bb9b75f..c7a16913 100644 --- a/server/main.py +++ b/server/main.py @@ -6,10 +6,10 @@ from urllib.parse import urlparse, parse_qs, unquote from consts import SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT from http.server import HTTPServer, BaseHTTPRequestHandler -from map_handler.add_new_lake import cut_map +from map_handler.add_new_lake import cut_map_handler from server.scheduler import update_scheduler from server.consts import LAKE_RELATIONS_PATH -from map_handler.get_lake_relation import get_map_data +from map_handler.get_lake_relation import get_map_data_handler from map_handler.input_new_data import input_new_Lidar_data from map_handler.update_measurements import update_measurements, addTestData @@ -69,7 +69,7 @@ class IceHTTP(BaseHTTPRequestHandler): lake_name = unquote(lake_name_param) # Decode url param if lake_name_param: - get_map_data(self, lake_name, True) # Get all measurements for selected lake + get_map_data_handler(self, lake_name, True) # Get all measurements for selected lake else: self.send_response(400) self.send_header('Content-type', 'application/json') @@ -94,7 +94,7 @@ class IceHTTP(BaseHTTPRequestHandler): lake_name_param = query_params.get('lake', [''])[0] lake_name = unquote(lake_name_param) # Decode url param - get_map_data(self, lake_name, False) + get_map_data_handler(self, lake_name, False) elif self.path.startswith('/add_new_lake'): parsed_path = urlparse(self.path) query_params = parse_qs(parsed_path.query) @@ -108,11 +108,11 @@ class IceHTTP(BaseHTTPRequestHandler): try: # Try to convert the value to a float and the map cell_size_float = float(cell_size_param) - cut_map(self, cursor, lake_name, cell_size_float) + cut_map_handler(self, cursor, lake_name, cell_size_float) except ValueError: print("Error: cell_size_param is not a valid float") else: - cut_map(self, cursor, lake_name) + cut_map_handler(self, cursor, lake_name) else: self.send_response(400) self.send_header('Content-type', 'application/json') diff --git a/server/map_handler/__pycache__/add_new_lake.cpython-311.pyc b/server/map_handler/__pycache__/add_new_lake.cpython-311.pyc index a3599d330d3de9c7f28b5755675f91ddc48c6d37..7231b41d0dfa8a2b47a697b933aa36dcc34b3144 100644 GIT binary patch delta 2703 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 ZZTI)){;>bvOndx)@D09yv_wQ8{{=#LS%Lrn delta 2345 zcmbVNZD?Cn7(OStH#zxEnxx51n<iP?b-{I;bF=&ChIQX_?!#`vKBSAiH#H?qx|3VG zm2=&cf`7*BI0^+@j3}E-1WW%6K@<jV;FPu$CJ{lD{qSF<f5v|Ko}0zBU4Mutx$imW z{dmrE-uIq+J~=k|YTHeZ$BCfTEp}z^tU>5cF{w4%lfmMx>urUuI+bWa)uDy5lIk3l z&xBQ%=2P8TNcDiurg}%EGxesAPm6$$ALdatFpAD7D(*(<;Pr(`7Xe5sJd2y{{39ui zE&Mx4ktGH{{+pDx%c?Yrn9MzL+-K7rH6{o#8{aN>U>m<6N78m?KPMq%5W`_O4JWgz zWW)t?7jx;pB{76g$x4^I4;dcSZg`>hG231=hTkX~em$_n)6ZP0b3}%9+&6&Vmx80& zi~tMpV<dw8yxG=vIdB7m6`q<^S88L3eb(CW)T+myj#qlFL}dY!<z}Of)s>g*h@T}c ze%R(CW0)#n^79iU3<|$B$b5q4&fsz=j99S0R!3weEo6j^dLyDYFQF4*5f<hj*rPl_ zJp8;pUZ1rXQOK8~w=QuD@^9^N9OS>+l|XD6KuopsjU*<*ag4W<gtdVwX5JcjA4#N? z<+O}O*4STPLpI_p&To<w|H0w&v#9Euu&}u5pRgKD%p*WLnwE#duDq%|;(?NT$MDrH z7^wl~WiIAsR_0ObCTvE6;c}EurNWUQvt;oN3zQ9>YJ+&pGmchAk|nQ1YM$0Gv+$da z1orW}j(Ehv63;}Ta-+Zu*FVDtmE-1W5jDC>R1?%G#D^VT{*py@C2Bm%Nsd$Dwmr2u zLj7<Cs|{9P_NtYe1%A(pL@xJ%JcPPYGt$j7UBziZ^qi5>57lrHQe!OjF`BfjjAgam zHLPO!PrF-#(P^Myq~1vhBGu6_9!3|fr_nG@H)cNNUpf2tm9%^|x$fmmNjrG*<nh<E z3qx8-KbR?~d5xxbB)gKiLP^gQdbMORo6ICvcjRSP{dClI0rPjQd-yeX8aMFU?&mCv zh(C1Sf+CK26rAL@JU{Y#mbHA`o5HR98}H}1j`#RZ@yC`|A{BX%<_daxO+^xvDz@Gs zS}IaL?`!Ye012zufd<ukF4hK@D!7NXfQ5=<LDve=Bph98?(LkasXYUkK^o$_{Ks(z zzvf>9G^YI9BvDoVw?EFmcF8R?EF$c^L%QkR12cG&QE4-L(ypL|P(PL%rZ)t(ST8#~ z4@hi|#KvEkC5d^Gm?4Q@i2DJF&XMSN(@c8jEa{vloin8KU-c}B&6C&+iTzI8SDjVY z$<Rb>rsc(1rDI;{c%bZ_Q+D4To>dOaD+gxD!Fh6UruKjI&=p!hvfN+_*_8bIP~<Y8 z{eLRJX2t&zv;`Ne1AR$+LEk&F{>UbDf0OfQz4iW%uE5cN_2+;LlZrH0%wMuUN&57* zaKL(5l!l7Cfo=kkcGL4>{Io2ly<6x`3UNw^*FjXAeKe=`<Z}hBRKXYN38BN6N^a<r zOPX0Ax>1A)F$z!VClFAa81mNfd(pez2+S)4s@<bz^vv|QVv~aFK$pf9q7{0JYOc_? zpDKJR-h}t_nRvs|b`c>J2ekqf2fiYyLj!{qDPPQ})qO}*5TTkd;w;z!xFo?$P^)s< zB^-qKVtRYiAJP_aHKZ*x4PC{3Kr8Nrko`0>pn)<dl#-syYbEjFt3lNBW6dc%$1gNL zk0boE=6yi#ujcgu6T<-*-5SklCF<jATbd%r1c+>cRIJ%t9~}V&y~xkD#C_s5rkyo$ zkH6n?=degi8dJE8Q94Ekgi&mkUI9^&1~U3v)GCIKKCL(i2R>7(l6Qh>FkjU3xi_iU zGBx;zt;Y{-7rt^9a->snPRx2hW^%o{nTG1};v%PFWiv^SN#{UO9m;FF>2=VFySmiQ fJJwEa&@qM=TgY;EwZFZ!+OHxDd}~`)5~%+Gak>*? diff --git a/server/map_handler/__pycache__/get_lake_relation.cpython-311.pyc b/server/map_handler/__pycache__/get_lake_relation.cpython-311.pyc index f00723a019e00b75f19812ef8cd73a543fdbf61b..ac9abc72b06341d743f138c326c6ab08aab57679 100644 GIT binary patch delta 62 zcmey&|C^t8IWI340}w<pIHfJy$UBcoR3tsMBtAE>AU-9rBr!fCF)t-2wP^DWrbjFs RE0jMla5C!en7oKR5CCKP6uSTb delta 54 zcmey(|Cyh6IWI340}!13?U*)iBkw#WUY_*SlK9-jg7}oglElpim>#ikEKvTyz{#k; JVe%^WKmhuQ64L+x diff --git a/server/map_handler/add_new_lake.py b/server/map_handler/add_new_lake.py index b9d22c5e..c14df475 100644 --- a/server/map_handler/add_new_lake.py +++ b/server/map_handler/add_new_lake.py @@ -10,12 +10,23 @@ from shapely.geometry import Polygon, LineString from server.consts import LAKE_RELATIONS_PATH -def cut_map(self, cursor, lake_name: str, cell_size_in_km: float = 0.5): +def cut_map_handler(self, cursor, lake_name: str, cell_size_in_km: float = 0.5): + status_code, map_data = cut_map(cursor, lake_name, cell_size_in_km) + + # Set headers + self.send_response(status_code) + self.send_header("Content-type", "application/json") + self.end_headers() + + # Write the map data to the response + self.wfile.write(json.dumps(map_data).encode('utf-8')) + + +def cut_map(cursor, lake_name: str, cell_size_in_km: float = 0.5) -> (int, str): """ Cuts a map into a grid based on a selected cell size Parameters: - self (BaseHTTPRequestHandler): A instance of a BaseHTTPRequestHandler cursor (cursor): An Sqlite3 cursor object that points to the database lake_name (str): The name of the lake to be cut cell_size_in_km (float): The selected cell size in kilometers @@ -38,9 +49,9 @@ def cut_map(self, cursor, lake_name: str, cell_size_in_km: float = 0.5): cell_height = cell_width / cos(start_x * 0.01745) # List to store new GeoJSON feature objects - features = [] # List to store new GeoJSON feature objects + features = [] # List to store new GeoJSON feature objects sub_div_id = 0 # Tracker to create unique subdivision ids - divided_map = [] # Object for plotting the tiles + divided_map = [] # Object for plotting the tiles # Process all polygons for polygon in polygons: @@ -114,20 +125,15 @@ def cut_map(self, cursor, lake_name: str, cell_size_in_km: float = 0.5): plot_map(divided_map) write_json_to_file(lake_name, feature_collection) - # Return the map to the response object - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - - self.wfile.write(json.dumps(feature_collection).encode('utf-8')) + # Return OK and the newly divided map + return 200, feature_collection + except FileNotFoundError as e: + print(f"Failed to find the map file: {e}") + return 404, [] except Exception as e: print(f"Error in adding new map: {e}") - - self.send_response(500) - self.send_header("Content-type", "application/json") - self.end_headers() - + return 500, [] def create_grid(poly: Polygon, cell_width: float, cell_height: float): """ diff --git a/server/map_handler/get_lake_relation.py b/server/map_handler/get_lake_relation.py index 220ebf52..f54746e1 100644 --- a/server/map_handler/get_lake_relation.py +++ b/server/map_handler/get_lake_relation.py @@ -1,7 +1,7 @@ from server.consts import LAKE_RELATIONS_PATH -def get_map_data(self, file_name: str, measurement: bool): +def get_map_data_handler(self, file_name: str, measurement: bool): status_code, map_data = fetch_data(file_name, measurement) # Set HTTP headers diff --git a/server/map_handler/unit_tests/__pycache__/test_add_new_lake.cpython-311-pytest-8.2.0.pyc b/server/map_handler/unit_tests/__pycache__/test_add_new_lake.cpython-311-pytest-8.2.0.pyc index c6733b1f387025c9507e38386f998e47bcb8bab2..a74c8c7b03b7928d80c0ec1baad0a0ff2cfdca0a 100644 GIT binary patch delta 1373 zcma)5O=uHA6rS1N{50urG*w&E8f{iZw6WHo#EK#aLb3RZ3SsReQf=BWy8&A^CPJ@* zVGeo_Z&t;FhoXpgMQ>FU%AR@=@gNiwgr0nFV?rtlK4!mpKi_+AX7ci|=UY7dC=?11 zkelRa?txkjM`@utFc#0ZUTmd=`I$DSTx^3~hrJzkAM72Bo+d`1dS{5r)i?b<eY|LA z@@Ap>rMFz6gxn>JlnA3GYJ*i5hd7i;^D-e%;j77IiI9?1l9^mm9LZ6xgAE?lQLVdn zgGI<S&yO*tIBJeE71=pyUV&=x)r4ub81Y5KSK3KsF(!41=Te)(yKGs^Nb%eh1wwOC zt)A#8^Kj6ojl(kizBCKblE!?@?`RX$vvj+)o<Yc(O1`?^(M2E-E8n0cwWKhD&ot`# z?W|>ICe7>Fuh?SZ2jCOBDy7o~o$c6~D9r3OtXMi7Lp5nwZqTw#yJ%&`r&-pJTp0)m z$=R@JSy^s-#33MpbI9;>Z0`n+6lT0eCKu;aJLz+So;hCR)--p+jYDLn%zT#PRa}~J zgOHY~l^qn{)b8%RHCJw$=S_Q`g|%azi0#VRvfJ{zsP~KWEf7V9wE|EfOC9SfCzm3z z%IN3FrhAtj?|RwyK9c$vN!=Q)oV?S%tn@6_*N3_So=-~8$0oDE0p)!?RO6Hzc5_<8 z*(lWT{FPR#3)s9MrAGdvNOP&hwzWCmiFl@WFR1i@B=Ht;MDE+U4IY9U0EYAh5M+6T z<M<j9-wqpZK^Q<th}-f;x<fnx+$mnmS5@8*eo<Bq(x`Z)B)WJUd0yHM)Iu2ksU%e1 zhFV<Rmf)Qj=t77ftV39j5Jl)l*Z?5jsT;$4(Mlq0M%Su3pkYThDsC%Lji*6xUpNl) zPU8#D^f^i8LF63{oJnA7K8R$EXRYF-{d=sLX`6fqgTn~>#j8O7h5tO0q4Q0cbPUVV z96yQ%o{S$tNC8+nKyChFykCq2d(;!)>0K~`Z)v9=)KR0;^<61WOxhDu7LSNjD5-h< zkBed`GmO*ejj4A#j>&u%g7>s|`&C~mKh27h*~9!4nD`g9UI-dKKX_)5{Bx~n8tq*n NYoS9F!g~~~{0q}PLF)hj delta 591 zcmZvY&ui2`6vs2!O)@dvY}V46W!+-ewws96EuyyK`s3h9P^5z3C8SMOW7Ewt$s&6Y zJ@^lV=dm{t@zlfq6W$arLQVw_;-OOTwjlW4wnvAV&->22_r5dC;nIhu`LR+tCE>6p zcY8m|xoNW?Z$Gk`6!1WOTYg%_sA04Mwkf%KzIT<$`L|a7w>f^UY{>F22Jf}Si{v3p zge(6fJ4rgYEo2O?EUFm948b5&;7DsQ3ubtO)xhD;;CE>g-til(3SYQ0_Xmrl<0cE$ zCpMA0T`+V<DN2J;2iEl!&`NJQTA^oQnt6jH9u>xRl87Mc`*<XpWN;Qy7<UFE&rj1( zWNWamx7j>=*B6uy=J<G`M~vC<P^ph!89TCZ;urfnAskj7J9V;Ykc}$BbQotR1%aRW zVu6y2gcd|*>-Bk(ON3>@3ZYGK2rl6Q!qp0M`f9qx>-)Q*xQ@pK>xpYrvr4!`xQs|O z#JS@k=1~`Crp+%!l!e}lH0gU;;`O39R7Drlb7Q6Ynay&P58PV8w}w%iMg3GP!+~{0 zoxX7c>NRhbeqh=nW=Yuux?sX@?k2%74sVHjxMjG~J=m{3vG0GC{xgqMSU<g1rv86X Cwv!zI diff --git a/server/map_handler/unit_tests/__pycache__/test_get_lake_relation.cpython-311-pytest-8.2.0.pyc b/server/map_handler/unit_tests/__pycache__/test_get_lake_relation.cpython-311-pytest-8.2.0.pyc index 498461db33caa3aaa66d942e959682911a937c5d..353e41afb821f20c650945b8ed0f7ccbb176bd19 100644 GIT binary patch delta 37 scmca3en*^lIWI340}yEbaZEGW$h(1)QDpNz&OeNkmvM_sKF7@m0MYOZlmGw# delta 46 zcmca3en*^lIWI340}#mkaZEGX$h(1)QF!w{&OeNde3K7wi*tQoU}cmmQU)pj05e$& A=>Px# diff --git a/server/map_handler/unit_tests/test_add_new_lake.py b/server/map_handler/unit_tests/test_add_new_lake.py index 2f7d4c6f..6b3fd67f 100644 --- a/server/map_handler/unit_tests/test_add_new_lake.py +++ b/server/map_handler/unit_tests/test_add_new_lake.py @@ -2,7 +2,16 @@ import json from shapely.geometry import Polygon, LineString from server.consts import LAKE_RELATIONS_PATH -from server.map_handler.add_new_lake import create_grid, write_json_to_file +from server.map_handler.add_new_lake import create_grid, write_json_to_file, cut_map + + +def test_cut_map() -> None: + test_cursor = None + test_lake_name = "test_lake" + + status_code, _ = cut_map(test_cursor, test_lake_name, 1) + + assert status_code == 500 def test_create_grid_default() -> None: @@ -37,8 +46,3 @@ def test_write_json_to_file() -> None: result = json.load(f) assert result == test_data - - - - - -- GitLab