77from sqlalchemy import select
88from sqlalchemy .ext .asyncio import AsyncSession
99
10- from entities import Attribute , Directory
10+ from entities import Attribute
1111from ldap_protocol .rid_manager .exceptions import (
1212 RIDManagerDomainIdentifierNotFoundError ,
1313 RIDManagerObjectSIDNotFoundError ,
1414)
15+ from ldap_protocol .utils .async_cache import domain_identifier_cache
1516from repo .pg .tables import queryable_attr as qa
1617
1718
@@ -22,11 +23,11 @@ def __init__(self, session: AsyncSession) -> None:
2223 """Initialize Object SID gateway."""
2324 self ._session = session
2425
25- async def get (self , directory : Directory ) -> str :
26+ async def get (self , directory_id : int ) -> str :
2627 """Get object SID."""
2728 query = await self ._session .scalar (
2829 select (Attribute ).where (
29- qa (Attribute .directory_id ) == directory . id ,
30+ qa (Attribute .directory_id ) == directory_id ,
3031 qa (Attribute .name ) == "objectSid" ,
3132 ),
3233 )
@@ -35,25 +36,26 @@ async def get(self, directory: Directory) -> str:
3536
3637 return query .value
3738
38- async def add (self , directory : Directory , object_sid : str ) -> None :
39+ async def add (self , directory_id : int , object_sid : str ) -> None :
3940 """Add object SID."""
4041 self ._session .add (
4142 Attribute (
4243 name = "objectSid" ,
4344 value = object_sid ,
44- directory_id = directory . id ,
45+ directory_id = directory_id ,
4546 ),
4647 )
4748
48- async def get_domain_identifier (self , domain : Directory ) -> str :
49- """Get domain identifier.
49+ async def get_domain_identifier (self ) -> str :
50+ """Get domain identifier (cached ``Attribute.value`` string)."""
51+ return await domain_identifier_cache .get_or_load (
52+ self ._load_domain_identifier_value ,
53+ )
5054
51- :return: Domain identifier
52- """
55+ async def _load_domain_identifier_value (self ) -> str :
5356 query = await self ._session .scalar (
5457 select (Attribute ).where (
5558 qa (Attribute .name ) == "DomainIdentifier" ,
56- qa (Attribute .directory_id ) == domain .id ,
5759 ),
5860 )
5961
0 commit comments