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):
class BudgetEntry(base_schema):
__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)
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:
Create Date: 2023-02-07 11:37:56.576183
Create Date: 2023-02-07 15:56:22.086064
"""
from alembic import op
......@@ -10,21 +10,27 @@ import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '366dfd333305'
revision = 'cbcd21fcc151'
down_revision = None
branch_labels = None
depends_on = None
budget_id_seq = sa.Sequence('budgetentry_seq_id_seq') # represents the sequence
def upgrade():
op.execute(sa.schema.CreateSequence(budget_id_seq)) # create the sequence
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('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')
)
def downgrade():
op.execute(
sa.schema.DropSequence(sa.Sequence('budgetentry_seq_id_seq')))
op.drop_table('budgets')
import logging
from collections import defaultdict
from typing import Any
from flask import Blueprint, jsonify, current_app
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.routes import common
......@@ -19,7 +21,6 @@ def before_request():
survey_db.init_db_model(dsn_survey)
logger = logging.getLogger(__name__)
col_pal = ['#fd7f6f', '#7eb0d5', '#b2e061',
......@@ -61,24 +62,44 @@ def budget_view() -> Any:
: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)
for nren in data:
print(nren)
except Exception as e:
print(e)
# def _extract_data(entry: model.BudgetEntry):
# return {
# 'id': entry.id,
# 'NREN': entry.NREN,
# 'BUDGET': entry.BUDGET,
# 'BUDGET_YEAR': entry.BUDGET_YEAR,
# }
# entries = [_extract_data(entry) for entry in data]
#
# return jsonify(entries)
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:
abbrev = nren.abbreviation
year = budget.year
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 logging
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
from typing import Any
......@@ -23,11 +22,9 @@ class Budgets(base_schema):
id = sa.Column(sa.Integer, primary_key=True)
budget = sa.Column(sa.String)
year = sa.Column(sa.Integer)
country_code = sa.Column(sa.String)
# nren = relationship(
# 'Nrens', foreign_keys=[country_code],
# primaryjoin='Nrens.country_code == Budgets.country_code',
# back_populates='budgets')
country_code = sa.Column('country_code', sa.String,
sa.ForeignKey('nrens.country_code'))
nren = relationship('Nrens', back_populates='budgets')
class Nrens(base_schema):
......@@ -35,9 +32,7 @@ class Nrens(base_schema):
id = sa.Column(sa.Integer, primary_key=True)
abbreviation = sa.Column(sa.String)
country_code = sa.Column(sa.String)
# budgets = relationship(
# 'Budgets', foreign_keys=[country_code],
# primaryjoin='Nrens.country_code == Budgets.country_code')
budgets = relationship('Budgets', back_populates='nren')
# 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