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