Skip to content
Snippets Groups Projects
Commit f3e444cc authored by Bjarke Madsen's avatar Bjarke Madsen
Browse files

Update sequence + route

parent 315c1dc6
No related branches found
No related tags found
No related merge requests found
...@@ -21,7 +21,7 @@ def _enum_names(enum_class): ...@@ -21,7 +21,7 @@ def _enum_names(enum_class):
class BudgetEntry(base_schema): class BudgetEntry(base_schema):
__tablename__ = 'budgets' __tablename__ = 'budgets'
id = sa.Column(sa.Integer, autoincrement=True) id = sa.Column(sa.Sequence('budgetentry_seq_id_seq'), nullable=False)
nren = sa.Column(sa.String(128), primary_key=True) nren = sa.Column(sa.String(128), primary_key=True)
budget = sa.Column(sa.String(128), nullable=True) budget = sa.Column(sa.String(128), nullable=True)
year = sa.Column(sa.String(128), primary_key=True) year = sa.Column(sa.Integer, primary_key=True)
"""Initial DB setup """Initial DB
Revision ID: 366dfd333305 Revision ID: cbcd21fcc151
Revises: Revises:
Create Date: 2023-02-07 11:37:56.576183 Create Date: 2023-02-07 15:56:22.086064
""" """
from alembic import op from alembic import op
...@@ -10,21 +10,27 @@ import sqlalchemy as sa ...@@ -10,21 +10,27 @@ import sqlalchemy as sa
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = '366dfd333305' revision = 'cbcd21fcc151'
down_revision = None down_revision = None
branch_labels = None branch_labels = None
depends_on = None depends_on = None
budget_id_seq = sa.Sequence('budgetentry_seq_id_seq') # represents the sequence
def upgrade(): def upgrade():
op.execute(sa.schema.CreateSequence(budget_id_seq)) # create the sequence
op.create_table('budgets', op.create_table('budgets',
sa.Column('id', sa.Integer(), autoincrement=True, nullable=True), 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('nren', sa.String(length=128), nullable=False),
sa.Column('budget', sa.String(length=128), nullable=True), sa.Column('budget', sa.String(length=128), nullable=True),
sa.Column('year', sa.String(length=128), nullable=False), sa.Column('year', sa.Integer, nullable=False),
sa.PrimaryKeyConstraint('nren', 'year') sa.PrimaryKeyConstraint('nren', 'year')
) )
def downgrade(): def downgrade():
op.execute(
sa.schema.DropSequence(sa.Sequence('budgetentry_seq_id_seq')))
op.drop_table('budgets') op.drop_table('budgets')
import logging import logging
from collections import defaultdict
from typing import Any from typing import Any
from flask import Blueprint, jsonify, current_app from flask import Blueprint, jsonify, current_app
from compendium_v2 import db, survey_db from compendium_v2 import db, survey_db
from compendium_v2.db import model
from compendium_v2.survey_db import model as survey_model from compendium_v2.survey_db import model as survey_model
from compendium_v2.routes import common from compendium_v2.routes import common
...@@ -19,7 +21,6 @@ def before_request(): ...@@ -19,7 +21,6 @@ def before_request():
survey_db.init_db_model(dsn_survey) survey_db.init_db_model(dsn_survey)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
col_pal = ['#fd7f6f', '#7eb0d5', '#b2e061', col_pal = ['#fd7f6f', '#7eb0d5', '#b2e061',
...@@ -61,24 +62,44 @@ def budget_view() -> Any: ...@@ -61,24 +62,44 @@ def budget_view() -> Any:
:return: :return:
""" """
try:
with survey_db.session_scope() as session:
data = session.query(survey_model.Nrens).join(survey_model.Budgets,
survey_model.Budgets.country_code == survey_model.Nrens.country_code) with survey_db.session_scope() as survey_session, \
for nren in data: db.session_scope() as session:
print(nren)
except Exception as e: _entries = session.query(model.BudgetEntry)
print(e)
inserted = defaultdict(dict)
# def _extract_data(entry: model.BudgetEntry):
# return { for entry in _entries:
# 'id': entry.id, inserted[entry.nren][entry.year] = entry.budget
# 'NREN': entry.NREN,
# 'BUDGET': entry.BUDGET, data = survey_session.query(survey_model.Nrens)
# 'BUDGET_YEAR': entry.BUDGET_YEAR, for nren in data:
# } for budget in nren.budgets:
abbrev = nren.abbreviation
# entries = [_extract_data(entry) for entry in data] year = budget.year
#
# return jsonify(entries) if inserted.get(abbrev, {}).get(year):
continue
else:
inserted[abbrev][year] = True
entry = model.BudgetEntry(
nren=abbrev, budget=budget.budget, year=year)
session.add(entry)
def _extract_data(entry: model.BudgetEntry):
return {
'id': entry.id,
'NREN': entry.nren,
'BUDGET': entry.budget,
'BUDGET_YEAR': entry.year,
}
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']))
return jsonify(entries)
import enum import enum
import logging import logging
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
from typing import Any from typing import Any
...@@ -23,11 +22,9 @@ class Budgets(base_schema): ...@@ -23,11 +22,9 @@ class Budgets(base_schema):
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, primary_key=True)
budget = sa.Column(sa.String) budget = sa.Column(sa.String)
year = sa.Column(sa.Integer) year = sa.Column(sa.Integer)
country_code = sa.Column(sa.String) country_code = sa.Column('country_code', sa.String,
# nren = relationship( sa.ForeignKey('nrens.country_code'))
# 'Nrens', foreign_keys=[country_code], nren = relationship('Nrens', back_populates='budgets')
# primaryjoin='Nrens.country_code == Budgets.country_code',
# back_populates='budgets')
class Nrens(base_schema): class Nrens(base_schema):
...@@ -35,9 +32,7 @@ class Nrens(base_schema): ...@@ -35,9 +32,7 @@ class Nrens(base_schema):
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, primary_key=True)
abbreviation = sa.Column(sa.String) abbreviation = sa.Column(sa.String)
country_code = sa.Column(sa.String) country_code = sa.Column(sa.String)
# budgets = relationship( budgets = relationship('Budgets', back_populates='nren')
# 'Budgets', foreign_keys=[country_code],
# primaryjoin='Nrens.country_code == Budgets.country_code')
# class BudgetEntry(base_schema): # class BudgetEntry(base_schema):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment