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