diff --git a/app/alembic/versions/275222846605_initial_ldap_schema.py b/app/alembic/versions/275222846605_initial_ldap_schema.py index 2c8ed7d3d..27efc5e94 100644 --- a/app/alembic/versions/275222846605_initial_ldap_schema.py +++ b/app/alembic/versions/275222846605_initial_ldap_schema.py @@ -12,15 +12,14 @@ from alembic import op from dishka import AsyncContainer, Scope from ldap3.protocol.schemas.ad2012R2 import ad_2012_r2_schema -from sqlalchemy import delete, or_ +from sqlalchemy import delete, or_, select from sqlalchemy.ext.asyncio import AsyncConnection, AsyncSession -from sqlalchemy.orm import Session +from sqlalchemy.orm import Session, selectinload -from entities import Attribute +from entities import Attribute, AttributeType, ObjectClass from extra.alembic_utils import temporary_stub_entity_type_name from ldap_protocol.ldap_schema.attribute_type_dao import AttributeTypeDAO from ldap_protocol.ldap_schema.dto import AttributeTypeDTO -from ldap_protocol.ldap_schema.object_class_dao import ObjectClassDAO from ldap_protocol.utils.raw_definition_parser import ( RawDefinitionParser as RDParser, ) @@ -371,8 +370,6 @@ async def _create_attribute_types(connection: AsyncConnection) -> None: # noqa: async def _modify_object_classes(connection: AsyncConnection) -> None: # noqa: ARG001 async with container(scope=Scope.REQUEST) as cnt: session = await cnt.get(AsyncSession) - at_dao = await cnt.get(AttributeTypeDAO) - oc_dao = await cnt.get(ObjectClassDAO) for oc_name, at_names in ( ("user", ["nsAccountLock", "shadowExpire"]), @@ -380,9 +377,22 @@ async def _modify_object_classes(connection: AsyncConnection) -> None: # noqa: ("posixAccount", ["posixEmail"]), ("organizationalUnit", ["title", "jpegPhoto"]), ): - object_class = await oc_dao.get(oc_name) - attribute_types_may = await at_dao.get_all_by_names(at_names) - object_class.attribute_types_may.extend(attribute_types_may) + object_class = await session.scalar( + select(ObjectClass) + .filter_by(name=oc_name) + .options(selectinload(qa(ObjectClass.attribute_types_may))), + ) + + if not object_class: + continue + + attribute_types = await session.scalars( + select(AttributeType) + .where(qa(AttributeType.name).in_(at_names), + ), + ) # fmt: skip + + object_class.attribute_types_may.extend(attribute_types.all()) await session.commit() diff --git a/interface b/interface index a4bb0dc38..f31962020 160000 --- a/interface +++ b/interface @@ -1 +1 @@ -Subproject commit a4bb0dc386398d1edfd251b6498c6e7c3aeda283 +Subproject commit f31962020a6689e6a4c61fb3349db5b5c7895f92