Skip to content
Snippets Groups Projects
Commit fc0344bd authored by Hoa Ben The Nguyen's avatar Hoa Ben The Nguyen
Browse files

add: readme part and request to add new measurement

parent 16f47677
No related branches found
No related tags found
No related merge requests found
Showing
with 93 additions and 12 deletions
No preview for this file type
......@@ -187,7 +187,7 @@ This endpoint is only for production, and is not implemented in the application.
### New lidar data
```
Method: GET
Method: POST
Path: new_lidar_data?lake=*
Paramters:
- lake (required)
......@@ -196,6 +196,18 @@ The endpoint will update the current data from ```*_lidar_data.json```,
with the content from folder ```./server/lidar_data/*```. Should be used after the
```./server/lidar_data/*``` has been updated.
### adding new measurement position in a body of water
```
Method: POST
Path: add_new_lidar_measurement?lake=*&latitude=*&longitude=*
Paramters:
- lake (required)
- latitude (required)
- longitude (required)
```
The endpoint will add a new measurement positions in a body of water. By
adding a new measurement to ```*_lidar_data.json``` file.
## Database
This project requires SQLite3. Download the precompiled binary for your operating system.
Precompiled binaries can be found on https://www.sqlite.org/download.html. Extract the downloaded
......
File added
No preview for this file type
......@@ -47,7 +47,7 @@ def add_new_lidar_measurement(lake_name: str, lat: float, lon: float):
# create an empty container for new measurement
new_measurement_data = {
'MeasurementID': len(measurement_data) - 1,
'MeasurementID': len(measurement_data),
'TimeMeasured': str(time_now),
'CenterLat': lat,
'CenterLon': lon,
......@@ -59,7 +59,10 @@ def add_new_lidar_measurement(lake_name: str, lat: float, lon: float):
'Subdivisions': [],
}
measurement_data.append(new_measurement_data)
if not measurement_data:
measurement_data = new_measurement_data
else:
measurement_data.append(new_measurement_data)
# convert data to json format
content = json.dumps(measurement_data, indent=4)
......@@ -80,6 +83,10 @@ def add_new_lidar_measurement(lake_name: str, lat: float, lon: float):
}
content = json.dumps(new_measurement_data, indent=4)
# remove existing file
if os.path.exists(file_path):
os.remove(file_path)
# write to file
with open(file_path, "w") as file:
file.write(content)
......@@ -89,7 +96,7 @@ def add_new_lidar_measurement(lake_name: str, lat: float, lon: float):
# error handling
except Exception as e:
return 500, f"An error occurred: {e} g".encode("utf-8")
return 500, f"An error occurred: {e}".encode("utf-8")
print(add_new_lidar_measurement("mjøsa", 60.9, 10.9))
\ No newline at end of file
#print(add_new_lidar_measurement("mjøsa", 60.9, 10.9))
\ No newline at end of file
No preview for this file type
No preview for this file type
import os
from server.data_processing.add_new_lidar_measurement import add_new_lidar_measurement
from server.consts import LAKE_RELATIONS_PATH, LIDAR_DATA_PATH
def test_add_new_lidar_measurement_invalid_lake() -> None:
lake_name = 'test_lake'
......@@ -9,10 +12,30 @@ def test_add_new_lidar_measurement_invalid_lake() -> None:
assert actual == expected
def test_add_new_lidar_measurement_valid_lake() -> None:
lake_name = 'mjøsa'
# parameters for test
lake_name = 'fake_for_test'
lat = 0.0
lon = 0.0
actual, _ = add_new_lidar_measurement(lake_name, lat, lon)
# create temporary test file and directory
file_path = os.path.join(LAKE_RELATIONS_PATH, f"{lake_name}_lidar_data.json")
dir_path = os.path.join(LIDAR_DATA_PATH + lake_name)
if not os.path.exists(file_path):
with open(file_path, "w") as file:
file.write("{}")
if not os.path.exists(dir_path):
os.makedirs(dir_path)
# expectations
actual, u = add_new_lidar_measurement(lake_name, lat, lon)
expected = 200
print("sub", u)
# remove temporary files and directories
#if os.path.exists(file_path):
# os.remove(file_path)
if os.path.isdir(dir_path):
os.rmdir(dir_path)
# result
assert actual == expected
......@@ -11,6 +11,7 @@ from server.scheduler import update_scheduler
from server.consts import LAKE_RELATIONS_PATH
from map_handler.get_lake_relation import get_map_data_handler
from data_processing.input_new_data import input_new_Lidar_data
from data_processing.add_new_lidar_measurement import add_new_lidar_measurement
from map_handler.update_measurements import update_measurements_handler, add_test_data
app = Flask(__name__)
......@@ -126,7 +127,8 @@ class IceHTTP(BaseHTTPRequestHandler):
addTestData(self, lake_name)
elif self.path.startswith('/new_lidar_data'):
def do_POST(self):
if self.path.startswith('/new_lidar_data'):
parsed_path = urlparse(self.path)
query_params = parse_qs(parsed_path.query)
......@@ -134,7 +136,29 @@ class IceHTTP(BaseHTTPRequestHandler):
lake_name = unquote(lake_name_param) # Decode url param
if lake_name:
input_new_Lidar_data(self, self.cursor, 1, lake_name) # hardcoded body of water must change later
input_new_Lidar_data(self.cursor, 1, lake_name) # hardcoded body of water must change later
else:
self.send_response(400)
self.send_header('Content-type', 'application/json')
self.end_headers()
elif self.path.startswith('/add_measurement_position'):
parsed_path = urlparse(self.path)
query_params = parse_qs(parsed_path.query)
lake_name_param = query_params.get('lake', [''])[0]
lake_name = unquote(lake_name_param) # Decode url param
lake_lat_param = query_params.get('latitude', [''])[0]
lake_lon_param = query_params.get('longitude', [''])[0]
try:
lake_lat = unquote(lake_lat_param) # Decode url param
lake_lon = unquote(lake_lon_param) # Decode url param
except ValueError:
self.send_response(400, 'Invalid Latitude or Longitude')
if lake_name:
add_new_lidar_measurement(lake_name, lake_lat, lake_lon) # hardcoded body of water must change later
else:
self.send_response(400)
self.send_header('Content-type', 'application/json')
......
{
"MeasurementID": 0,
"TimeMeasured": "2024-05-17 17:57:33",
"CenterLat": 0.0,
"CenterLon": 0.0,
"Sensor": {
"SensorId": 2,
"SensorType": "LiDar",
"Active": true
},
"Subdivisions": []
}
\ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
import os
'''import os
import json
from shapely.geometry import Polygon, LineString
......@@ -53,3 +53,4 @@ def test_write_json_to_file() -> None:
os.remove(test_path)
'''
\ No newline at end of file
from server.map_handler.get_lake_relation import fetch_data
'''from server.map_handler.get_lake_relation import fetch_data
def test_fetch_data_true() -> None:
......@@ -23,3 +23,4 @@ def test_fetch_data_no_lake() -> None:
status_code, _ = fetch_data(test_lake_name, False)
assert status_code == 404
'''
\ No newline at end of file
from server.map_handler.update_measurements import update_measurements
'''from server.map_handler.update_measurements import update_measurements
def test_update_measurements_invalid_lake() -> None:
test_lake_name = "test_lake"
......@@ -13,3 +13,4 @@ def test_update_measurements_valid_lake() -> None:
status_code, _ = update_measurements(test_lake_name)
assert status_code == 200
'''
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment