Skip to content

Commit 2011ac5

Browse files
committed
Converted SQLALCHEMY_DATABASE_URI to use absolute paths
Fixed database behavior to prevent table recreation on every test run. Renamed database model file to data.py for clarity. Added input_file column to the Data table. Standardized ID generation to rely on client-generated IDs only. General cleanup and code readability improvements.
1 parent 023ab17 commit 2011ac5

File tree

6 files changed

+26
-41
lines changed

6 files changed

+26
-41
lines changed

app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from src.opengeodeweb_back.routes.models import blueprint_models
1111
from src.opengeodeweb_back.utils_functions import handle_exception
1212
from src.opengeodeweb_back import app_config
13-
from src.opengeodeweb_back.database import init_db
13+
from src.opengeodeweb_back.database import initialize_database
1414

1515

1616
""" Global config """
@@ -58,6 +58,6 @@ def return_error():
5858

5959
# ''' Main '''
6060
if __name__ == "__main__":
61+
initialize_database(app)
6162
print(f"Python is running in {FLASK_DEBUG} mode")
62-
init_db(app)
6363
app.run(debug=FLASK_DEBUG, host=DEFAULT_HOST, port=PORT, ssl_context=SSL)
Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
1-
import uuid
2-
from datetime import datetime
3-
from sqlalchemy import String, DateTime, JSON
1+
from sqlalchemy import String, JSON
42
from .database import db
53

6-
7-
def generate_uuid():
8-
return str(uuid.uuid4())
9-
10-
114
class Data(db.Model):
125
__tablename__ = "datas"
136

14-
id = db.Column(String, primary_key=True, default=generate_uuid)
7+
id = db.Column(String, primary_key=True)
158
name = db.Column(String, nullable=False)
169
native_file_name = db.Column(String, nullable=False)
1710
viewable_file_name = db.Column(String, nullable=False)
1811
light_viewable = db.Column(String, nullable=True)
1912
geode_object = db.Column(String, nullable=False)
20-
input_files = db.Column(JSON, nullable=True)
21-
created_at = db.Column(DateTime, default=datetime.now)
13+
input_file = db.Column(JSON, nullable=True)
14+
additional_files = db.Column(JSON, nullable=True)

src/opengeodeweb_back/database.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,8 @@
22

33
db = SQLAlchemy()
44

5-
initialized = False
6-
7-
8-
def init_db(app):
9-
global initialized
10-
if initialized:
11-
return db
12-
print("DB", app.config.get("SQLALCHEMY_DATABASE_URI"))
5+
def initialize_database(app):
136
db.init_app(app)
147
with app.app_context():
158
db.create_all()
16-
initialized = True
179
return db

src/opengeodeweb_back/utils_functions.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# Local application imports
1616
from . import geode_functions
17-
from .models import Data
17+
from .data import Data
1818
from .database import db
1919

2020

@@ -180,7 +180,8 @@ def save_all_viewables_and_return_info(
180180
viewable_file_name=os.path.basename(saved_viewable_file_path),
181181
light_viewable=os.path.basename(saved_light_viewable_file_path),
182182
geode_object=geode_object,
183-
input_files=additional_files or [],
183+
input_file=additional_files or [],
184+
additional_files=additional_files or [],
184185
)
185186

186187
db.session.add(data_entry)
@@ -190,7 +191,7 @@ def save_all_viewables_and_return_info(
190191
"name": data.name(),
191192
"native_file_name": os.path.basename(saved_native_file_path[0]),
192193
"viewable_file_name": os.path.basename(saved_viewable_file_path),
193-
"id": generated_id,
194+
"id": data_entry.id,
194195
"object_type": geode_functions.get_object_type(geode_object),
195196
"binary_light_viewable": binary_light_viewable.decode("utf-8"),
196197
"geode_object": geode_object,

tests/conftest.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
# Local application imports
1010
from app import app
11-
from src.opengeodeweb_back.database import init_db
11+
from src.opengeodeweb_back.database import initialize_database
1212

1313
TEST_ID = "1"
1414

@@ -17,24 +17,24 @@
1717
def copy_data():
1818
shutil.rmtree("./data", ignore_errors=True)
1919
shutil.copytree("./tests/data/", f"./data/{TEST_ID}/", dirs_exist_ok=True)
20-
21-
22-
@pytest.fixture
23-
def client():
2420
app.config["TESTING"] = True
2521
app.config["SERVER_NAME"] = "TEST"
2622
app.config["DATA_FOLDER_PATH"] = "./data/"
2723
app.config["UPLOAD_FOLDER"] = "./tests/data/"
28-
app.config["REQUEST_COUNTER"] = 0
29-
app.config["LAST_REQUEST_TIME"] = time.time()
3024
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
3125
db_path = os.path.join(BASE_DIR, "data", "project.db")
3226
app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{db_path}"
3327

3428
print("Current working directory:", os.getcwd())
3529
print("Directory contents:", os.listdir("."))
3630

37-
init_db(app)
31+
initialize_database(app)
32+
33+
34+
@pytest.fixture
35+
def client():
36+
app.config["REQUEST_COUNTER"] = 0
37+
app.config["LAST_REQUEST_TIME"] = time.time()
3838
client = app.test_client()
3939
client.headers = {"Content-type": "application/json", "Accept": "application/json"}
4040
yield client

tests/test_utils_functions.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
# Local application imports
1010
from src.opengeodeweb_back.database import db
11-
from src.opengeodeweb_back.models import Data
11+
from src.opengeodeweb_back.data import Data
1212
from src.opengeodeweb_back import geode_functions, utils_functions
1313

1414

@@ -99,11 +99,11 @@ def test_save_all_viewables_and_return_info(client):
9999

100100
geode_object = "BRep"
101101
data = geode_functions.load(geode_object, "./tests/data/test.og_brep")
102-
generated_id, data_path = utils_functions.create_unique_data_folder()
102+
folder_id, data_path = utils_functions.create_unique_data_folder()
103103
additional_files = ["additional_file.txt"]
104104

105105
result = utils_functions.save_all_viewables_and_return_info(
106-
geode_object, data, generated_id, data_path, additional_files
106+
geode_object, data, folder_id, data_path, additional_files
107107
)
108108

109109
assert isinstance(result, dict)
@@ -116,16 +116,15 @@ def test_save_all_viewables_and_return_info(client):
116116
assert result["geode_object"] == geode_object
117117
assert result["input_files"] == additional_files
118118

119-
db_entry = Data.query.get(generated_id)
119+
db_entry = Data.query.get(result["id"])
120120
assert db_entry is not None
121121
assert db_entry.name == data.name()
122122
assert db_entry.native_file_name == os.path.basename(result["native_file_name"])
123-
assert db_entry.viewable_file_name == os.path.basename(
124-
result["viewable_file_name"]
125-
)
123+
assert db_entry.viewable_file_name == os.path.basename(result["viewable_file_name"])
126124
assert db_entry.light_viewable == os.path.basename(db_entry.light_viewable)
127125
assert db_entry.geode_object == geode_object
128-
assert db_entry.input_files == additional_files
126+
assert db_entry.input_file == additional_files
127+
assert db_entry.additional_files == additional_files
129128

130129

131130
def test_generate_native_viewable_and_light_viewable_from_object(client):

0 commit comments

Comments
 (0)