# ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import asyncpg from mirage.accessor.base import Accessor from mirage.resource.postgres.config import PostgresConfig from mirage.resource.secrets import reveal_secret class PostgresAccessor(Accessor): def __init__(self, config: PostgresConfig) -> None: self.config = config self._pool: asyncpg.Pool | None = None async def pool(self) -> asyncpg.Pool: if self._pool is None: self._pool = await asyncpg.create_pool( reveal_secret(self.config.dsn), server_settings={"default_transaction_read_only": "on"}, min_size=1, max_size=4, ) return self._pool async def close(self) -> None: if self._pool is not None: await self._pool.close() self._pool = None