upgrade organization_dao to sqlalchemy 2.0

This commit is contained in:
Kenneth Kehl
2024-10-14 07:34:39 -07:00
parent daac3bf0f3
commit 88910f5718

View File

@@ -1,4 +1,4 @@
from sqlalchemy import select from sqlalchemy import delete, select
from sqlalchemy.sql.expression import func from sqlalchemy.sql.expression import func
from app import db from app import db
@@ -22,41 +22,42 @@ def dao_count_organizations_with_live_services():
Service.restricted.is_(False), Service.restricted.is_(False),
Service.count_as_live.is_(True), Service.count_as_live.is_(True),
) )
) )
return db.session.execute(stmt).distinct().scalar() or 0 return db.session.execute(stmt).distinct().scalar() or 0
def dao_get_organization_services(organization_id): def dao_get_organization_services(organization_id):
return Organization.query.filter_by(id=organization_id).one().services stmt = select(Organization).filter_by(id=organization_id)
return db.session.execute(stmt).scalars().one().services
def dao_get_organization_live_services(organization_id): def dao_get_organization_live_services(organization_id):
return Service.query.filter_by( stmt = select(Service).filter_by(organization_id=organization_id, restricted=False)
organization_id=organization_id, restricted=False return db.session.execute(stmt).scalars().all()
).all()
def dao_get_organization_by_id(organization_id): def dao_get_organization_by_id(organization_id):
return Organization.query.filter_by(id=organization_id).one() stmt = select(Organization).filter_by(id=organization_id)
return db.session.execute(stmt).scalars().one()
def dao_get_organization_by_email_address(email_address): def dao_get_organization_by_email_address(email_address):
email_address = email_address.lower().replace(".gsi.gov.uk", ".gov.uk") email_address = email_address.lower().replace(".gsi.gov.uk", ".gov.uk")
stmt = select(Domain).order_by(func.char_length(Domain.domain).desc())
for domain in Domain.query.order_by(func.char_length(Domain.domain).desc()).all(): domains = db.session.execute(stmt).scalars().all()
for domain in domains:
if email_address.endswith( if email_address.endswith(
"@{}".format(domain.domain) "@{}".format(domain.domain)
) or email_address.endswith(".{}".format(domain.domain)): ) or email_address.endswith(".{}".format(domain.domain)):
return Organization.query.filter_by(id=domain.organization_id).one() stmt = select(Organization).filter_by(id=domain.organization_id)
return db.session.execute(stmt).scalars().one()
return None return None
def dao_get_organization_by_service_id(service_id): def dao_get_organization_by_service_id(service_id):
return ( stmt = select(Organization).join(Organization.services).filter_by(id=service_id)
Organization.query.join(Organization.services).filter_by(id=service_id).first() return db.session.execute(stmt).scalars().first()
)
@autocommit @autocommit
@@ -70,7 +71,8 @@ def dao_update_organization(organization_id, **kwargs):
num_updated = Organization.query.filter_by(id=organization_id).update(kwargs) num_updated = Organization.query.filter_by(id=organization_id).update(kwargs)
if isinstance(domains, list): if isinstance(domains, list):
Domain.query.filter_by(organization_id=organization_id).delete() stmt = delete(Domain).filter_by(organization_id=organization_id)
db.session.execute(stmt)
db.session.bulk_save_objects( db.session.bulk_save_objects(
[ [
Domain(domain=domain.lower(), organization_id=organization_id) Domain(domain=domain.lower(), organization_id=organization_id)
@@ -78,7 +80,7 @@ def dao_update_organization(organization_id, **kwargs):
] ]
) )
organization = Organization.query.get(organization_id) organization = db.session.get(Organization, organization_id)
if "organization_type" in kwargs: if "organization_type" in kwargs:
_update_organization_services( _update_organization_services(
organization, "organization_type", only_where_none=False organization, "organization_type", only_where_none=False
@@ -103,7 +105,8 @@ def _update_organization_services(organization, attribute, only_where_none=True)
@autocommit @autocommit
@version_class(Service) @version_class(Service)
def dao_add_service_to_organization(service, organization_id): def dao_add_service_to_organization(service, organization_id):
organization = Organization.query.filter_by(id=organization_id).one() stmt = select(Organization).filter_by(id=organization_id)
organization = db.session.execute(stmt).scalars().one()
service.organization_id = organization_id service.organization_id = organization_id
service.organization_type = organization.organization_type service.organization_type = organization.organization_type
@@ -124,7 +127,8 @@ def dao_get_users_for_organization(organization_id):
@autocommit @autocommit
def dao_add_user_to_organization(organization_id, user_id): def dao_add_user_to_organization(organization_id, user_id):
organization = dao_get_organization_by_id(organization_id) organization = dao_get_organization_by_id(organization_id)
user = User.query.filter_by(id=user_id).one() stmt = select(User).filter_by(id=user_id)
user = db.session.execute(stmt).scalars().one()
user.organizations.append(organization) user.organizations.append(organization)
db.session.add(organization) db.session.add(organization)
return user return user