From 024502a89e8e99e73106f0a726f47cc9e138969d Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Tue, 23 Apr 2024 11:04:51 +0200 Subject: [PATCH] add: comments and docstrings to get_measurements.py --- .../__pycache__/add_new_lake.cpython-311.pyc | Bin 9048 -> 10641 bytes .../get_lake_relation.cpython-311.pyc | Bin 1869 -> 2213 bytes server/map_handler/get_measurements.py | 36 ++++++++++++++---- 3 files changed, 29 insertions(+), 7 deletions(-) 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 cff33baafdd605b31f850a99c7798ecd5c854f6d..d05f7598b0bb3d00ceda4f744cec651750e071ba 100644 GIT binary patch delta 3932 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 delta 2803 zcma)8U2Gf25#Bu>$vcwAKk;Aul}t&rYS*@^)Us+jie#&nWvQ-Ew2os4f{v1?P@;M~ zK{kD~WIzv$8zhpqEtJ$j`Q*At5h%421VIBdFZ}@=fCN}TCE%KApga~#lLuD?g3caI z*<y{Nd)RMhzS*6d+nt-c^|7tf?Y|NP1A=z;Cv8(7dJy`ID)q)b7QWnEZ&!Nsan}?h za;xl%Zjq1MKsJEv5sj<pMXv}}(G>Shv7!KMvuFm^FXAy2v#fufYbo=|iI?N!^AmIN zNlo29jC$x)|8j@Cfd{l21upV;9P465b`>eC$ar^W51`v1zrCwxwKBh}AVo_~Fg>k0 zQJ>W-dXdX$5z2B3C-NC1NIXae%85qubEa)bwmexXniT#v1FoUh8b*8Uf?{a2E7}2c z=|<Kl+sGf7R?L%#$Eh*S8px*}4<oyYUlYJyib8YUDME4p7$3Q&v1xR93oLOka)jK` zbVbcsv!Vl!+gXcZnYGoIyaY#(wPtNud$viA-ekS!EqeozqxGo>DR#K588}bc#fF(v zOx7`tvQD}EsTCHvgIxD`&y2%OoppZJRhJ;3{;X@yJzS#s$%%;8#%RcW*6VIy;m&Tw znOC=n*tCux#_IkdX6J1T8xOtKvL4YUf3vQE-MrVXI7Is`M)Ax-uGX5^bW4-<D#By` z>)N2jp$LjubOP^FaNbMz*(bUbW(w~O7b7tHsQISO4W|Xdkm!EaJo(%8+d)XWy&*xa z^gLx{6kqKwB(H1LdunsZeO-%3^ooy7_301*%7<zJn5|Ts4cBe?2<6T4sXBqsY%4ja z_u_rjKni**B$AoMNJQkC-re+cLi-i}FVI^Ic~ckD2mb#MA{bo&cUk{6zlg>jOG|hO zUDjMcOE?xBAv^rnI70qqnBk|dI^G%lG;{AHnJ{_+8B>2enG7!_M0w^|I3uXqOgu3? zBOeQsE5@_UR(O!I?R0!XUX<efsbn%fDJN3%F^v=^4~>_|anmO{?Shn;mkBQ{;wG{z z<ejlVnN7!&Q)S)cqLfZak{P^^Ve=uQK}@9O@x=W2%X8$aIclfrTh=BM^YOIQ3bGU= zzcv3ZOmn%cpIns3=Oz}Umq7DFPyZW=&I+nBKO(PLlFJpBCugiUy*a~{Bbc|ZkLLI- zXE5(7I@^JAhx1+Q%Xhlp>)On`d-C4NV&@A*SAWj9%?Y{rjoBg>D{-*`7kdDDYU65= z>nw4d1+KH=4pot!AH+4x4L)#$^7=cz&5K1xU&+yzJGEu9y*_+nm|U`&@dJ{y9@JD! zZt_cOC|GH7=D3Q}MI!<)F5a&~ZlJ0|`wx=8S>MMx@-y4PuoVf;*GF%RZVVSqv63lP zFvYe^u8qhmqq(8nP*q1hvq`NS;%#fqMJ`a{0tGIx&G|NZ3T;P=Tu+JXDR4a%&O|cy zo#3!_*n#dl4Cjt%?g#s9=ejkYbZbE=vkR%@mAki^zJ+^#jYr_fj?f*3x{9O&05Owv ziORzi&QVb9-=orb3g4$NMjpBj9Hs{%eWMPSK}i1@U<FkK+p8B>PFEuBMK-u{D%ZUh z-EeN%nn<5}6MOFd)7^u$(l|^dulSB*C;6lAh+lPfm^!1d20eWfU<GY?n~A&mH3KaZ zWqvlDn!o!_vl(k4r{Q(^*x#quWxyor2_NX)Wjn}^17~4lKMHgmfDgxS47Z{Fz74(B z=&MGr#wr3H13|ArePiH*XB;6Tp)+J7)D!50g=Hp{h7FvMXUe+xWk}kzBmgb#C;tew zU^B6WTWZhIOIZqe=;^PaCa$1umM7=KW0T=O9e%)>Ugg(f8|RB$sKkW|T&SwS+He)s z;R`B#wW~fcG)RvgJ!)W7mFOc^;MuQ70)cJ8_7{7!&~dzIKmI|wDD;<v{wiYl=kf35 zZSqmXyR4;3jjG`ns`)DwpXUF!tcKF)>KRM)2ohKCPd^7c^Kr!W0{KD9$a5lwKLqq& ze+5|H{hGi5GmXXi?q6HFu@25E#*dH>_g(0vbt%S3Z7`HggYneBggkLtf*%zi9Y9K> z0BQPb5DrUf!nr}t_!p8X^3dSL?~|G6VU{Kuxw)@{ycIpc!u!xkD$%3Ms#6}Ej>V+} z6ehI>vanKyvNn@iis_^?u&}I^6UlhGteHwoOV@x<?^!lU6Z2wfZhSJ8Oi5`S@L{#p zqBut9QFsq}`dt7>d(&XSH26U;K+!Z<a+wBKPC*J43`dG=SBdQ^uwC0`8@bmO6&USB zdVqjAc8h%8cE+{M>Q}#eeQ0%PMZF~YNU;DJX+MP9$a4DvORFc@X>V?|gP@w#NOrjI z%%#M|Wc-BmQ!vooPxq3e9ru<mVBDM^t0Fo+11~d9>{^?yA{ZLskbr|#v<qQ7ejevr ZtB8)9`)cDeaKC^pbeRg)C!$3S_dm%%db<Ds 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 63703b7badaf1a1cd710f5049ffe20b97c74f509..17425f817476873ee7ef3634bb39965b2bdb27a8 100644 GIT binary patch delta 779 zcmZ{i&1(}u6u@V8XEyChDh=9JYhknpvx12ykwlRA0mVZIZ9rO(u*tsAZ8y7dW|~wl z5%J{7FbA(*q=*;s=E;lREO?Gb|A9ym;?3DjEP?7fym>S8-tT?P9L~L&FCV1SHqt`& zFE@87LO<foUm+9Y=#n;GArE;tKrOt5G4c#BJQK_&@yK(sMLfEJ9IJnS#hz{Y0n|db z1^wnK{?LEXq1wkIisBNc>d<gZ%S)->#troj7u9v+wEBhTF;OWauf7^rCbvaOHjq4{ z(uRZWsi<O4pLfx|xrw^iIpx+dLN=SoI=G%-E^E1M7MH=?&|_WhOAySLf;FO0LZ}TH zF}V$lgJ?&g02bAEpdoYiF)0RCT&}y2z(rx|yf@AzAZW7eZCAirwOUz+M|&XTn$8yh zcM7b;{7^_YY-n~<SM+bkDeRbfJUf;ZGUilumGLZN%DCcQk_o(|!F=HE!U;+XT(QTY zrCVj$dK3j3^k5rwJWn9WXnc_{AGd+krUFE6M?@iuIIDSnC)p(YCz*+t+BDDMvf}2! zoHZcv7<l|oI8|54c`7Vzs|tCTS<;67P)K~#FZ2`*GfV0dQDg?qrqwrEP%r6sdzdom z@@O;?H`O!i+N}livt63Gw_tubi?uF0bdVOnJHT`L<%AU6)WCtMM>8OCUp!9o79DAg h_@er0E#f<BHgzF?5ih@99U{HFznd)oReVLq{sD4))SdtU delta 455 zcmZ`#J4gdT5S`iGyGsI5)L>5YQN+T4sHI>~g4kFDL{JQfsCxn7Vqh;O7Ah9@5~dJ4 z8&MlUECeeHwG#xp!_Lks5EQX;qe<yw=gk}D!CU6E<Ed@-EF2Dj#==}O?{k2+#?S(5 zih5FuBak4`g#zXfK{AKsndAo|$EBEulu^wls^tN^s~(q)h7~A+85H!&QrwUx1^77K z;sjdsiG2vv%|_`1+v%Ofn)`_!n1@oNl@2fnYIfJ$ffG&{?4oHl+;YZY*W5Fu_RC*Y z!3u2iC8%I3l%*RnK)yJOSibNaH}41Y8?Ljmxms|PphKfK=%eFVI;Wp5jpfcBtqfh> zBLeJ0jYTP85}Manrj60(K=0rC(x_S7i0STS=*1daOz`_qa7J_2)Qrs^Y(wj8O88;V zQDsMstQR-ElBe`t!53@AqN^HN7f{y>%GUH9NEeE7%XKDI<H-60;H4=Sh!5EqJ1^Bh Kw|_|`wEYLb=WXl& diff --git a/server/map_handler/get_measurements.py b/server/map_handler/get_measurements.py index 4de8c8a0..1f878194 100644 --- a/server/map_handler/get_measurements.py +++ b/server/map_handler/get_measurements.py @@ -6,7 +6,16 @@ from server.ModelFromNVE.icemodellingscripts.getIceThicknessLakes import get_raw def get_measurements(self, cursor, lake_name): + """ + Retrieves the measurement data from the database for a given lake, and adds weather data to each subdivision. + + 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 requested file/lake + """ try: + # SQL query to fetch all measurements and subdivisions for the requested lake sql_query = ''' SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, m.CenterLat, m.CenterLon, s.SensorType, s.Active, @@ -21,8 +30,8 @@ def get_measurements(self, cursor, lake_name): WHERE b.Name = ? ''' + # Execute the query with the lake name as parameter cursor.execute(sql_query, (lake_name,)) - rows = cursor.fetchall() # List of all fetched measurement objects @@ -36,7 +45,7 @@ def get_measurements(self, cursor, lake_name): center_lat = row[12] center_lng = row[13] - # Create subdivision new object + # Create new subdivision object sub_division = { 'SubdivID': sub_div_id, 'GroupID': row[9], @@ -46,6 +55,7 @@ def get_measurements(self, cursor, lake_name): 'CenLongitude': center_lng, 'Accuracy': row[14], 'Color': calculateColor(row[11]), # NB color calculated based on average thickness, should be minimum + # Fetch weather data from the NVE model 'IceStats': get_raw_dates(ice_prognosis_raw_data(sub_div_id=sub_div_id, x=center_lat, y=center_lng)) } sub_div_ids.append(sub_div_id) @@ -71,7 +81,7 @@ def get_measurements(self, cursor, lake_name): 'Subdivisions': [sub_division], # Array of sub_division objects } - # Populate remaining subdivisions and create "invalid" measurement to store them + # Populate remaining subdivisions and create "invalid" or "proxy" measurement to store them remaining_sub_divs = fill_remaining_subdivisions(lake_name, sub_div_ids) measurement_data[-1] = { 'MeasurementID': -1, @@ -113,23 +123,36 @@ def get_measurements(self, cursor, lake_name): self.wfile.write(marker_data.encode('utf-8')) -# Get data for subdivisions that have not been measured by sensors, and thus are not in the database def fill_remaining_subdivisions(lake_name: str, sub_div_ids: list): + """ + Returns a list of subdivision dictionaries for subdivisions without measurements. + + Parameters: + lake_name (str): The name of the requested file/lake + sub_div_ids (list): A list of ids (int) of all subdivisions that have already been processed + + Returns: + sub_divisions (list): A list of subdivision dictionaries + """ try: + # Read the lake relation for the requested lake with open(LAKE_RELATIONS_PATH + lake_name + '_div.json', 'r') as file: - data = json.load(file) + relation = json.load(file) - relation = data sub_divisions = [] + # Loop through each feature and extract all subdivisions for sub_div in relation['features']: sub_div_id = int(sub_div['properties']['sub_div_id']) + # Only get subdivisions that are not in the list if sub_div_id not in sub_div_ids: center_lat = sub_div['properties']['sub_div_center'][0] center_lng = sub_div['properties']['sub_div_center'][1] + # Fetch weather data for each subdivision from the NVE model ice_stats = get_raw_dates(ice_prognosis_raw_data(sub_div_id=sub_div_id, x=center_lat, y=center_lng)) + # Create new subdivision object sub_division = { 'SubdivID': sub_div_id, 'GroupID': None, @@ -142,7 +165,6 @@ def fill_remaining_subdivisions(lake_name: str, sub_div_ids: list): 'Color': calculateColor(ice_stats[0]['Total ice (m)']), 'IceStats': ice_stats, } - sub_divisions.append(sub_division) return sub_divisions -- GitLab