diff --git a/src/iam/router.py b/src/iam/router.py index 10dc52e..f688383 100644 --- a/src/iam/router.py +++ b/src/iam/router.py @@ -20,6 +20,7 @@ Endpoints: from fastapi import APIRouter, status, BackgroundTasks from sqlalchemy.exc import IntegrityError +from psycopg.errors import UniqueViolation from src.iam.exceptions import GroupNotFoundException from src.organisation.exceptions import OrgNotFoundException @@ -283,10 +284,11 @@ async def create_group( db.flush() except IntegrityError as e: if ( - getattr(e.orig, "pgcode", None) == "23505" # Postgres unique violation + isinstance(e.orig, UniqueViolation) # Postgres unique violation or "UNIQUE constraint failed" in str(e.orig) # SQLite unique violation ): raise ConflictException("Group with this name already exists") + raise group_response = GroupSummary(**group_model.__dict__) org_response = OrgSummary(**org_model.__dict__) db.commit() @@ -500,10 +502,11 @@ async def create_new_permission( db.flush() except IntegrityError as e: if ( - getattr(e.orig, "pgcode", None) == "23505" # Postgres unique violation + isinstance(e.orig, UniqueViolation) # Postgres unique violation or "UNIQUE constraint failed" in str(e.orig) # SQLite unique violation ): raise ConflictException(message="Permission already exists") + raise response = { "id": perm_model.id, "service_name": perm_model.service_name, diff --git a/src/organisation/router.py b/src/organisation/router.py index f0f212a..a7114c3 100644 --- a/src/organisation/router.py +++ b/src/organisation/router.py @@ -18,10 +18,11 @@ Endpoints: from datetime import datetime, timezone from typing import Annotated +from sqlalchemy.exc import IntegrityError +from psycopg.errors import UniqueViolation from fastapi import APIRouter, status from fastapi.params import Query -from sqlalchemy.exc import IntegrityError from src.contact.schemas import ContactModel from src.exceptions import ( @@ -175,12 +176,13 @@ async def create_org( db.flush() except IntegrityError as e: if ( - getattr(e.orig, "pgcode", None) == "23505" # Postgres unique violation + isinstance(e.orig, UniqueViolation) # Postgres unique violation or "UNIQUE constraint failed" in str(e.orig) # SQLite unique violation ): raise ConflictException( message="Organisation with this name already exists" ) + raise # Adds currently logged-in user to org users list and sets them as root_user org_model.user_rel.append(user_model) org_model.root_user_rel = user_model diff --git a/src/service/router.py b/src/service/router.py index 434d9bc..d4954fd 100644 --- a/src/service/router.py +++ b/src/service/router.py @@ -10,6 +10,7 @@ Endpoints: from fastapi import APIRouter, status from sqlalchemy.exc import IntegrityError +from psycopg.errors import UniqueViolation from src.exceptions import ConflictException from src.database import db_dependency @@ -110,10 +111,11 @@ async def register_service( db.flush() except IntegrityError as e: if ( - getattr(e.orig, "pgcode", None) == "23505" # Postgres unique violation + isinstance(e.orig, UniqueViolation) # Postgres unique violation or "UNIQUE constraint failed" in str(e.orig) # SQLite unique violation ): raise ConflictException(message="Service with this name already exists") + raise response = ServiceWithKeySchema(**service_model.__dict__) db.commit() return {"service": response}