From cec134a9ac0f8a4339c2d594392fcfbf7737624e Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Tue, 13 Feb 2024 14:24:52 +0100 Subject: [PATCH] add: working sqlite db with example data --- server/__pycache__/consts.cpython-311.pyc | Bin 602 -> 602 bytes server/main.py | 54 +++++++++--------- .../__pycache__/get_markers.cpython-311.pyc | Bin 2274 -> 2576 bytes server/map/get_markers.py | 48 +++++++++++----- 4 files changed, 59 insertions(+), 43 deletions(-) diff --git a/server/__pycache__/consts.cpython-311.pyc b/server/__pycache__/consts.cpython-311.pyc index 2ca87ef4877dfd3535f7985003fbc9593d344e4c..16e0d17e682de899d1bf7d8e9de0db95305ac2f0 100644 GIT binary patch delta 20 acmcb`a*Ks~IWI340}w3pI=zwGp9ugv5(QfT delta 20 acmcb`a*Ks~IWI340}xp2pWMjp&jbKBc?8n{ diff --git a/server/main.py b/server/main.py index 162ace84..9e51bc42 100644 --- a/server/main.py +++ b/server/main.py @@ -1,36 +1,32 @@ from flask import Flask from http.server import HTTPServer, BaseHTTPRequestHandler -from consts import DB_NAME, COLLECTION, MONGO_URI, MONGO_CERT_PATH, SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT +from consts import DB_NAME, COLLECTION, SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT from map.get_markers import get_all_markers -from pymongo import MongoClient -from pymongo.server_api import ServerApi import ssl import keyboard +import sqlite3 app = Flask(__name__) terminate_server = 0 -# Initialise MongoDB connection +# Initialise SQLite database connection def init_database(): - try: - client = MongoClient(MONGO_URI, - tls=True, - tlsCertificateKeyFile=MONGO_CERT_PATH, - server_api=ServerApi('1')) - - db = client[DB_NAME] - collection = db[COLLECTION] - print("Connected to MongoDB") - return client - except Exception as e: - print(f"Failed to connect to MongoDB: {e}") + #try: + # Connect to the SQLite database + conn = sqlite3.connect('server/sql_db/icedb') + + # Return the connection object + return conn + #except Exception as e: + # print(f"Failed to connect to SQLite database: {e}") + # return None class IceHTTPServer(HTTPServer): - def __init__(self, server_address, handler_class, client): + def __init__(self, server_address, handler_class, cursor): super().__init__(server_address, handler_class) - self.client = client + self.cursor = cursor def get_request(self): request, client_address = super().get_request() @@ -40,13 +36,10 @@ class IceHTTPServer(HTTPServer): # Define custom HTTP class class IceHTTP(BaseHTTPRequestHandler): def __init__(self, request, client_address, server): - self.client = server.client + self.cursor = server.cursor # Accessing cursor from server super().__init__(request, client_address, server) def do_GET(self): - db = self.client[DB_NAME] - col = db[COLLECTION] # Set collection pointer - # Root path if self.path == '/': self.send_response(200) @@ -56,14 +49,16 @@ class IceHTTP(BaseHTTPRequestHandler): self.wfile.write(b"Root path hit!") # Update_map endpoint - elif self.path == '/update_map': # NB: should be POST? - get_all_markers(self, col) + elif self.path == '/update_map': # NB: should be POST? + get_all_markers(self, self.cursor) # Accessing cursor from self # Listen for pressing of q key to terminate server -def on_key_press(server, event): +def on_key_press(server, event, cursor, conn): if event.name == 'q': print('Terminating server...') server.server_close() + cursor.close() + conn.close() keyboard.unhook_all() quit() @@ -71,7 +66,8 @@ def on_key_press(server, event): # Start a server on port 8443 using self defined HTTP class if __name__ == "__main__": # Initialise database connection - client = init_database() + conn = init_database() + cursor = conn.cursor() try: # Load SSL certificate and private key @@ -79,13 +75,15 @@ if __name__ == "__main__": ssl_context.load_cert_chain(SSL_CERT_PATH, SSL_KEY_PATH) # Create HTTP server with SSL support - server = IceHTTPServer((HOST, PORT), IceHTTP, client) + server = IceHTTPServer((HOST, PORT), IceHTTP, cursor) server.socket = ssl_context.wrap_socket(server.socket, server_side=True) print("Server running on port ", PORT) # Register key press event handler - keyboard.on_press(lambda event: on_key_press(server, event)) + keyboard.on_press(lambda event: on_key_press(server, event, cursor, conn)) + + print("Server running on port ", PORT) # Run server indefinitely server.serve_forever() diff --git a/server/map/__pycache__/get_markers.cpython-311.pyc b/server/map/__pycache__/get_markers.cpython-311.pyc index 7069518c401a9926d6c76eb189af1c3fec74ac49..8159e27776dc6f9fa6d2b93036b8051095d2a074 100644 GIT binary patch literal 2576 zcmZt`OKcNIbk;leuKx)nh9;!lK+-fVNfRoyDJ39Cf)qYMg%m_EwHEIraj<vI?wXLu zE)ha%lp=*gE7CSqeTZl(dg!sYO7v2x7aLi^8VM;<#lbgMa6lZYzOiFxH|g8mH}C)6 zym_-f`TZUQpe6nyzq=6nn=v&2z5*})h2;TKkix~$M0MpRIN%*|M}nW=IYiJ5-n2$p zXN|J1#PyIv=n;HXm=J6}Voh#cZ5D2;rbZJ%;U796E__wkmc>IjOJ&}gm31W^yAN00 zp>M*c;JawTuW%Pox3k1t#=1G`o-s5vk}_lQc}H(=w4NB$e)xF!UaWxh0dk`>mj!kw zDBSjxU|DaC)&3zckLrSqV+v*Xv||`uozCDiRvd5Cb-?j94%;}VjdR&J!N!R;&b`H% zmV<?Co-K`iH;Q+aSA45N#+l}`tRFid?X-Jv=w3|mXI!S`kZ0=I(!ApOC15}1jG*=$ zK&EdibO+L<jA#b8BuX$Xevf`|Y|o`MWL!#PMz{<Ioe{qfRk6Cxa<k|be;LhkX_Won zflO~3Vh(|&rDjX+UCM5I#TDDiW!ti<QuZ@ub~E)s&02Q2<(C$+Y}R&w(q!MOonwOy zque|u3ovUQ$pRNf&WsF=ONrjIL^e`7Nf6Z>9X<$x3q&<Ey-JVA5@gdrVY)N288cG~ zsnD7_Rb^~}H*?ejE929#=yjDC26H+djiz)tI(JYqHWQ7{B_W&v8Z&m2*g~B=f9|Yg zsZUDS)T3i#Bj=@4=SIh*YR!@%og1_4KpL!P86B>>>g)oS*xf5tC^oMp_Ae{3`75!1 zU`b$z4MaCj#actCr%JJksjFIVw?O@t3P*>j&)PF8);dPrXKMYTjkT86TSLWKW2mc| zr1U4t&QVuPRp4mm-#xBMMAtQ4(pU?1qDZsTu{e=#q=-HjQ>Ub}5MLWUaafAIgw4%6 zu3Vk>4QZ+g-aRIiJl`NElkr#-j!;wIXaBT$XUd%H8R!mBf!rd|lu4*KNzCZ99FJ3c zP1EAk1wKSoC}#H5siYD~gStm<MM;u{q0XcpQ%&kOz$l^<BdMtdq23BRO=N}W)XP*= z+Mv$aNhlf?JqFoaM2%_+>2_0WkoY8Z!OmdzDAu)EgJMNCWy%9hy@{<UrEZod!W=;^ z>(_}MsZ_@igWb&fkiQ-nIvoDYAi5D&O*IuBCdPGBONNuWHg)LZzP>Q1ZW2A5kdxsl zVn(X5jNarN4Kg0OP?PEX5SU$2<16Ux0xCN?oULUSatD_KOMx<S?)CkHoNoV1hJXbW zKn<bg+e^3eL8%aw7V$=~aS<1H?<u2zyR(88hc?<fvY)Pniqe7X@ikX*-&<L3^<=S4 z$~LZEEOx%L-ne#gQ@F8dvcEGcuf6^3&HdRAvNzT~{5HNCFAKPJR~a!B^tD1UfEG`e zTadqT`SjB16>r|xQSf!-D(^<qo<;ZbP|Mdd*`{?l7wXH0`U;`GMem~b)pKuC8S${M zI(jDhbAhA3^#g)8FCHt1$8zGaA`4OswJ@*R^9rCWfHzxx(1E8o^aO|Q&*gD@0k`LH zdl8FIanlprbpP{Q=SO)wP{0E@JWv<saj1YpIUIt%I^B0qZ5m&B+T8V|xocg>H}@5q z`|`NIfctZ`*Vqe(a_2<viGK9B-!s(8KmH^%6ypB~Ie~`3c4!9WjX4;mYcRk%yXzDu zWpkPeN=#Sf1dMzn!e%lOq29{HQq2gcs32c6Du#GQi>cI;ly$gCOr`IGD0&-1Y%G38 zF90LG572AzNJ3LmadK2Y3M~7{7~cRY^Bl(&k$a)?6p?44@)S`^&i)ny4fm#&wIyw3 zIv?mN1iBWyMSt+#rRB&{Waa$or60rJh1cKv)y%gYDYPBQ`v(jD!39qd@pr{9gLi`W dJ$ckxK&?5{T14K3%2O75xI<;M6X}Cc*?)q{Y-|7k literal 2274 zcmZuxUu@Gx7(d77#QE1EXw!dmgaNApqm)h>ZB@!BowTithoOOJ(?ub6TNlUnY-goW zGDWD;B2<Y^LZV}AMAHULyzs~?dtz@fvV?UK(xhn*yhZ9Jp+4<9w@K>K^ZC2)yYJ6^ z_ucRAVKf>-&^k~3DXww|{Y`~>^KUWhJ_eyXNI(K3qp8i2nPNn=;H#Tf*gCg;6!8P_ zd<_3)o8mk^_4swQJ9;bv9@Um0a)R#xto*pK`i@n2k=d46aMu{T*N36IV&zaaJQa3% zEJw1@sVMN=GMZ`;n2RXke@#PO$ou;H6AZx%hN{3Aq+=>)N^+)=5ST$R5iQF4ILzKb zK~!KWAimus<V~gMGq)A9;M<{P3+x1%=`7*`u54eg5m;aZ<Sh?_R=NtTepK)kIe}e9 zG{OV0f86jX`UNa-yB}h~@68|&UV@*}VnD${0AljM9Y2Ijz7Y@|MtZ!+o8jh+5G?RN zqMvr`2MQc2a&xH2UV$Sh^560bzd0^4i|9JcE;0pF*%c}U&YKy7z;ai}2w@?zvnF7> zE#GFI-pVk@+}G4CxR-^>1=hQEF;GAYjonrvO`j%L2vnj?smTdZZ!E7w;RxVsxj@*I zB)onOewoIN0)YaJrnvqgkUMA&iZBx^GUhg$g$7?>yurWst#n*OzoUdt$KXylA(z#R zgpc_82M8~ynOs&>OoIX~9^V)`H<J9)5OpJ|m`W}=AsW|ARZD8RIyX2xFpvb*H=>@* zrnTgpXr{7h{TdkeYfBrUQCTv~jGEQP@`tD{Ez1r4sH|qvvN6`*G-`(hjdy{RQ1!s2 z&Hi-$x8Sd>Pk1XnY{!Qi)9YY`Hkj!R=KT$3M!F4q&HJWj@<-1qaZ%S*J+5XlIb9cp z_~N`Ii}9~>qP`?4bMenrWlo(KABju<Qm4o{RWV_=$IT^8%<oBSnk;3~rlcw-=oQa% zIdk^-P@;w4SxFHHraL06rfTpMsFFg0A79Ui8nq{!rb~)RqK2plDP1%)RWU>ocEx!y zEr>b^Q`IJK==8$t6kCK_oP``=&?QqOeo@J&f|v*rY>4tKVKb^sqMLP1!KMrq0&R&x z+Dz*dcO*zxOi@R&XG`h6QEtL@b2>v9(V)*`yxw$*Ptv;Mfb>3?rP&!*piU)J^X=oh z{_5<x&)?-Mdw+=Bi<G0UV%=+}tysd2CCcHNA9WqBAtv~qOUj=(k+xgsZ=PRkuV5>3 z#Eu-Py4?xKYRDfv;B@wsKXu%5etrxN);e&>1}U=N>F%wt5BXpCYGT-mkJ#}Mt9#_> zMXURx@??1uQUJH^cgmA*-ux48t09)_YLZucwAwQE^du1I7JtU(&s6y{PFqJg=)^k9 z;pX=SS}g$Hbc`S__!7rn;MnStg%8^JU=<&9F#i&_y})g&UsaEsvha|NhpKp}F>T?P zjbl|D`_GT|b=*F>Hf`-q*n1PDNibRdY|D50WqaR?_P$2}t9`(3AF%LA8=tJ!yU__H zzH#=%*+KMdFf_iOeKr~!?_mGv;DArG5}#@i)>twK*3#xY2?&y|q_ZO7Qz?p>REmUM zoGWGuR3wnTYEVNxM$a^)rFFoztMLQ00eys<mD9#G7kmU?1w6QKfP30Hg@xWq35CQ4 zKblpAoGgy%AAm@o6XRzfHI`u*2L(&+=b%u@{hXFPD|5Hho9f!U)zW9T^p(O+v~}h3 zt<=rb+86gO-%s96K05Zqw0cMF-cc)h+K!$sg&f2#^WU}JXk86isK-V<Rn+64Sk>Dd S)Lr%Vn!lGBtf9AwoB#jCmK4qa diff --git a/server/map/get_markers.py b/server/map/get_markers.py index 257314f3..17baa767 100644 --- a/server/map/get_markers.py +++ b/server/map/get_markers.py @@ -4,25 +4,43 @@ from bson import json_util current_dir = os.path.dirname(__file__) parent_dir = os.path.abspath(os.path.join(current_dir, '..')) sys.path.append(parent_dir) +import json # get_markers requests all marker data from mongoDB -def get_all_markers(self, col): +def get_all_markers(self, cursor): try: - # 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) - 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 = '[]' + + # Fetch all data + cursor.execute(''' + SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, m.Latitude, m.Longitude, + m.MeasuredThickness, m.Accuracy, s.SensorType, s.Active + FROM Measurement m + INNER JOIN Sensor s ON m.SensorID = s.SensorID + ''') + + rows = cursor.fetchall() + + data = [] + for row in rows: + measurement = { + 'MeasurementID': row[0], + 'TimeMeasured': row[1], + 'Latitude': row[2], + 'Longitude': row[3], + 'MeasuredThickness': row[4], + 'Accuracy': row[5], + 'Sensor': { + 'SensorID': row[6], + 'SensorType': row[7], + 'Active': bool(row[8]) + } + } + data.append(measurement) + + resp_code = 200 + # Convert the list of dictionaries to JSON + marker_json = json.dumps(data, indent=4) except Exception as e: print(f"An error occurred while querying MongoDB: {e}") -- GitLab