Skip to content

Commit 21a2f54

Browse files
committed
refacto
1 parent fdc70aa commit 21a2f54

7 files changed

Lines changed: 48 additions & 100 deletions

File tree

src/opengeodeweb_microservice/app_config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import os
2-
from .database.session import DATABASE_FILENAME
2+
from .database.connection import DATABASE_FILENAME
33

4+
class Config:
5+
pass
46

57
class ProdConfig(Config):
68
DATA_FOLDER_PATH = "/data"

src/opengeodeweb_microservice/database/connection.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,28 @@
33
from typing import Optional
44
from flask import Flask
55
from flask_sqlalchemy import SQLAlchemy
6+
from ..microservice.base import Base
67

7-
from src.opengeodeweb_microservice.microservice.base import Base
8+
DATABASE_FILENAME = "project.db"
89

10+
db: Optional[SQLAlchemy] = None
911

10-
class DatabaseConnection:
12+
def init_database(app: Flask, db_filename: str = DATABASE_FILENAME) -> SQLAlchemy:
13+
global db
14+
if db is None:
15+
db = SQLAlchemy(model_class=Base)
16+
db.init_app(app)
17+
with app.app_context():
18+
db.create_all()
19+
return db
1120

12-
def __init__(self, database_filename: str = "project.db"):
13-
self.database_filename = database_filename
14-
self.database: Optional[SQLAlchemy] = None
21+
def get_database() -> Optional[SQLAlchemy]:
22+
return db
1523

16-
def init_app(self, app: Flask) -> SQLAlchemy:
17-
if self.database is None:
18-
self.database = SQLAlchemy(model_class=Base)
24+
def get_session():
25+
if db is None:
26+
return None
27+
return db.session
1928

20-
self.database.init_app(app)
21-
22-
with app.app_context():
23-
self.database.create_all()
24-
25-
return self.database
26-
27-
def get_database(self) -> Optional[SQLAlchemy]:
28-
return self.database
29+
def get_database_connection():
30+
return get_database()

src/opengeodeweb_microservice/database/session.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/opengeodeweb_microservice/microservice/data.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
from sqlalchemy import String, JSON
22
from sqlalchemy.orm import Mapped, mapped_column
3-
from ..database.session import get_session
3+
from ..database.connection import get_session
44
from .base import Base
55
import uuid
66

7-
87
class Data(Base):
98
__tablename__ = "datas"
109

@@ -38,11 +37,14 @@ def create(
3837
)
3938

4039
session = get_session()
41-
session.session.add(data_entry)
42-
session.session.flush()
40+
if session:
41+
session.add(data_entry)
42+
session.flush()
4343
return data_entry
4444

4545
@staticmethod
4646
def get(data_id: str) -> "Data | None":
4747
session = get_session()
48-
return session.session.get(Data, data_id)
48+
if session:
49+
return session.get(Data, data_id)
50+
return None

tests/conftest.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import os
22
import pytest
33
from flask import Flask
4-
from src.opengeodeweb_microservice.database.session import init_database, get_session
4+
from src.opengeodeweb_microservice.database.connection import init_database, get_session
55
from src.opengeodeweb_microservice.microservice.data import Data
66

7-
87
@pytest.fixture(scope="session")
98
def app():
109
app = Flask(__name__)
@@ -19,41 +18,35 @@ def app():
1918
_cleanup_database_connections()
2019
_remove_test_database(db_path)
2120

22-
2321
def _cleanup_database_connections():
2422
try:
2523
session = get_session()
26-
if session and hasattr(session, "session"):
27-
session.session.close()
28-
if session and hasattr(session, "engine"):
29-
session.engine.dispose()
24+
if session:
25+
session.close()
3026
except Exception:
3127
pass
3228

33-
3429
def _remove_test_database(db_path: str):
3530
if os.path.exists(db_path):
3631
try:
3732
os.remove(db_path)
3833
except PermissionError:
3934
pass
4035

41-
4236
@pytest.fixture
4337
def app_context(app):
4438
with app.app_context():
4539
yield
4640

47-
4841
@pytest.fixture
4942
def clean_database(app_context):
5043
session = get_session()
5144
if session:
52-
session.session.query(Data).delete()
53-
session.session.commit()
45+
session.query(Data).delete()
46+
session.commit()
5447
yield
5548
if session:
5649
try:
57-
session.session.rollback()
50+
session.rollback()
5851
except Exception:
5952
pass

tests/test_connection.py

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,11 @@
1-
import pytest
2-
from src.opengeodeweb_microservice.database.session import (
1+
from src.opengeodeweb_microservice.database.connection import (
32
get_session,
43
get_database_connection,
54
)
65
from src.opengeodeweb_microservice.microservice.data import Data
76

8-
97
def test_database_connection_basic(app_context):
108
session = get_session()
119
assert session is not None
12-
assert session.session is not None
1310
connection = get_database_connection()
1411
assert connection is not None
15-
16-
17-
def test_data_crud_operations(app_context, clean_database):
18-
data = Data.create(geode_object="test_object", input_file="test.txt")
19-
assert data.id is not None
20-
session = get_session()
21-
session.session.commit()
22-
retrieved = Data.get(data.id)
23-
assert retrieved is not None
24-
assert retrieved.geode_object == "test_object"
25-
non_existent = Data.get("fake_id")
26-
assert non_existent is None
27-
28-
29-
def test_data_with_additional_files(app_context, clean_database):
30-
files = ["file1.txt", "file2.txt"]
31-
data = Data.create(geode_object="test_files", additional_files=files)
32-
session = get_session()
33-
session.session.commit()
34-
retrieved = Data.get(data.id)
35-
assert retrieved.additional_files == files

tests/test_database.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,21 @@
1-
import pytest
2-
from src.opengeodeweb_microservice.database.session import get_session
1+
from src.opengeodeweb_microservice.database.connection import get_session
32
from src.opengeodeweb_microservice.microservice.data import Data
43

5-
6-
def test_database_session_available(app_context):
7-
session = get_session()
8-
assert session is not None
9-
assert session.session is not None
10-
11-
12-
def test_data_crud_operations(app_context, clean_database):
13-
data = Data.create(
14-
geode_object="test_object",
15-
input_file="test.txt",
16-
additional_files=["file1.txt", "file2.txt"],
17-
)
4+
def test_data_crud_operations():
5+
data = Data.create(geode_object="test_object", input_file="test.txt")
186
assert data.id is not None
19-
assert data.geode_object == "test_object"
20-
assert data.additional_files == ["file1.txt", "file2.txt"]
217
session = get_session()
22-
session.session.commit()
8+
session.commit()
239
retrieved = Data.get(data.id)
2410
assert retrieved is not None
2511
assert retrieved.geode_object == "test_object"
26-
assert retrieved.additional_files == ["file1.txt", "file2.txt"]
2712
non_existent = Data.get("fake_id")
2813
assert non_existent is None
14+
15+
def test_data_with_additional_files():
16+
files = ["file1.txt", "file2.txt"]
17+
data = Data.create(geode_object="test_files", additional_files=files)
18+
session = get_session()
19+
session.commit()
20+
retrieved = Data.get(data.id)
21+
assert retrieved.additional_files == files

0 commit comments

Comments
 (0)