|
@@ -173,6 +173,7 @@ class _BookingClient:
|
|
|
self._months_inflight: dict[tuple[int, int], asyncio.Task] = {}
|
|
self._months_inflight: dict[tuple[int, int], asyncio.Task] = {}
|
|
|
self._refresh_lock = asyncio.Lock()
|
|
self._refresh_lock = asyncio.Lock()
|
|
|
self._refresh_task: asyncio.Task | None = None
|
|
self._refresh_task: asyncio.Task | None = None
|
|
|
|
|
+ self._http = httpx.AsyncClient(timeout=10.0)
|
|
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
|
def from_env(cls) -> '_BookingClient':
|
|
def from_env(cls) -> '_BookingClient':
|
|
@@ -386,12 +387,11 @@ class _BookingClient:
|
|
|
'tlc': '1',
|
|
'tlc': '1',
|
|
|
}
|
|
}
|
|
|
async def _do_request() -> httpx.Response:
|
|
async def _do_request() -> httpx.Response:
|
|
|
- async with httpx.AsyncClient() as client:
|
|
|
|
|
- return await client.post(
|
|
|
|
|
- f'{_BASE}/dml/graphql.json',
|
|
|
|
|
- params=params,
|
|
|
|
|
- json={'operationName': operation_name, 'variables': variables, 'query': query},
|
|
|
|
|
- headers=self._msg_headers(),
|
|
|
|
|
|
|
+ return await self._http.post(
|
|
|
|
|
+ f'{_BASE}/dml/graphql.json',
|
|
|
|
|
+ params=params,
|
|
|
|
|
+ json={'operationName': operation_name, 'variables': variables, 'query': query},
|
|
|
|
|
+ headers=self._msg_headers(),
|
|
|
)
|
|
)
|
|
|
try:
|
|
try:
|
|
|
r = await _do_request()
|
|
r = await _do_request()
|
|
@@ -421,9 +421,8 @@ class _BookingClient:
|
|
|
async def _multipart_post(self, url: str, referer: str, body: dict, extra_headers: dict | None = None) -> dict:
|
|
async def _multipart_post(self, url: str, referer: str, body: dict, extra_headers: dict | None = None) -> dict:
|
|
|
async def _attempt() -> httpx.Response:
|
|
async def _attempt() -> httpx.Response:
|
|
|
headers = self._rest_headers(referer, extra_headers)
|
|
headers = self._rest_headers(referer, extra_headers)
|
|
|
- async with httpx.AsyncClient() as client:
|
|
|
|
|
- return await client.post(url, params=self._common_params(),
|
|
|
|
|
- files={'request': (None, json.dumps(body))}, headers=headers)
|
|
|
|
|
|
|
+ return await self._http.post(url, params=self._common_params(),
|
|
|
|
|
+ files={'request': (None, json.dumps(body))}, headers=headers)
|
|
|
try:
|
|
try:
|
|
|
r = await _attempt()
|
|
r = await _attempt()
|
|
|
except (httpx.TransportError, OSError, ExceptionGroup) as e:
|
|
except (httpx.TransportError, OSError, ExceptionGroup) as e:
|
|
@@ -441,14 +440,13 @@ class _BookingClient:
|
|
|
referer = self._matrix_referer()
|
|
referer = self._matrix_referer()
|
|
|
params = {'view_mode': 'MATRIX', 'hotel_id': str(self._hotel_id),
|
|
params = {'view_mode': 'MATRIX', 'hotel_id': str(self._hotel_id),
|
|
|
'lang': self._lang, 'ses': self._session}
|
|
'lang': self._lang, 'ses': self._session}
|
|
|
- async with httpx.AsyncClient() as client:
|
|
|
|
|
- return await client.post(
|
|
|
|
|
- f'{_BASE}/dml/graphql.json',
|
|
|
|
|
- params=params,
|
|
|
|
|
- json={'operationName': 'updateRoomDateMutation', 'variables': variables,
|
|
|
|
|
- 'extensions': {}, 'query': _UPDATE_MUTATION},
|
|
|
|
|
- headers=self._gql_headers(referer),
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ return await self._http.post(
|
|
|
|
|
+ f'{_BASE}/dml/graphql.json',
|
|
|
|
|
+ params=params,
|
|
|
|
|
+ json={'operationName': 'updateRoomDateMutation', 'variables': variables,
|
|
|
|
|
+ 'extensions': {}, 'query': _UPDATE_MUTATION},
|
|
|
|
|
+ headers=self._gql_headers(referer),
|
|
|
|
|
+ )
|
|
|
try:
|
|
try:
|
|
|
r = await _attempt()
|
|
r = await _attempt()
|
|
|
except (httpx.TransportError, OSError, ExceptionGroup) as e:
|
|
except (httpx.TransportError, OSError, ExceptionGroup) as e:
|
|
@@ -575,12 +573,11 @@ class _BookingClient:
|
|
|
'room_id': str(self._room_id),
|
|
'room_id': str(self._room_id),
|
|
|
'only_basic_info': '1',
|
|
'only_basic_info': '1',
|
|
|
})
|
|
})
|
|
|
- async with httpx.AsyncClient() as client:
|
|
|
|
|
- return await client.post(
|
|
|
|
|
- f'{_BASE}/fresa/extranet/calendar/get_reservations',
|
|
|
|
|
- params=params,
|
|
|
|
|
- headers=self._rest_headers(referer),
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ return await self._http.post(
|
|
|
|
|
+ f'{_BASE}/fresa/extranet/calendar/get_reservations',
|
|
|
|
|
+ params=params,
|
|
|
|
|
+ headers=self._rest_headers(referer),
|
|
|
|
|
+ )
|
|
|
try:
|
|
try:
|
|
|
r = await _attempt()
|
|
r = await _attempt()
|
|
|
except (httpx.TransportError, OSError, ExceptionGroup) as e:
|
|
except (httpx.TransportError, OSError, ExceptionGroup) as e:
|