diff --git a/compendium_v2/db/__init__.py b/compendium_v2/db/__init__.py index 2a07293a14277e62923a2abcbdc449204e661af8..ce48aaa07a269ae2c20235b31c15f58cf8ff0956 100644 --- a/compendium_v2/db/__init__.py +++ b/compendium_v2/db/__init__.py @@ -41,5 +41,5 @@ def init_db_model(dsn): # cf. https://docs.sqlalchemy.org/en # /latest/orm/extensions/automap.html - engine = create_engine(dsn, pool_size=10, max_overflow=0) + engine = create_engine(dsn, pool_size=10) _SESSION_MAKER = sessionmaker(bind=engine) diff --git a/compendium_v2/db/model.py b/compendium_v2/db/model.py index 1cc54238c5c108206fbf4edbca2f30f9eef85131..dd67b784703850379f384d4f3ca0845f4622e924 100644 --- a/compendium_v2/db/model.py +++ b/compendium_v2/db/model.py @@ -1,4 +1,3 @@ -import enum import logging import sqlalchemy as sa @@ -13,15 +12,10 @@ logger = logging.getLogger(__name__) base_schema: Any = declarative_base() -def _enum_names(enum_class): - return [x.name for x in list(enum_class)] - - - - class BudgetEntry(base_schema): __tablename__ = 'budgets' - id = sa.Column(sa.Sequence('budgetentry_seq_id_seq'), nullable=False) + id = sa.Column(sa.Integer, sa.Sequence( + 'budgetentry_seq_id_seq'), nullable=False) nren = sa.Column(sa.String(128), primary_key=True) budget = sa.Column(sa.String(128), nullable=True) year = sa.Column(sa.Integer, primary_key=True) diff --git a/compendium_v2/migrations/versions/cbcd21fcc151_initial_db.py b/compendium_v2/migrations/versions/cbcd21fcc151_initial_db.py index 8ff0e48cc2f8f5c0de79a22e16aea14d46b71369..1e4e62a5e0e30a085d4ac46fb8998dda7746ac29 100644 --- a/compendium_v2/migrations/versions/cbcd21fcc151_initial_db.py +++ b/compendium_v2/migrations/versions/cbcd21fcc151_initial_db.py @@ -1,7 +1,7 @@ """Initial DB Revision ID: cbcd21fcc151 -Revises: +Revises: Create Date: 2023-02-07 15:56:22.086064 """ @@ -15,22 +15,24 @@ down_revision = None branch_labels = None depends_on = None -budget_id_seq = sa.Sequence('budgetentry_seq_id_seq') # represents the sequence - +# represents the sequence +budget_id_seq = sa.Sequence('budgetentry_seq_id_seq') def upgrade(): - op.execute(sa.schema.CreateSequence(budget_id_seq)) # create the sequence - op.create_table('budgets', - sa.Column('id', sa.Integer, budget_id_seq, nullable=False, server_default=budget_id_seq.next_value()), - sa.Column('nren', sa.String(length=128), nullable=False), - sa.Column('budget', sa.String(length=128), nullable=True), - sa.Column('year', sa.Integer, nullable=False), - sa.PrimaryKeyConstraint('nren', 'year') + op.execute(sa.schema.CreateSequence(budget_id_seq)) # create the sequence + op.create_table( + 'budgets', + sa.Column('id', sa.Integer, budget_id_seq, nullable=False, + server_default=budget_id_seq.next_value()), + sa.Column('nren', sa.String(length=128), nullable=False), + sa.Column('budget', sa.String(length=128), nullable=True), + sa.Column('year', sa.Integer, nullable=False), + sa.PrimaryKeyConstraint('nren', 'year') ) def downgrade(): op.execute( - sa.schema.DropSequence(sa.Sequence('budgetentry_seq_id_seq'))) + sa.schema.DropSequence(sa.Sequence('budgetentry_seq_id_seq'))) op.drop_table('budgets') diff --git a/compendium_v2/routes/budget.py b/compendium_v2/routes/budget.py index 7c5090ade591a0eb77736d5226bac9b8208d94bb..a0b37a2d223ceaedba9d04dce959a06aec707816 100644 --- a/compendium_v2/routes/budget.py +++ b/compendium_v2/routes/budget.py @@ -63,19 +63,16 @@ def budget_view() -> Any: :return: """ - - with survey_db.session_scope() as survey_session, \ db.session_scope() as session: - + _entries = session.query(model.BudgetEntry) inserted = defaultdict(dict) - for entry in _entries: inserted[entry.nren][entry.year] = entry.budget - + data = survey_session.query(survey_model.Nrens) for nren in data: for budget in nren.budgets: @@ -100,6 +97,7 @@ def budget_view() -> Any: with db.session_scope() as session: entries = sorted([_extract_data(entry) - for entry in session.query(model.BudgetEntry)], key=lambda d: (d['BUDGET_YEAR'], d['NREN'])) + for entry in session.query(model.BudgetEntry)], + key=lambda d: (d['BUDGET_YEAR'], d['NREN'])) return jsonify(entries) diff --git a/compendium_v2/survey_db/__init__.py b/compendium_v2/survey_db/__init__.py index 2a07293a14277e62923a2abcbdc449204e661af8..ce48aaa07a269ae2c20235b31c15f58cf8ff0956 100644 --- a/compendium_v2/survey_db/__init__.py +++ b/compendium_v2/survey_db/__init__.py @@ -41,5 +41,5 @@ def init_db_model(dsn): # cf. https://docs.sqlalchemy.org/en # /latest/orm/extensions/automap.html - engine = create_engine(dsn, pool_size=10, max_overflow=0) + engine = create_engine(dsn, pool_size=10) _SESSION_MAKER = sessionmaker(bind=engine) diff --git a/compendium_v2/survey_db/model.py b/compendium_v2/survey_db/model.py index ef05e057c0c3f60480fe92bf3832d87bc69ced70..4ea5af32f0336baa6787e6efbfb432cda321b86c 100644 --- a/compendium_v2/survey_db/model.py +++ b/compendium_v2/survey_db/model.py @@ -1,4 +1,3 @@ -import enum import logging import sqlalchemy as sa @@ -13,10 +12,6 @@ logger = logging.getLogger(__name__) base_schema: Any = declarative_base() -def _enum_names(enum_class): - return [x.name for x in list(enum_class)] - - class Budgets(base_schema): __tablename__ = 'budgets' id = sa.Column(sa.Integer, primary_key=True) diff --git a/test/conftest.py b/test/conftest.py index bd3d6628443fea86d435e26f3964d5cd32f3cfef..2670344426770602a0f4501433b1c71f31a5a358 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -6,6 +6,7 @@ import pytest import compendium_v2 from compendium_v2 import db from compendium_v2.db import model +from compendium_v2.survey_db import model as survey_model from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker @@ -16,9 +17,26 @@ from sqlalchemy.pool import StaticPool def dummy_config(): yield { 'SQLALCHEMY_DATABASE_URI': 'sqlite://', + 'SURVEY_DATABASE_URI': 'sqlite:///' } +@pytest.fixture +def mocked_survey_db(mocker): + engine = create_engine( + 'sqlite://', + connect_args={'check_same_thread': False}, + poolclass=StaticPool, + echo=False) + survey_model.base_schema.metadata.create_all(engine) + mocker.patch( + 'compendium_v2.survey_db._SESSION_MAKER', + sessionmaker(bind=engine)) + mocker.patch( + 'compendium_v2.survey_db.init_db_model', + lambda dsn: None) + + @pytest.fixture def mocked_db(mocker): # cf. https://stackoverflow.com/a/33057675 @@ -59,7 +77,7 @@ def data_config_filename(dummy_config): @pytest.fixture -def client(data_config_filename, mocked_db): +def client(data_config_filename, mocked_db, mocked_survey_db): os.environ['SETTINGS_FILENAME'] = data_config_filename with compendium_v2.create_app().test_client() as c: yield c