MCPcopy Index your code
hub / github.com/MagicStack/asyncpg / PoolConnectionHolder

Class PoolConnectionHolder

asyncpg/pool.py:112–326  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

110
111
112class PoolConnectionHolder:
113
114 __slots__ = ('_con', '_pool', '_loop', '_proxy',
115 '_max_queries', '_setup',
116 '_max_inactive_time', '_in_use',
117 '_inactive_callback', '_timeout',
118 '_generation')
119
120 def __init__(
121 self,
122 pool: "Pool",
123 *,
124 max_queries: float,
125 setup: Optional[Callable[[PoolConnectionProxy], Awaitable[None]]],
126 max_inactive_time: float,
127 ) -> None:
128
129 self._pool = pool
130 self._con: Optional[connection.Connection] = None
131 self._proxy: Optional[PoolConnectionProxy] = None
132
133 self._max_queries = max_queries
134 self._max_inactive_time = max_inactive_time
135 self._setup = setup
136 self._inactive_callback: Optional[Callable] = None
137 self._in_use: Optional[asyncio.Future] = None
138 self._timeout: Optional[float] = None
139 self._generation: Optional[int] = None
140
141 def is_connected(self) -> bool:
142 return self._con is not None and not self._con.is_closed()
143
144 def is_idle(self) -> bool:
145 return not self._in_use
146
147 async def connect(self) -> None:
148 if self._con is not None:
149 raise exceptions.InternalClientError(
150 'PoolConnectionHolder.connect() called while another '
151 'connection already exists')
152
153 self._con = await self._pool._get_new_connection()
154 self._generation = self._pool._generation
155 self._maybe_cancel_inactive_callback()
156 self._setup_inactive_callback()
157
158 async def acquire(self) -> PoolConnectionProxy:
159 if self._con is None or self._con.is_closed():
160 self._con = None
161 await self.connect()
162
163 elif self._generation != self._pool._generation:
164 # Connections have been expired, re-connect the holder.
165 self._pool._loop.create_task(
166 self._con.close(timeout=self._timeout))
167 self._con = None
168 await self.connect()
169

Callers 1

_initializeMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…