OpenGeodeWeb-Back 5.10.1__tar.gz → 5.10.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of OpenGeodeWeb-Back might be problematic. Click here for more details.

Files changed (44) hide show
  1. {opengeodeweb_back-5.10.1/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-5.10.3}/PKG-INFO +11 -16
  2. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/pyproject.toml +4 -2
  3. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/requirements.txt +16 -46
  4. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO +11 -16
  5. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +3 -0
  6. opengeodeweb_back-5.10.3/src/OpenGeodeWeb_Back.egg-info/entry_points.txt +2 -0
  7. opengeodeweb_back-5.10.3/src/OpenGeodeWeb_Back.egg-info/requires.txt +17 -0
  8. opengeodeweb_back-5.10.3/src/opengeodeweb_back/app.py +157 -0
  9. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/app_config.py +1 -10
  10. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/blueprint_routes.py +14 -0
  11. opengeodeweb_back-5.10.3/src/opengeodeweb_back/routes/schemas/kill.json +10 -0
  12. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/utils_functions.py +4 -7
  13. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/tests/test_geode_functions.py +1 -1
  14. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/tests/test_models_routes.py +3 -3
  15. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/tests/test_routes.py +16 -14
  16. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/tests/test_utils_functions.py +1 -1
  17. opengeodeweb_back-5.10.1/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -22
  18. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/LICENSE +0 -0
  19. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/README.md +0 -0
  20. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/setup.cfg +0 -0
  21. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
  22. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
  23. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/__init__.py +0 -0
  24. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/geode_functions.py +0 -0
  25. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/geode_objects.py +0 -0
  26. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/py.typed +0 -0
  27. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/models/blueprint_models.py +0 -0
  28. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/models/schemas/mesh_components.json +0 -0
  29. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/models/schemas/vtm_component_indices.json +0 -0
  30. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
  31. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
  32. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/create_point.json +0 -0
  33. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
  34. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
  35. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/inspect_file.json +0 -0
  36. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
  37. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
  38. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
  39. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
  40. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
  41. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
  42. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
  43. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
  44. {opengeodeweb_back-5.10.1 → opengeodeweb_back-5.10.3}/src/opengeodeweb_back/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 5.10.1
3
+ Version: 5.10.3
4
4
  Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
@@ -11,28 +11,23 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: <3.13,>=3.9
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: asgiref~=3.9
15
- Requires-Dist: blinker~=1.9
16
- Requires-Dist: click~=8.3
17
- Requires-Dist: fastjsonschema~=2.21
18
- Requires-Dist: flask[async]~=3.0
19
- Requires-Dist: flask-cors~=6.0
20
- Requires-Dist: flask-sqlalchemy~=3.1
14
+ Requires-Dist: asgiref>=3
15
+ Requires-Dist: blinker>=1
16
+ Requires-Dist: click>=8
17
+ Requires-Dist: flask[async]>=3
18
+ Requires-Dist: flask-cors==6.0.1
21
19
  Requires-Dist: geode-common==33.11.0
22
20
  Requires-Dist: geode-viewables==3.3.0
23
- Requires-Dist: greenlet~=3.2
24
- Requires-Dist: itsdangerous~=2.2
25
- Requires-Dist: jinja2~=3.1
26
- Requires-Dist: markupsafe~=3.0
21
+ Requires-Dist: itsdangerous>=2
22
+ Requires-Dist: jinja2>=3
23
+ Requires-Dist: markupsafe>=3
27
24
  Requires-Dist: opengeode-core==15.27.4
28
25
  Requires-Dist: opengeode-geosciences==9.4.1
29
26
  Requires-Dist: opengeode-geosciencesio==5.8.0
30
27
  Requires-Dist: opengeode-inspector==6.8.1
31
28
  Requires-Dist: opengeode-io==7.4.0
32
- Requires-Dist: opengeodeweb-microservice>=1.0.1,~=1.0
33
- Requires-Dist: sqlalchemy~=2.0
34
- Requires-Dist: typing-extensions~=4.15
35
- Requires-Dist: werkzeug==3.0.3
29
+ Requires-Dist: werkzeug==3.1.2
30
+ Requires-Dist: opengeodeweb-microservice==1.*,>=1.0.4rc9
36
31
  Dynamic: license-file
37
32
 
38
33
  <h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
@@ -2,10 +2,9 @@
2
2
  requires = ["setuptools"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
-
6
5
  [project]
7
6
  name = "OpenGeodeWeb-Back"
8
- version = "5.10.1"
7
+ version = "5.10.3"
9
8
  dynamic = ["dependencies"]
10
9
  authors = [{ name = "Geode-solutions", email = "team-web@geode-solutions.com" }]
11
10
  description = "OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem"
@@ -21,6 +20,9 @@ classifiers = [
21
20
  "Homepage" = "https://github.com/Geode-solutions/OpenGeodeWeb-Back"
22
21
  "Bug Tracker" = "https://github.com/Geode-solutions/OpenGeodeWeb-Back/issues"
23
22
 
23
+ [project.scripts]
24
+ opengeodeweb-back = "opengeodeweb_back.app:run_server"
25
+
24
26
  [tool.setuptools.dynamic]
25
27
  dependencies = { file = ["requirements.txt"] }
26
28
 
@@ -2,55 +2,34 @@
2
2
  # This file is autogenerated by pip-compile with Python 3.12
3
3
  # by the following command:
4
4
  #
5
- # pip-compile --output-file=./requirements.txt ./requirements-internal.in ./requirements.in
5
+ # pip-compile --output-file=./requirements.txt ./requirements.in
6
6
  #
7
- asgiref~=3.9
7
+ asgiref>=3
8
8
  # 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.0
9
+ blinker>=1
10
+ # via flask
11
+ click>=8
12
+ # via flask
13
+ flask[async]>=3
20
14
  # via
21
15
  # -r requirements.in
22
- # flask
23
16
  # flask-cors
24
- # flask-sqlalchemy
25
- # opengeodeweb-microservice
26
- flask-cors~=6.0
17
+ flask-cors==6.0.1
27
18
  # via -r requirements.in
28
- flask-sqlalchemy~=3.1
29
- # via
30
- # -r requirements.in
31
- # opengeodeweb-microservice
32
19
  geode-common==33.11.0
33
20
  # via
34
21
  # -r requirements.in
35
22
  # geode-viewables
36
23
  geode-viewables==3.3.0
37
24
  # via -r requirements.in
38
- greenlet~=3.2
39
- # via
40
- # opengeodeweb-microservice
41
- # sqlalchemy
42
- itsdangerous~=2.2
43
- # via
44
- # flask
45
- # opengeodeweb-microservice
46
- jinja2~=3.1
25
+ itsdangerous>=2
26
+ # via flask
27
+ jinja2>=3
28
+ # via flask
29
+ markupsafe>=3
47
30
  # via
48
31
  # flask
49
- # opengeodeweb-microservice
50
- markupsafe~=3.0
51
- # via
52
32
  # jinja2
53
- # opengeodeweb-microservice
54
33
  # werkzeug
55
34
  opengeode-core==15.27.4
56
35
  # via
@@ -75,19 +54,10 @@ opengeode-io==7.4.0
75
54
  # -r requirements.in
76
55
  # geode-viewables
77
56
  # opengeode-geosciencesio
78
- opengeodeweb-microservice~=1.0,>=1.0.1
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
88
- werkzeug==3.0.3
57
+ werkzeug==3.1.2
89
58
  # via
90
59
  # -r requirements.in
91
60
  # flask
92
61
  # flask-cors
93
- # opengeodeweb-microservice
62
+
63
+ opengeodeweb-microservice==1.*,>=1.0.4rc9
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 5.10.1
3
+ Version: 5.10.3
4
4
  Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
@@ -11,28 +11,23 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: <3.13,>=3.9
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: asgiref~=3.9
15
- Requires-Dist: blinker~=1.9
16
- Requires-Dist: click~=8.3
17
- Requires-Dist: fastjsonschema~=2.21
18
- Requires-Dist: flask[async]~=3.0
19
- Requires-Dist: flask-cors~=6.0
20
- Requires-Dist: flask-sqlalchemy~=3.1
14
+ Requires-Dist: asgiref>=3
15
+ Requires-Dist: blinker>=1
16
+ Requires-Dist: click>=8
17
+ Requires-Dist: flask[async]>=3
18
+ Requires-Dist: flask-cors==6.0.1
21
19
  Requires-Dist: geode-common==33.11.0
22
20
  Requires-Dist: geode-viewables==3.3.0
23
- Requires-Dist: greenlet~=3.2
24
- Requires-Dist: itsdangerous~=2.2
25
- Requires-Dist: jinja2~=3.1
26
- Requires-Dist: markupsafe~=3.0
21
+ Requires-Dist: itsdangerous>=2
22
+ Requires-Dist: jinja2>=3
23
+ Requires-Dist: markupsafe>=3
27
24
  Requires-Dist: opengeode-core==15.27.4
28
25
  Requires-Dist: opengeode-geosciences==9.4.1
29
26
  Requires-Dist: opengeode-geosciencesio==5.8.0
30
27
  Requires-Dist: opengeode-inspector==6.8.1
31
28
  Requires-Dist: opengeode-io==7.4.0
32
- Requires-Dist: opengeodeweb-microservice>=1.0.1,~=1.0
33
- Requires-Dist: sqlalchemy~=2.0
34
- Requires-Dist: typing-extensions~=4.15
35
- Requires-Dist: werkzeug==3.0.3
29
+ Requires-Dist: werkzeug==3.1.2
30
+ Requires-Dist: opengeodeweb-microservice==1.*,>=1.0.4rc9
36
31
  Dynamic: license-file
37
32
 
38
33
  <h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
@@ -5,9 +5,11 @@ requirements.txt
5
5
  src/OpenGeodeWeb_Back.egg-info/PKG-INFO
6
6
  src/OpenGeodeWeb_Back.egg-info/SOURCES.txt
7
7
  src/OpenGeodeWeb_Back.egg-info/dependency_links.txt
8
+ src/OpenGeodeWeb_Back.egg-info/entry_points.txt
8
9
  src/OpenGeodeWeb_Back.egg-info/requires.txt
9
10
  src/OpenGeodeWeb_Back.egg-info/top_level.txt
10
11
  src/opengeodeweb_back/__init__.py
12
+ src/opengeodeweb_back/app.py
11
13
  src/opengeodeweb_back/app_config.py
12
14
  src/opengeodeweb_back/geode_functions.py
13
15
  src/opengeodeweb_back/geode_objects.py
@@ -24,6 +26,7 @@ src/opengeodeweb_back/routes/schemas/create_point.json
24
26
  src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json
25
27
  src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json
26
28
  src/opengeodeweb_back/routes/schemas/inspect_file.json
29
+ src/opengeodeweb_back/routes/schemas/kill.json
27
30
  src/opengeodeweb_back/routes/schemas/missing_files.json
28
31
  src/opengeodeweb_back/routes/schemas/ping.json
29
32
  src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ opengeodeweb-back = opengeodeweb_back.app:run_server
@@ -0,0 +1,17 @@
1
+ asgiref>=3
2
+ blinker>=1
3
+ click>=8
4
+ flask[async]>=3
5
+ flask-cors==6.0.1
6
+ geode-common==33.11.0
7
+ geode-viewables==3.3.0
8
+ itsdangerous>=2
9
+ jinja2>=3
10
+ markupsafe>=3
11
+ opengeode-core==15.27.4
12
+ opengeode-geosciences==9.4.1
13
+ opengeode-geosciencesio==5.8.0
14
+ opengeode-inspector==6.8.1
15
+ opengeode-io==7.4.0
16
+ werkzeug==3.1.2
17
+ opengeodeweb-microservice==1.*,>=1.0.4rc9
@@ -0,0 +1,157 @@
1
+ """Packages"""
2
+
3
+ import argparse
4
+ import os
5
+ import time
6
+ from typing import Any
7
+
8
+ import flask
9
+ import flask_cors # type: ignore
10
+ from flask import Flask, Response
11
+ from flask_cors import cross_origin
12
+ from werkzeug.exceptions import HTTPException
13
+
14
+ from opengeodeweb_back import utils_functions, app_config
15
+ from opengeodeweb_back.routes import blueprint_routes
16
+ from opengeodeweb_back.routes.models import blueprint_models
17
+ from opengeodeweb_microservice.database.connection import init_database
18
+
19
+
20
+ """ Global config """
21
+ app: Flask = flask.Flask(__name__)
22
+
23
+ """ Config variables """
24
+ FLASK_DEBUG = True if os.environ.get("FLASK_DEBUG", default=None) == "True" else False
25
+
26
+ if FLASK_DEBUG == False:
27
+ app.config.from_object(app_config.ProdConfig)
28
+ else:
29
+ app.config.from_object(app_config.DevConfig)
30
+
31
+ DEFAULT_HOST: str = app.config.get("DEFAULT_HOST") or "localhost"
32
+ DEFAULT_PORT: int = int(app.config.get("DEFAULT_PORT") or 5000)
33
+ DEFAULT_DATA_FOLDER_PATH: str = app.config.get("DEFAULT_DATA_FOLDER_PATH") or "./data"
34
+ ORIGINS: Any = app.config.get("ORIGINS")
35
+ TIMEOUT: int = int(app.config.get("MINUTES_BEFORE_TIMEOUT") or 30)
36
+ SSL: Any = app.config.get("SSL")
37
+ SECONDS_BETWEEN_SHUTDOWNS: float = float(
38
+ app.config.get("SECONDS_BETWEEN_SHUTDOWNS") or 60.0
39
+ )
40
+
41
+
42
+ app.register_blueprint(
43
+ blueprint_routes.routes,
44
+ url_prefix="/opengeodeweb_back",
45
+ name="opengeodeweb_back",
46
+ )
47
+
48
+ app.register_blueprint(
49
+ blueprint_models.routes,
50
+ url_prefix="/opengeodeweb_back/models",
51
+ name="opengeodeweb_models",
52
+ )
53
+
54
+ if FLASK_DEBUG == False:
55
+ utils_functions.set_interval(
56
+ utils_functions.kill_task, SECONDS_BETWEEN_SHUTDOWNS, app
57
+ )
58
+
59
+
60
+ @app.errorhandler(HTTPException)
61
+ def errorhandler(e: HTTPException) -> tuple[dict[str, Any], int] | Response:
62
+ return utils_functions.handle_exception(e)
63
+
64
+
65
+ @app.route(
66
+ "/error",
67
+ methods=["POST"],
68
+ )
69
+ def return_error() -> Response:
70
+ flask.abort(500, f"Test")
71
+ return flask.make_response({}, 500)
72
+
73
+
74
+ @app.route("/", methods=["POST"])
75
+ @cross_origin()
76
+ def root() -> Response:
77
+ return flask.make_response({}, 200)
78
+
79
+
80
+ @app.route("/kill", methods=["POST"])
81
+ @cross_origin()
82
+ def kill() -> None:
83
+ print("Manual server kill, shutting down...", flush=True)
84
+ os._exit(0)
85
+
86
+
87
+ def run_server() -> None:
88
+ parser = argparse.ArgumentParser(
89
+ prog="OpenGeodeWeb-Back", description="Backend server for OpenGeodeWeb"
90
+ )
91
+ parser.add_argument("--host", type=str, default=DEFAULT_HOST, help="Host to run on")
92
+ parser.add_argument(
93
+ "-p", "--port", type=int, default=DEFAULT_PORT, help="Port to listen on"
94
+ )
95
+ parser.add_argument(
96
+ "-d",
97
+ "--debug",
98
+ default=FLASK_DEBUG,
99
+ help="Whether to run in debug mode",
100
+ action="store_true",
101
+ )
102
+ parser.add_argument(
103
+ "-dfp",
104
+ "--data_folder_path",
105
+ type=str,
106
+ default=DEFAULT_DATA_FOLDER_PATH,
107
+ help="Path to the folder where data is stored",
108
+ )
109
+ parser.add_argument(
110
+ "-ufp",
111
+ "--upload_folder_path",
112
+ type=str,
113
+ default=DEFAULT_DATA_FOLDER_PATH,
114
+ help="Path to the folder where uploads are stored",
115
+ )
116
+ parser.add_argument(
117
+ "-origins",
118
+ "--allowed_origins",
119
+ default=ORIGINS,
120
+ help="Origins that are allowed to connect to the server",
121
+ )
122
+ parser.add_argument(
123
+ "-t",
124
+ "--timeout",
125
+ default=TIMEOUT,
126
+ help="Number of minutes before the server times out",
127
+ )
128
+ args = parser.parse_args()
129
+
130
+ app.config.update(DATA_FOLDER_PATH=args.data_folder_path)
131
+ app.config.update(UPLOAD_FOLDER=args.upload_folder_path)
132
+ app.config.update(MINUTES_BEFORE_TIMEOUT=args.timeout)
133
+
134
+ flask_cors.CORS(app, origins=args.allowed_origins)
135
+
136
+ print(
137
+ f"Host: {args.host}, Port: {args.port}, Debug: {args.debug}, "
138
+ f"Data folder path: {args.data_folder_path}, Timeout: {args.timeout}, "
139
+ f"Origins: {args.allowed_origins}",
140
+ flush=True,
141
+ )
142
+
143
+ db_filename: str = app.config.get("DATABASE_FILENAME") or "project.db"
144
+ db_path = os.path.join(args.data_folder_path, db_filename)
145
+ os.makedirs(os.path.dirname(db_path), exist_ok=True)
146
+ app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{db_path}"
147
+ app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
148
+
149
+ init_database(db_path)
150
+ print(f"Database initialized at: {db_path}", flush=True)
151
+
152
+ app.run(debug=args.debug, host=args.host, port=args.port, ssl_context=SSL)
153
+
154
+
155
+ # ''' Main '''
156
+ if __name__ == "__main__":
157
+ run_server()
@@ -4,9 +4,6 @@ import time
4
4
 
5
5
  # Third party imports
6
6
  # Local application imports
7
- from opengeodeweb_microservice.database.connection import get_database
8
-
9
- DATABASE_FILENAME = "project.db"
10
7
 
11
8
 
12
9
  class Config(object):
@@ -18,7 +15,7 @@ class Config(object):
18
15
  REQUEST_COUNTER = 0
19
16
  LAST_REQUEST_TIME = time.time()
20
17
  LAST_PING_TIME = time.time()
21
- SQLALCHEMY_TRACK_MODIFICATIONS = False
18
+ DATABASE_FILENAME = "project.db"
22
19
 
23
20
 
24
21
  class ProdConfig(Config):
@@ -27,9 +24,6 @@ class ProdConfig(Config):
27
24
  MINUTES_BEFORE_TIMEOUT = "1"
28
25
  SECONDS_BETWEEN_SHUTDOWNS = "10"
29
26
  DATA_FOLDER_PATH = "/data"
30
- SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.abspath(
31
- os.path.join(DATA_FOLDER_PATH, DATABASE_FILENAME)
32
- )}"
33
27
 
34
28
 
35
29
  class DevConfig(Config):
@@ -39,6 +33,3 @@ class DevConfig(Config):
39
33
  SECONDS_BETWEEN_SHUTDOWNS = "10"
40
34
  BASE_DIR = os.path.dirname(os.path.abspath(__file__))
41
35
  DATA_FOLDER_PATH = os.path.join(BASE_DIR, "data")
42
- SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(
43
- BASE_DIR, DATA_FOLDER_PATH, DATABASE_FILENAME
44
- )}"
@@ -381,3 +381,17 @@ def ping():
381
381
  utils_functions.validate_request(flask.request, ping_json)
382
382
  flask.current_app.config.update(LAST_PING_TIME=time.time())
383
383
  return flask.make_response({"message": "Flask server is running"}, 200)
384
+
385
+
386
+ with open(
387
+ os.path.join(schemas, "kill.json"),
388
+ "r",
389
+ ) as file:
390
+ kill_json = json.load(file)
391
+
392
+
393
+ @routes.route(kill_json["route"], methods=kill_json["methods"])
394
+ def kill() -> flask.Response:
395
+ print("Manual server kill, shutting down...", flush=True)
396
+ os._exit(0)
397
+ return flask.make_response({"message": "Flask server is dead"}, 200)
@@ -0,0 +1,10 @@
1
+ {
2
+ "route": "/kill",
3
+ "methods": [
4
+ "POST"
5
+ ],
6
+ "type": "object",
7
+ "properties": {},
8
+ "required": [],
9
+ "additionalProperties": false
10
+ }
@@ -88,7 +88,6 @@ def validate_request(request: flask.Request, schema: dict[str, str]) -> None:
88
88
 
89
89
  if json_data is None:
90
90
  json_data = {}
91
-
92
91
  try:
93
92
  validate = fastjsonschema.compile(schema)
94
93
  validate(json_data)
@@ -164,7 +163,7 @@ def create_data_folder_from_id(data_id: str) -> str:
164
163
  def save_all_viewables_and_return_info(
165
164
  geode_object: str,
166
165
  data: Any,
167
- input_file: str,
166
+ input_file: str | None = None,
168
167
  additional_files: list[str] | None = None,
169
168
  ) -> dict[str, Any]:
170
169
  if additional_files is None:
@@ -228,6 +227,8 @@ def generate_native_viewable_and_light_viewable_from_object(
228
227
  def generate_native_viewable_and_light_viewable_from_file(
229
228
  geode_object: str, input_filename: str
230
229
  ) -> dict[str, Any]:
230
+
231
+ session = get_session()
231
232
  temp_data_entry = Data.create(
232
233
  geode_object=geode_object,
233
234
  input_file=input_filename,
@@ -259,14 +260,10 @@ def generate_native_viewable_and_light_viewable_from_file(
259
260
 
260
261
  data = geode_functions.load(geode_object, copied_full_path)
261
262
 
262
- # Remplacer :
263
- # database.session.delete(temp_data_entry)
264
- # database.session.flush()
265
- # Par :
266
- session = get_session()
267
263
  if session:
268
264
  session.delete(temp_data_entry)
269
265
  session.flush()
266
+ session.commit()
270
267
 
271
268
  return save_all_viewables_and_return_info(
272
269
  geode_object,
@@ -5,7 +5,7 @@ import uuid
5
5
  # Third party imports
6
6
 
7
7
  # Local application imports
8
- from src.opengeodeweb_back import geode_functions, geode_objects
8
+ from opengeodeweb_back import geode_functions, geode_objects
9
9
 
10
10
 
11
11
  data_folder = os.path.join(os.path.dirname(__file__), "data")
@@ -2,13 +2,13 @@ import os
2
2
  import shutil
3
3
  import flask
4
4
 
5
- from src.opengeodeweb_back import geode_functions
5
+ from opengeodeweb_back import geode_functions
6
6
  from opengeodeweb_microservice.database.data import Data
7
7
  from opengeodeweb_microservice.database.connection import get_session
8
8
 
9
9
 
10
10
  def test_model_mesh_components(client, test_id):
11
- route = f"/models/vtm_component_indices"
11
+ route = "/opengeodeweb_back/models/vtm_component_indices"
12
12
 
13
13
  with client.application.app_context():
14
14
  data_path = geode_functions.data_file_path(test_id, "viewable.vtm")
@@ -29,7 +29,7 @@ def test_model_mesh_components(client, test_id):
29
29
 
30
30
 
31
31
  def test_extract_brep_uuids(client, test_id):
32
- route = "/models/mesh_components"
32
+ route = "/opengeodeweb_back/models/mesh_components"
33
33
  brep_filename = "cube.og_brep"
34
34
 
35
35
  with client.application.app_context():
@@ -8,11 +8,11 @@ from werkzeug.datastructures import FileStorage
8
8
  # Local application imports
9
9
  from opengeodeweb_microservice.database.data import Data
10
10
  from opengeodeweb_microservice.database.connection import get_session
11
- from src.opengeodeweb_back import geode_functions, test_utils
11
+ from opengeodeweb_back import geode_functions, test_utils
12
12
 
13
13
 
14
14
  def test_allowed_files(client):
15
- route = f"/allowed_files"
15
+ route = f"/opengeodeweb_back/allowed_files"
16
16
  get_full_data = lambda: {"supported_feature": "None"}
17
17
  json = get_full_data()
18
18
  response = client.post(route, json=json)
@@ -27,7 +27,7 @@ def test_allowed_files(client):
27
27
 
28
28
 
29
29
  def test_allowed_objects(client):
30
- route = f"/allowed_objects"
30
+ route = f"/opengeodeweb_back/allowed_objects"
31
31
 
32
32
  def get_full_data():
33
33
  return {
@@ -49,14 +49,14 @@ def test_allowed_objects(client):
49
49
 
50
50
  def test_upload_file(client, filename="test.og_brep"):
51
51
  response = client.put(
52
- f"/upload_file",
52
+ f"/opengeodeweb_back/upload_file",
53
53
  data={"file": FileStorage(open(f"./tests/data/{filename}", "rb"))},
54
54
  )
55
55
  assert response.status_code == 201
56
56
 
57
57
 
58
58
  def test_missing_files(client):
59
- route = f"/missing_files"
59
+ route = f"/opengeodeweb_back/missing_files"
60
60
 
61
61
  def get_full_data():
62
62
  return {
@@ -79,7 +79,7 @@ def test_missing_files(client):
79
79
 
80
80
 
81
81
  def test_geographic_coordinate_systems(client):
82
- route = f"/geographic_coordinate_systems"
82
+ route = f"/opengeodeweb_back/geographic_coordinate_systems"
83
83
  get_full_data = lambda: {"input_geode_object": "BRep"}
84
84
  # Normal test with geode_object 'BRep'
85
85
  response = client.post(route, json=get_full_data())
@@ -94,7 +94,7 @@ def test_geographic_coordinate_systems(client):
94
94
 
95
95
 
96
96
  def test_inspect_file(client):
97
- route = f"/inspect_file"
97
+ route = f"/opengeodeweb_back/inspect_file"
98
98
 
99
99
  def get_full_data():
100
100
  return {
@@ -115,7 +115,7 @@ def test_inspect_file(client):
115
115
 
116
116
 
117
117
  def test_geode_objects_and_output_extensions(client):
118
- route = "/geode_objects_and_output_extensions"
118
+ route = "/opengeodeweb_back/geode_objects_and_output_extensions"
119
119
 
120
120
  def get_full_data():
121
121
  return {
@@ -142,7 +142,7 @@ def test_geode_objects_and_output_extensions(client):
142
142
 
143
143
  def test_save_viewable_file(client):
144
144
  test_upload_file(client, filename="corbi.og_brep")
145
- route = f"/save_viewable_file"
145
+ route = f"/opengeodeweb_back/save_viewable_file"
146
146
 
147
147
  def get_full_data():
148
148
  return {
@@ -181,7 +181,9 @@ def test_texture_coordinates(client, test_id):
181
181
  os.makedirs(os.path.dirname(data_path), exist_ok=True)
182
182
  shutil.copy("./tests/data/hat.vtp", data_path)
183
183
  assert os.path.exists(data_path), f"File not found at {data_path}"
184
- response = client.post("/texture_coordinates", json={"id": data.id})
184
+ response = client.post(
185
+ "/opengeodeweb_back/texture_coordinates", json={"id": data.id}
186
+ )
185
187
  assert response.status_code == 200
186
188
  texture_coordinates = response.json["texture_coordinates"]
187
189
  assert type(texture_coordinates) is list
@@ -190,7 +192,7 @@ def test_texture_coordinates(client, test_id):
190
192
 
191
193
 
192
194
  def test_vertex_attribute_names(client, test_id):
193
- route = f"/vertex_attribute_names"
195
+ route = f"/opengeodeweb_back/vertex_attribute_names"
194
196
 
195
197
  with client.application.app_context():
196
198
  data = Data.create(geode_object="PolygonalSurface3D", input_file="test.vtp")
@@ -212,7 +214,7 @@ def test_vertex_attribute_names(client, test_id):
212
214
 
213
215
 
214
216
  def test_polygon_attribute_names(client, test_id):
215
- route = f"/polygon_attribute_names"
217
+ route = f"/opengeodeweb_back/polygon_attribute_names"
216
218
 
217
219
  with client.application.app_context():
218
220
  data = Data.create(geode_object="PolygonalSurface3D", input_file="test.vtp")
@@ -234,7 +236,7 @@ def test_polygon_attribute_names(client, test_id):
234
236
 
235
237
 
236
238
  def test_polyhedron_attribute_names(client, test_id):
237
- route = f"/polyhedron_attribute_names"
239
+ route = f"/opengeodeweb_back/polyhedron_attribute_names"
238
240
 
239
241
  with client.application.app_context():
240
242
  data = Data.create(geode_object="PolyhedralSolid3D", input_file="test.vtu")
@@ -257,7 +259,7 @@ def test_polyhedron_attribute_names(client, test_id):
257
259
 
258
260
 
259
261
  def test_create_point(client):
260
- route = f"/create_point"
262
+ route = f"/opengeodeweb_back/create_point"
261
263
  get_full_data = lambda: {"title": "test_point", "x": 1, "y": 2, "z": 3}
262
264
 
263
265
  # Normal test with all keys
@@ -10,7 +10,7 @@ import uuid
10
10
  # Local application imports
11
11
  from opengeodeweb_microservice.database.data import Data
12
12
  from opengeodeweb_microservice.database.connection import get_session
13
- from src.opengeodeweb_back import geode_functions, utils_functions
13
+ from opengeodeweb_back import geode_functions, utils_functions
14
14
 
15
15
 
16
16
  def test_increment_request_counter(app_context):
@@ -1,22 +0,0 @@
1
- asgiref~=3.9
2
- blinker~=1.9
3
- click~=8.3
4
- fastjsonschema~=2.21
5
- flask[async]~=3.0
6
- flask-cors~=6.0
7
- flask-sqlalchemy~=3.1
8
- geode-common==33.11.0
9
- geode-viewables==3.3.0
10
- greenlet~=3.2
11
- itsdangerous~=2.2
12
- jinja2~=3.1
13
- markupsafe~=3.0
14
- opengeode-core==15.27.4
15
- opengeode-geosciences==9.4.1
16
- opengeode-geosciencesio==5.8.0
17
- opengeode-inspector==6.8.1
18
- opengeode-io==7.4.0
19
- opengeodeweb-microservice>=1.0.1,~=1.0
20
- sqlalchemy~=2.0
21
- typing-extensions~=4.15
22
- werkzeug==3.0.3