From 27176c26e63743379491ad344621183a1d451627 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Sun, 11 Feb 2024 22:06:22 +0100
Subject: [PATCH] Update: move code from main

---
 server/main.py                                |  32 +---------
 .../__pycache__/get_markers.cpython-311.pyc   | Bin 2626 -> 2274 bytes
 server/map/get_markers.py                     |  57 +++++++++---------
 3 files changed, 31 insertions(+), 58 deletions(-)

diff --git a/server/main.py b/server/main.py
index 408d3314..788254b9 100644
--- a/server/main.py
+++ b/server/main.py
@@ -3,7 +3,7 @@ from http.server import HTTPServer, BaseHTTPRequestHandler
 from pymongo import MongoClient
 from pymongo.server_api import ServerApi
 from consts import DB_NAME, COLLECTION, MONGO_URI, MONGO_CERT_PATH, SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT
-from map.get_markers import get_markers
+from map.get_markers import get_all_markers
 from data_structs import Measurement, MarkerTemplate, DateAndTime, Sensor
 import ssl
 import keyboard
@@ -60,35 +60,7 @@ class IceHTTP(BaseHTTPRequestHandler):
 
         # Update_map endpoint
         elif self.path == '/update_map': # NB: should be POST?
-            try:
-                # Fetch marker data
-                marker_cursor = col.find({})
-                marker_data = list(marker_cursor)
-                
-                # Remove ObjectId field from each document
-                for document in marker_data:
-                    document.pop('_id', None)
-
-                if marker_data: # Data found in DB, convert from BSON to JSON
-                    resp_code = 200 
-                    marker_json_list = [json_util.dumps(document) for document in marker_data]
-                    marker_json = "[" + ",".join(marker_json_list) + "]" 
-                else: # Data not found in DB
-                    resp_code = 404 
-                    marker_json = '[]' 
-            except Exception as e:
-                print(f"An error occurred while querying MongoDB: {e}")
-                resp_code = 500
-                marker_data = []
-
-            # Set headers
-            self.send_response(resp_code)
-            self.send_header("Content-type", "application/json")
-            self.end_headers()
-
-            # Convert marker_data to JSON and write it to the response object
-            marker_json = json.dumps(marker_data)
-            self.wfile.write(marker_json.encode('utf-8'))
+            get_all_markers(self, col)
 
 # Listen for pressing of q key to terminate server
 def on_key_press(server, event):
diff --git a/server/map/__pycache__/get_markers.cpython-311.pyc b/server/map/__pycache__/get_markers.cpython-311.pyc
index 0a4fa70dc8d5db158534773773e880a98e27b1ea..d666b220cf6408f555dc5c3b7c112d6787766db2 100644
GIT binary patch
literal 2274
zcmZuxO>7fK6rT0Y+UtJ=iStK_DbUDJLP#Z=L?M(wrM96QiV7leY8mgw*|6T-?yehR
z*_DMN)k2Y=5)vt;#j0AM;=++DJ<*#Nt%Nla5>ijxETxrDPJOe9?QF>G?3?%I{mh#;
z-^{~sIDnu%I`Ox-%pvp-6`IYv$*g%8gzg{#35<-UH%4Zf5z&IDX<B8Q+}2UV55V&=
z{2OhWbNMvmH`UJQvhcZ7n}Wy*o(Hh<<JRiiR^dfvOJ@EZWAJVthVF`$1G(UI(BZKh
z%7v%Hz;nxJIwCL^P{R9$hB{yH3=Sq3f)@-`fzeOLRNj>2Oe-NUgJL3Dl(k8iy@ULy
z$W%dmw@JvIO37nxDQ3~LP0JS9vuL)vgp0Vkb-h+#ff10qJPcatDYE)u!BgS{b{WwK
z55WF$%ctZOu)ytnh()hEg93O7UP?<o1q(ii$pd%v05bVjKy(o4@e*$a+cSc{$p4If
z*|r}jaG=CxQHi|_M^NIw=M{cqTx1r}HJDvwim19HREnHCGX{a>j*t<8LTGzUz;;W%
z?L6I;VUW3}ty^#|3zdtkd+n01h!$GAt%lk@ZLa96hTBq`6T<FTZi&JXz!y1B*pwu^
zc@BP=){O#z0*$7)b^^#9l!YS9#!8I2#b%+!7a4c(A3ZBw7to(5;n6X;6HdtIG$Y|5
zp1~o)3u-2x6BW~-K#RxMN6w5TzcxhONGhh1Po5QxtEQ?YHC@dPj}8qbLG_)eCv#~n
znH9}cF0Ee$<3Vj{JuogyhM7@w+C<?1)um;*r5~5oOj<T32HQq4SkQPMNEy}kUEJtT
z=l}5k9(}@F@liWI+L~SiE40qctTP|3Gqcid*lWQvGg~-(T8WFguIh0$lgaD4D8v`%
zC0UGrn-}#ZNy)~)RF$lHc5*B({Y#xfXH><6-5xcUG_kNNt!c89Nt=?Y9HUpfz~#-k
zqa%q3!E=%#5KMPOSWVU7DNrSa_&>dt5jAR0I8B!nlY|XX5mLHnXsTj}B<P6qVp<S&
z5~QjP-q7iV*D1CLw>Sqm!k|m0NW7wwQ3WyKC)g0>Il^XCnS?j$nu1LkDg@dTg|wO0
zDej1$u9%{ZWY?zBd83?!o91+eFrq=9$9S{p6rUuz?SS+Fn5Eenm!VE&)bQ-#dR}+;
z-RJM})!jdZ?u9DhSFzsJlU6KY#}bub!;5+jHW1_gz#)~->Y<LC=Wd)^?W|%ebjS`J
zsyY32FxEg`|Gs*6U*+?<bI#9?z`<JkF4`c4_SSp*tL#JmH@=n_wc=xTe9Y<{dwRj@
z{iHHgnSvC+t@pjk)Z4eOf*lRSay@PGiVxQ!6Hku=fo}1qZ2nY@KUMGOs`%@%?n<!z
zy@l5Bfj1pPi1WY1u@^XYYstd<ZM?sR_t!E15_i179k;%z9s1b9BQ_qX;gQy~g=033
z)o|=TFWS>}`|#?FwL4+&PL!v>WciCt-<g-411~xU9{H@!A-i+P!pCiVyw>bSH<bAL
z>0_sd(X-*e<X-mKcx<wZ{i}-uJ`p7z)gY{~WDu;S&3WPzBwb18M8c<16f>z52|74e
z%oM1IFMY+JhC01VB%q~rz_z3D0<-~rgqxGo##IM=1YZF>IB$S++B$`W9;JjrVx1q)
zsX|^BC-jd%q|b@*E06}uFiai!%g$FvfwJ?}BfD0zH`N>J>bw;hup<NIU_BgNxpXsi
zBenX~y-W9#cax8fJTa~Qal3!q3ZJyYC(D64Vwd?JqSvFh0v77CQC|)9)lsbG?se2#
QbN7a~pBZkTcZrk#|5QR1QUCw|

literal 2626
zcmcIlO-vg{6rS~Z?e#x6E+n`F3bd((gu+kKf(RwTNs1y+6NpGGx7M;Vn1!{y-CaXK
zrlL`#S`kvxQ&3bXv<KpfRHCQmm_rWj&6ZZGHEMcjg%U0m6-0`1>a73pVyQj#t@q8m
zH{Z_Bo9{h8a=Gk)$iaKRpfxK1f9ghAETzuAn*!iIfB;e=2o+l@L?JL|DnmEua<95Y
z=1ubD7I}*jVhrDu=PwTzS_6XYs8$dIO`Bxpt;*_0R$&oUwKH4o3;-b3_zk6>iWcoL
zN5~O#hMX~1$Q5&k$ia!<EP7&fp*qrMZi7%gq$WVXva3%!zHI913Yf8D3~@?QMllpu
zv1J0qm4uAlW1KvX<Vh5hL{3H65hVJ298L-`6riwqPD#Z1>diTbp~rFmIyu>WU;}C;
za)87hnjrnyyh#vSm1wURF$}aoYYm1{D|j*w3vJL29niVSkeSF^logW!<s$1j2$DI1
zqH9og=!TvnD6?9bm#kO^>r<u_fZoz`?6Gf?+{#wvW>y#j{w>&$qEl1_-&ljU81Tp8
ziIll&{-zqdRjp!Dih=$VGiNTJe3@hbeA^gT1Kt9gQ<fw6lmCLZ!j_cv2)@;bkJ2lw
zs^51><|?@W-?<G^Y!Gack*)GDFtQc4&6p-YJ5b#f0O$a+d&QQr!S)#wZ@NKvyJGvo
zHc@I9sYP&;z5y1gK*#v5PAkkzE=j0+GC*U~Xb_uKVqpu%tHJ`>)ibLI=(#AoAhFwZ
z63=dnt~|QxBuaRx4|sJ`uOZRje*IFpc<}CUbmRx&_s>J)!%^ZbNU38U4%o0wOvIyt
znuG|mBrQrkNK!*3d4VlTF?n2)jCes3R02uFu}z&7`1v?e6l{-iHzSKkh|a3msc<t$
zU5bck0g0I9cs?m}{8IEz3;$Q>JF=CgE7+g9QrXJukD@33xZe2Fk7VdY^P`s^e^wc)
zD{psb7&Dh-gyN-LcMN0tDuN}eZx~x{AW=*#@>R(RbTS<y@BUe$?t>^uflnJ&s1&t9
z>{>Bi?$@TZ#tHB}AVtBdCL&Pa)qn|`x=v$DtWZJ}{XSY--+agqgs&+`R>E;Lo(u<(
zGOs42up}p<J^iOohsn?alEX1h3P+I|DSg}}ExoZ1ih`o@iI_CB+)_O@C?<GLRED|^
z0qtZlrH!ankZl?%{<baaXCDqd7|QuOHGgNty{{i__h+Jn0}_q^E9-%fbu!C(&5`vo
zAfMEgl_<=>WK2@9?ZQnSN&3YG?ATho@$Pb`2iwYQ=sxULd3&)lc35t^4OWlA>cy;z
z6qVFn4pT_cS=w3=`INpRM^!N74~R!kO66N}m{qW6YGN98yvNtiZ(Q0AX1)D6Z@=d4
zPg|dtd>69bft+_h^A4n~JHD0;^Tu?hEi=8{mh+v_d}q?O=LIL1@n)`W*XMk_ny=UB
z^yYkhny)Wy+i7geOg&l5UI}ISxqNruQ#$*}M0OfwC1sDMjwh+Vfvyh<I_>;_;jdWW
z@~;nOd>K*e8p#Dlo=)YQW14g9xwFaOzLs-d)|{7*y07P)<C=4P&uaGB)9foZsPnBY
z7fJKvebVNdMl_;5LCq6<%4a>JS$6dGj>ESHD5l|1<vn%x+S3bZ*WvS;2#E*NKw3rT
z)vcgASP!1n+k*l6nV$}J(9cd%dcT7qI^e~ogo0^hNx^1`Q)jUi3UZtyg@%npW&{yM
zBG^HShD`prN#e=a%1tW;pm{DK#IarCDnk}dl29CCC!r@7QB*m}t4fjP1=bh1u2UZ~
zGa{$V7bsugl&q(e9MF|cx;N}#ECG`u8j^#=)a!_{O%yp8Mdg8QweaMDeYNo9-F0ix
zyNNrA_1T>Jl;%FQ>d3o1Yg2b4cOvUoznOX%eh|)dZmYTGL9KZ(=Q^jk&aK+>fWFOs
l<+<g#XU_q@2K-sz&x6tIfBo{HA#42Yv3`o&O06oK=pU+WlllMv

diff --git a/server/map/get_markers.py b/server/map/get_markers.py
index fe91e6ce..c1869576 100644
--- a/server/map/get_markers.py
+++ b/server/map/get_markers.py
@@ -3,36 +3,37 @@ import sys
 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, DateAndTime
 from flask import json
+from bson import json_util
 
-# get_markers parses a list of MarkerTemplate objects to json, and returns either a successfully
-# parsed json object with status code 200, or and error message and status code 501
-def get_markers():
+# get_markers requests all marker data from mongoDB
+def get_all_markers(self, col):
     try:
-        # NB: temporary test data
-        sensor1 = Sensor(ID=1, type="Type1", active=True)
-        sensor2 = Sensor(ID=2, type="Type2", active=False)
+        # Fetch marker data from DB
+        marker_cursor = col.find({})
+        marker_data = list(marker_cursor)
+                
+        # Remove ObjectId field documents to allow for easy JSON to BSON conversion
+        for document in marker_data:
+            document.pop('_id', None)
 
-        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"),
-            MarkerTemplate(measurement2, 10.0-measurement2.accuracy, "Red"),
-            MarkerTemplate(measurement3, 20.0-measurement3.accuracy, "Yellow"),
-        ]
-        
-        # NB: return test data as JSON
-        return json.dumps([marker.to_dict() for marker in testData]), 200
-    
+        if marker_data: # Data found in DB, convert from BSON to JSON
+            resp_code = 200 
+            marker_json_list = [json_util.dumps(document) for document in marker_data]
+            marker_json = "[" + ",".join(marker_json_list) + "]" 
+        else: # Data not found in DB
+            resp_code = 404 
+            marker_json = '[]' 
     except Exception as e:
-        return e, 500
\ No newline at end of file
+        print(f"An error occurred while querying MongoDB: {e}")
+        resp_code = 500
+        marker_data = []
+
+    # Set headers
+    self.send_response(resp_code)
+    self.send_header("Content-type", "application/json")
+    self.end_headers()
+
+    # Convert marker_data to JSON and write it to the response object
+    marker_json = json.dumps(marker_data)
+    self.wfile.write(marker_json.encode('utf-8'))
-- 
GitLab