Skip to content
Snippets Groups Projects
Commit 6b736da7 authored by Remco Tukker's avatar Remco Tukker
Browse files

use sqlalchemy2 syntax everywhere

parent 14411075
No related branches found
No related tags found
1 merge request!18use flask-sqlalchemy for the main db
......@@ -13,7 +13,7 @@ import math
import json
import html
from sqlalchemy import text
from sqlalchemy import text, delete
from collections import defaultdict
import compendium_v2
......@@ -228,10 +228,10 @@ def transfer_staff_data(nren_dict):
for nren_name, nren_info in data.items():
if sum([nren_info[question] for question in StaffQuestion]) == 0:
logger.info(f'{nren_name} has no staff data. Deleting if exists.')
db.session.query(model.NrenStaff).filter(
db.session.execute(delete(model.NrenStaff).where(
model.NrenStaff.nren_id == nren_dict[nren_name].id,
model.NrenStaff.year == 2022,
).delete()
model.NrenStaff.year == 2022
))
continue
employed = nren_info[StaffQuestion.PERMANENT_FTE] + nren_info[StaffQuestion.SUBCONTRACTED_FTE]
......@@ -364,9 +364,9 @@ def transfer_charging_structure(nren_dict):
def transfer_ec_projects(nren_dict):
# delete all existing EC projects, in case something changed
db.session.query(model.ECProject).filter(
model.ECProject.year == 2022,
).delete()
db.session.execute(
delete(model.ECProject).where(model.ECProject.year == 2022)
)
rows = query_question(ECQuestion.EC_PROJECT)
for row in rows:
......
......@@ -11,6 +11,8 @@ import logging
import math
import click
from sqlalchemy import select
import compendium_v2
from compendium_v2.environment import setup_logging
from compendium_v2 import survey_db
......@@ -29,7 +31,7 @@ def db_budget_migration(nren_dict):
with survey_db.session_scope() as survey_session:
# move data from Survey DB budget table
data = survey_session.query(survey_model.Nrens)
data = survey_session.scalars(select(survey_model.Nrens))
for nren in data:
for budget in nren.budgets:
abbrev = nren.abbreviation.upper()
......
from sqlalchemy import select
from compendium_v2.db import db, model
from compendium_v2.publishers.survey_publisher_2022 import _cli, FundingSource, \
StaffQuestion, OrgQuestion, ChargingStructure, ECQuestion
......@@ -193,12 +195,16 @@ def test_publisher(app, mocker, dummy_config):
_cli(dummy_config, app)
with app.app_context():
budgets = db.session.query(model.BudgetEntry).order_by(model.BudgetEntry.nren_id.asc()).all()
budgets = db.session.scalars(
select(model.BudgetEntry).order_by(model.BudgetEntry.nren_id.asc())
).all()
assert len(budgets) == 3
assert budgets[0].nren.name.lower() == 'nren1'
assert budgets[0].budget == 100
funding_sources = db.session.query(model.FundingSource).order_by(model.FundingSource.nren_id.asc()).all()
funding_sources = db.session.scalars(
select(model.FundingSource).order_by(model.FundingSource.nren_id.asc())
).all()
assert len(funding_sources) == 3
assert funding_sources[0].nren.name.lower() == 'nren1'
assert funding_sources[0].client_institutions == 10
......@@ -215,7 +221,9 @@ def test_publisher(app, mocker, dummy_config):
assert funding_sources[2].european_funding == 30
assert funding_sources[2].other == 30
staff_data = db.session.query(model.NrenStaff).order_by(model.NrenStaff.nren_id.asc()).all()
staff_data = db.session.scalars(
select(model.NrenStaff).order_by(model.NrenStaff.nren_id.asc())
).all()
assert len(staff_data) == 3
assert staff_data[0].nren.name.lower() == 'nren1'
......@@ -236,7 +244,9 @@ def test_publisher(app, mocker, dummy_config):
assert staff_data[2].permanent_fte == 30
assert staff_data[2].subcontracted_fte == 0
_org_data = db.session.query(model.ParentOrganization).order_by(model.ParentOrganization.nren_id.asc()).all()
_org_data = db.session.scalars(
select(model.ParentOrganization).order_by(model.ParentOrganization.nren_id.asc())
).all()
assert len(_org_data) == 2
assert _org_data[0].nren.name.lower() == 'nren1'
......@@ -245,8 +255,9 @@ def test_publisher(app, mocker, dummy_config):
assert _org_data[1].nren.name.lower() == 'nren3'
assert _org_data[1].organization == 'Org3'
charging_structures = db.session.query(model.ChargingStructure).order_by(
model.ChargingStructure.nren_id.asc()).all()
charging_structures = db.session.scalars(
select(model.ChargingStructure).order_by(model.ChargingStructure.nren_id.asc())
).all()
assert len(charging_structures) == 3
assert charging_structures[0].nren.name.lower() == 'nren1'
assert charging_structures[0].fee_type == model.FeeType.no_charge
......@@ -255,7 +266,9 @@ def test_publisher(app, mocker, dummy_config):
assert charging_structures[2].nren.name.lower() == 'nren3'
assert charging_structures[2].fee_type == model.FeeType.other
_ec_data = db.session.query(model.ECProject).order_by(model.ECProject.nren_id.asc()).all()
_ec_data = db.session.scalars(
select(model.ECProject).order_by(model.ECProject.nren_id.asc())
).all()
assert len(_ec_data) == 3
assert _ec_data[0].nren.name.lower() == 'nren2'
......
import os
from sqlalchemy import select, func
from compendium_v2 import db
from compendium_v2.db import model
from compendium_v2.publishers.survey_publisher_v1 import _cli
......@@ -18,13 +20,13 @@ def test_publisher(mocked_survey_db, app, mocker, dummy_config):
_cli(dummy_config, app)
with app.app_context():
budget_count = db.session.query(model.BudgetEntry.year).count()
budget_count = db.session.scalar(select(func.count(model.BudgetEntry.year)))
assert budget_count
funding_source_count = db.session.query(model.FundingSource.year).count()
funding_source_count = db.session.scalar(select(func.count(model.FundingSource.year)))
assert funding_source_count
charging_structure_count = db.session.query(model.ChargingStructure.year).count()
charging_structure_count = db.session.scalar(select(func.count(model.ChargingStructure.year)))
assert charging_structure_count
staff_data = db.session.query(model.NrenStaff).order_by(model.NrenStaff.year.asc()).all()
staff_data = db.session.scalars(select(model.NrenStaff).order_by(model.NrenStaff.year.asc())).all()
# data should only be saved for the NRENs we have saved in the database
staff_data_nrens = set([staff.nren.name for staff in staff_data])
......@@ -70,7 +72,7 @@ def test_publisher(mocked_survey_db, app, mocker, dummy_config):
assert kifu_data[5].technical_fte == 133
assert kifu_data[5].non_technical_fte == 45
ecproject_data = db.session.query(model.ECProject).all()
ecproject_data = db.session.scalars(select(model.ECProject)).all()
# test a couple of random entries
surf2017 = [x for x in ecproject_data if x.nren.name == 'SURF' and x.year == 2017]
assert len(surf2017) == 1
......@@ -84,7 +86,7 @@ def test_publisher(mocked_survey_db, app, mocker, dummy_config):
assert len(kifu2019) == 4
assert kifu2019[3].project == 'SuperHeroes for Science'
parent_data = db.session.query(model.ParentOrganization).all()
parent_data = db.session.scalars(select(model.ParentOrganization)).all()
# test a random entry
asnet2021 = [x for x in parent_data if x.nren.name == 'ASNET-AM' and x.year == 2021]
assert len(asnet2021) == 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment