Skip to content

Commit 50cf43d

Browse files
committed
Fix tests & other
1 parent d8c3382 commit 50cf43d

File tree

12 files changed

+506
-87
lines changed

12 files changed

+506
-87
lines changed

requirements-internal.txt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.12
3+
# by the following command:
4+
#
5+
# pip-compile --cert=None --client-cert=None --index-url=None --pip-args=None requirements-internal.in
6+
#
7+
blinker==1.9.0
8+
# via
9+
# flask
10+
# opengeodeweb-microservice
11+
click==8.3.0
12+
# via
13+
# flask
14+
# opengeodeweb-microservice
15+
fastjsonschema==2.21.1
16+
# via opengeodeweb-microservice
17+
flask==3.1.2
18+
# via
19+
# flask-sqlalchemy
20+
# opengeodeweb-microservice
21+
flask-sqlalchemy==3.1.1
22+
# via opengeodeweb-microservice
23+
greenlet==3.2.4
24+
# via
25+
# opengeodeweb-microservice
26+
# sqlalchemy
27+
itsdangerous==2.2.0
28+
# via
29+
# flask
30+
# opengeodeweb-microservice
31+
jinja2==3.1.6
32+
# via
33+
# flask
34+
# opengeodeweb-microservice
35+
markupsafe==3.0.3
36+
# via
37+
# flask
38+
# jinja2
39+
# opengeodeweb-microservice
40+
# werkzeug
41+
opengeodeweb-microservice==1.0.3
42+
# via -r requirements-internal.in
43+
sqlalchemy==2.0.43
44+
# via
45+
# flask-sqlalchemy
46+
# opengeodeweb-microservice
47+
typing-extensions==4.15.0
48+
# via
49+
# opengeodeweb-microservice
50+
# sqlalchemy
51+
werkzeug==3.1.3
52+
# via
53+
# flask
54+
# opengeodeweb-microservice

requirements.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ geode-viewables==3.3.0
88
flask[async]==3.1.2
99
flask-cors==6.0.1
1010
werkzeug==3.1.2
11-
flask-sqlalchemy==3.1.1
11+
flask-sqlalchemy==3.1.1

requirements.txt

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,39 @@
22
# This file is autogenerated by pip-compile with Python 3.12
33
# by the following command:
44
#
5-
# pip-compile --output-file=./requirements.txt --pre ./requirements-internal.in ./requirements.in
5+
# pip-compile --cert=None --client-cert=None --index-url=None --pip-args=None requirements.in
66
#
7-
asgiref~=3.10
7+
asgiref==3.10.0
88
# via flask
9-
blinker~=1.9
10-
# via
11-
# flask
12-
# opengeodeweb-microservice
13-
click~=8.3
14-
# via
15-
# flask
16-
# opengeodeweb-microservice
17-
fastjsonschema~=2.21
18-
# via opengeodeweb-microservice
19-
flask[async]~=3.1
9+
blinker==1.9.0
10+
# via flask
11+
click==8.3.0
12+
# via flask
13+
flask[async]==3.1.2
2014
# via
2115
# -r requirements.in
2216
# flask-cors
2317
# flask-sqlalchemy
24-
# opengeodeweb-microservice
2518
flask-cors==6.0.1
2619
# via -r requirements.in
2720
flask-sqlalchemy==3.1.1
28-
# via
29-
# -r requirements.in
30-
# opengeodeweb-microservice
21+
# via -r requirements.in
3122
geode-common==33.11.0
3223
# via
3324
# -r requirements.in
3425
# geode-viewables
3526
geode-viewables==3.3.0
3627
# via -r requirements.in
37-
greenlet~=3.2
38-
# via
39-
# opengeodeweb-microservice
40-
# sqlalchemy
41-
itsdangerous~=2.2
42-
# via
43-
# flask
44-
# opengeodeweb-microservice
45-
jinja2~=3.1
46-
# via
47-
# flask
48-
# opengeodeweb-microservice
49-
markupsafe~=3.0
28+
greenlet==3.2.4
29+
# via sqlalchemy
30+
itsdangerous==2.2.0
31+
# via flask
32+
jinja2==3.1.6
33+
# via flask
34+
markupsafe==3.0.3
5035
# via
5136
# flask
5237
# jinja2
53-
# opengeodeweb-microservice
5438
# werkzeug
5539
opengeode-core==15.27.4
5640
# via
@@ -75,19 +59,12 @@ opengeode-io==7.4.0
7559
# -r requirements.in
7660
# geode-viewables
7761
# opengeode-geosciencesio
78-
opengeodeweb-microservice~=1.0,>=1.0.3
79-
# via -r requirements-internal.in
80-
sqlalchemy~=2.0
81-
# via
82-
# flask-sqlalchemy
83-
# opengeodeweb-microservice
84-
typing-extensions~=4.15
85-
# via
86-
# opengeodeweb-microservice
87-
# sqlalchemy
62+
sqlalchemy==2.0.43
63+
# via flask-sqlalchemy
64+
typing-extensions==4.15.0
65+
# via sqlalchemy
8866
werkzeug==3.1.2
8967
# via
9068
# -r requirements.in
9169
# flask
9270
# flask-cors
93-
# opengeodeweb-microservice

src/opengeodeweb_back/app.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from opengeodeweb_back import utils_functions, app_config
1515
from opengeodeweb_back.routes import blueprint_routes
1616
from opengeodeweb_back.routes.models import blueprint_models
17+
from opengeodeweb_back.routes.create import blueprint_create
1718
from opengeodeweb_microservice.database.connection import init_database
1819

1920

@@ -51,6 +52,12 @@
5152
name="opengeodeweb_models",
5253
)
5354

55+
app.register_blueprint(
56+
blueprint_create.routes,
57+
url_prefix="/opengeodeweb_back/create",
58+
name="opengeodeweb_create",
59+
)
60+
5461
if FLASK_DEBUG == False:
5562
utils_functions.set_interval(
5663
utils_functions.kill_task, SECONDS_BETWEEN_SHUTDOWNS, app

src/opengeodeweb_back/routes/blueprint_routes.py

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
# Local application imports
1212
from .. import geode_functions, utils_functions
13-
13+
from opengeodeweb_microservice.database.data import Data
14+
from opengeodeweb_microservice.database.connection import get_session
1415
from .models import blueprint_models
1516

1617
routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back")
@@ -257,31 +258,6 @@ def save_viewable_file():
257258
200,
258259
)
259260

260-
261-
with open(os.path.join(schemas, "create_point.json"), "r") as file:
262-
create_point_json = json.load(file)
263-
264-
265-
@routes.route(create_point_json["route"], methods=create_point_json["methods"])
266-
def create_point():
267-
utils_functions.validate_request(flask.request, create_point_json)
268-
title = flask.request.get_json()["title"]
269-
x = flask.request.get_json()["x"]
270-
y = flask.request.get_json()["y"]
271-
z = flask.request.get_json()["z"]
272-
class_ = geode_functions.geode_object_class("PointSet3D")
273-
PointSet3D = class_.create()
274-
builder = geode_functions.create_builder("PointSet3D", PointSet3D)
275-
builder.create_point(opengeode.Point3D([x, y, z]))
276-
builder.set_name(title)
277-
return flask.make_response(
278-
utils_functions.generate_native_viewable_and_light_viewable_from_object(
279-
"PointSet3D", PointSet3D
280-
),
281-
200,
282-
)
283-
284-
285261
with open(os.path.join(schemas, "texture_coordinates.json"), "r") as file:
286262
texture_coordinates_json = json.load(file)
287263

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# Standard library imports
2+
import json
3+
import os
4+
import uuid
5+
6+
# Third party imports
7+
import flask
8+
import opengeode
9+
import werkzeug
10+
11+
# Local application imports
12+
from opengeodeweb_back import geode_functions, utils_functions
13+
from opengeodeweb_microservice.database.data import Data
14+
from opengeodeweb_microservice.database.connection import get_session
15+
from opengeodeweb_back.utils_functions import save_all_viewables_and_return_info
16+
17+
routes = flask.Blueprint("create", __name__, url_prefix="/opengeodeweb_back/create")
18+
19+
schemas = os.path.join(os.path.dirname(__file__), "schemas")
20+
21+
# Load schema for point creation
22+
with open(os.path.join(schemas, "create_point.json"), "r") as file:
23+
create_point_json = json.load(file)
24+
25+
@routes.route(
26+
create_point_json["route"],
27+
methods=create_point_json["methods"]
28+
)
29+
def create_point():
30+
"""Endpoint to create a single point in 3D space."""
31+
print(f"create_point : {flask.request=}", flush=True)
32+
33+
utils_functions.validate_request(flask.request, create_point_json)
34+
35+
# Extract data from request
36+
title = flask.request.json["title"]
37+
x = flask.request.json["x"]
38+
y = flask.request.json["y"]
39+
z = flask.request.json["z"]
40+
41+
# Create the point set
42+
class_ = geode_functions.geode_object_class("PointSet3D")
43+
point_set = class_.create()
44+
builder = geode_functions.create_builder("PointSet3D", point_set)
45+
builder.create_point(opengeode.Point3D([x, y, z]))
46+
builder.set_name(title)
47+
48+
# Save and get info
49+
result = save_all_viewables_and_return_info(
50+
geode_object="PointSet3D",
51+
data=point_set,
52+
input_file=None,
53+
additional_files=[]
54+
)
55+
56+
# Prepare response with the title
57+
response = {
58+
"viewable_file_name": result["viewable_file_name"],
59+
"id": result["id"],
60+
"name": title,
61+
"native_file_name": result["native_file_name"],
62+
"object_type": result["object_type"],
63+
"geode_object": result["geode_object"],
64+
}
65+
66+
# Add binary_light_viewable if it exists
67+
if "binary_light_viewable" in result:
68+
response["binary_light_viewable"] = result["binary_light_viewable"]
69+
70+
return flask.make_response(response, 200)
71+
72+
73+
# Load schema for AOI creation
74+
with open(os.path.join(schemas, "create_aoi.json"), "r") as file:
75+
create_aoi_json = json.load(file)
76+
77+
@routes.route(
78+
create_aoi_json["route"],
79+
methods=create_aoi_json["methods"]
80+
)
81+
def create_aoi():
82+
"""Endpoint to create an Area of Interest (AOI) as an EdgedCurve3D."""
83+
print(f"create_aoi : {flask.request=}", flush=True)
84+
85+
utils_functions.validate_request(flask.request, create_aoi_json)
86+
87+
# Extract data from request
88+
name = flask.request.json["name"]
89+
points = flask.request.json["points"]
90+
z = flask.request.json["z"]
91+
92+
# Create the edged curve
93+
class_ = geode_functions.geode_object_class("EdgedCurve3D")
94+
edged_curve = class_.create()
95+
builder = geode_functions.create_builder("EdgedCurve3D", edged_curve)
96+
builder.set_name(name)
97+
98+
# Create vertices first
99+
vertex_indices = []
100+
for point in points:
101+
vertex_id = builder.create_point(opengeode.Point3D([point["x"], point["y"], z]))
102+
vertex_indices.append(vertex_id)
103+
104+
# Create edges between consecutive vertices and close the loop
105+
num_vertices = len(vertex_indices)
106+
for i in range(num_vertices):
107+
edge_id = builder.create_edge()
108+
next_i = (i + 1) % num_vertices # Wrap around to close the loop
109+
builder.set_edge_vertex(
110+
opengeode.EdgeVertex(edge_id, 0), vertex_indices[i]
111+
)
112+
builder.set_edge_vertex(
113+
opengeode.EdgeVertex(edge_id, 1), vertex_indices[next_i]
114+
)
115+
116+
# Save and get info
117+
result = save_all_viewables_and_return_info(
118+
geode_object="EdgedCurve3D",
119+
data=edged_curve,
120+
input_file=None,
121+
additional_files=[]
122+
)
123+
124+
# Prepare response
125+
response = {
126+
"viewable_file_name": result["viewable_file_name"],
127+
"id": result["id"],
128+
"name": name,
129+
"native_file_name": result["native_file_name"],
130+
"object_type": result["object_type"],
131+
"geode_object": result["geode_object"],
132+
}
133+
134+
# Add binary_light_viewable if it exists
135+
if "binary_light_viewable" in result:
136+
response["binary_light_viewable"] = result["binary_light_viewable"]
137+
138+
return flask.make_response(response, 200)

0 commit comments

Comments
 (0)