Skip to content

Commit 8461b4a

Browse files
committed
feat(models blueprint & test): New blueprint models, json schema, test
1 parent 9bcd51b commit 8461b4a

File tree

6 files changed

+138
-0
lines changed

6 files changed

+138
-0
lines changed

app.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from werkzeug.exceptions import HTTPException
88

99
from src.opengeodeweb_back.routes import blueprint_routes
10+
from src.opengeodeweb_back.routes.models import blueprint_models
1011
from src.opengeodeweb_back.utils_functions import handle_exception
1112
from src.opengeodeweb_back import app_config
1213

@@ -34,6 +35,12 @@
3435
name="blueprint_routes",
3536
)
3637

38+
app.register_blueprint(
39+
blueprint_models.routes,
40+
url_prefix="/models",
41+
name="blueprint_models",
42+
)
43+
3744

3845
@app.errorhandler(HTTPException)
3946
def errorhandler(e):

output.og_tsf3d

10.3 KB
Binary file not shown.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import json
2+
import os
3+
import xml.etree.ElementTree as ET
4+
import flask
5+
6+
from src.opengeodeweb_back import geode_functions, utils_functions
7+
8+
routes = flask.Blueprint("models", __name__)
9+
10+
11+
@routes.before_request
12+
def before_request():
13+
if "ping" not in flask.request.path:
14+
utils_functions.increment_request_counter(flask.current_app)
15+
16+
17+
@routes.teardown_request
18+
def teardown_request(exception):
19+
if "ping" not in flask.request.path:
20+
utils_functions.decrement_request_counter(flask.current_app)
21+
utils_functions.update_last_request_time(flask.current_app)
22+
23+
24+
schemas = os.path.join(os.path.dirname(__file__), "schemas")
25+
26+
with open(os.path.join(schemas, "components.json"), "r") as file:
27+
components_json = json.load(file)
28+
29+
30+
@routes.route(components_json["route"], methods=components_json["methods"])
31+
def print_vtm_file():
32+
utils_functions.validate_request(flask.request, components_json)
33+
vtm_file_path = os.path.join(
34+
flask.current_app.config["DATA_FOLDER_PATH"], flask.request.json["id"] + ".vtm"
35+
)
36+
37+
tree = ET.parse(vtm_file_path)
38+
root = tree.getroot()
39+
uuid_to_flat_index = {}
40+
current_index = 1
41+
42+
for elem in root.iter():
43+
if "uuid" in elem.attrib and elem.tag == "DataSet":
44+
uuid_to_flat_index[elem.attrib["uuid"]] = current_index
45+
current_index += 1
46+
47+
print(f"{uuid_to_flat_index=}", flush=True)
48+
49+
return flask.make_response(
50+
{"uuid_to_flat_index": uuid_to_flat_index},
51+
200,
52+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"route": "/components",
3+
"methods": [
4+
"POST"
5+
],
6+
"type": "object",
7+
"properties": {
8+
"id": {
9+
"type": "string"
10+
}
11+
},
12+
"required": [
13+
"id"
14+
],
15+
"additionalProperties": false
16+
}

tests/data/cube.vtm

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?xml version="1.0"?>
2+
<VTKFile type="vtkMultiBlockDataSet" version="1.0" byte_order="LittleEndian" header_type="UInt32" compressor="vtkZLibDataCompressor">
3+
<vtkMultiBlockDataSet>
4+
<Block name="corners" index="0">
5+
<DataSet index="0" name="default_name" uuid="00000000-3bf3-4551-8000-000064de2fdd" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-3bf3-4551-8000-000064de2fdd.vtp" />
6+
<DataSet index="1" name="default_name" uuid="00000000-4629-412b-8000-0000edfff497" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-4629-412b-8000-0000edfff497.vtp" />
7+
<DataSet index="2" name="default_name" uuid="00000000-7dc7-495b-8000-000052017dae" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-7dc7-495b-8000-000052017dae.vtp" />
8+
<DataSet index="3" name="default_name" uuid="00000000-8a73-4f55-8000-00002bf05d8e" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-8a73-4f55-8000-00002bf05d8e.vtp" />
9+
<DataSet index="4" name="default_name" uuid="00000000-96bd-4157-8000-0000213ddb29" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-96bd-4157-8000-0000213ddb29.vtp" />
10+
<DataSet index="5" name="default_name" uuid="00000000-ecd6-40de-8000-0000f7ed1e32" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-ecd6-40de-8000-0000f7ed1e32.vtp" />
11+
<DataSet index="6" name="default_name" uuid="00000000-f9e9-4ddd-8000-0000f19cf8cb" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-f9e9-4ddd-8000-0000f19cf8cb.vtp" />
12+
<DataSet index="7" name="default_name" uuid="00000000-fc1e-4e5f-8000-00000af3f679" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Corner_00000000-fc1e-4e5f-8000-00000af3f679.vtp" />
13+
</Block>
14+
<Block name="lines" index="1">
15+
<DataSet index="0" name="default_name" uuid="00000000-15ab-453c-8000-0000beee33c6" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-15ab-453c-8000-0000beee33c6.vtp" />
16+
<DataSet index="1" name="default_name" uuid="00000000-1bd9-41e4-8000-000055e171a2" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-1bd9-41e4-8000-000055e171a2.vtp" />
17+
<DataSet index="2" name="default_name" uuid="00000000-2326-4c21-8000-000054a373c7" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-2326-4c21-8000-000054a373c7.vtp" />
18+
<DataSet index="3" name="default_name" uuid="00000000-304e-44a7-8000-0000c72260c1" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-304e-44a7-8000-0000c72260c1.vtp" />
19+
<DataSet index="4" name="default_name" uuid="00000000-4755-4dfa-8000-000055999885" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-4755-4dfa-8000-000055999885.vtp" />
20+
<DataSet index="5" name="default_name" uuid="00000000-57cf-41f4-8000-00006a4349dc" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-57cf-41f4-8000-00006a4349dc.vtp" />
21+
<DataSet index="6" name="default_name" uuid="00000000-5a6b-45b2-8000-000004be554e" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-5a6b-45b2-8000-000004be554e.vtp" />
22+
<DataSet index="7" name="default_name" uuid="00000000-93f2-437a-8000-00001b2727be" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-93f2-437a-8000-00001b2727be.vtp" />
23+
<DataSet index="8" name="default_name" uuid="00000000-98f6-4012-8000-0000eb927a96" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-98f6-4012-8000-0000eb927a96.vtp" />
24+
<DataSet index="9" name="default_name" uuid="00000000-9ca0-4e51-8000-00005b81d027" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-9ca0-4e51-8000-00005b81d027.vtp" />
25+
<DataSet index="10" name="default_name" uuid="00000000-d720-47c9-8000-0000e54053cc" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-d720-47c9-8000-0000e54053cc.vtp" />
26+
<DataSet index="11" name="default_name" uuid="00000000-f3ec-4765-8000-0000d74e506d" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Line_00000000-f3ec-4765-8000-0000d74e506d.vtp" />
27+
</Block>
28+
<Block name="surfaces" index="2">
29+
<DataSet index="0" name="default_name" uuid="00000000-1702-4d26-8000-000004d7ea39" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Surface_00000000-1702-4d26-8000-000004d7ea39.vtp" />
30+
<DataSet index="1" name="default_name" uuid="00000000-6732-4f29-8000-00002f66bc93" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Surface_00000000-6732-4f29-8000-00002f66bc93.vtp" />
31+
<DataSet index="2" name="default_name" uuid="00000000-8afd-4969-8000-000092a43747" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Surface_00000000-8afd-4969-8000-000092a43747.vtp" />
32+
<DataSet index="3" name="default_name" uuid="00000000-cddf-4c1c-8000-00005ebbcaeb" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Surface_00000000-cddf-4c1c-8000-00005ebbcaeb.vtp" />
33+
<DataSet index="4" name="default_name" uuid="00000000-dc1c-420d-8000-000070dcfff5" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Surface_00000000-dc1c-420d-8000-000070dcfff5.vtp" />
34+
<DataSet index="5" name="default_name" uuid="00000000-dcfe-400a-8000-0000a72c4f30" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Surface_00000000-dcfe-400a-8000-0000a72c4f30.vtp" />
35+
</Block>
36+
<Block name="blocks" index="3">
37+
<DataSet index="0" file="b11b028cbe4c4e7c9d27279e52ea5eb2/Block_00000000-4335-411d-8000-000079b34fe5.vtu" name="default_name" uuid="00000000-4335-411d-8000-000079b34fe5" />
38+
</Block>
39+
</vtkMultiBlockDataSet>
40+
</VTKFile>

tests/test_models_routes.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import os
2+
3+
from werkzeug.datastructures import FileStorage
4+
5+
from src.opengeodeweb_back import geode_functions, geode_objects, test_utils
6+
7+
8+
def test_model_components(client):
9+
route = f"/models/components"
10+
get_full_data = lambda: {"id": "cube"}
11+
json = get_full_data()
12+
response = client.post(route, json=json)
13+
assert response.status_code == 200
14+
uuid_dict = response.json["uuid_to_flat_index"]
15+
assert type(uuid_dict) is dict
16+
17+
indices = list(uuid_dict.values())
18+
indices.sort()
19+
assert indices[0] == 1
20+
assert all(indices[i] == indices[i - 1] + 1 for i in range(1, len(indices)))
21+
22+
# Test all params
23+
test_utils.test_route_wrong_params(client, route, get_full_data)

0 commit comments

Comments
 (0)