From fea7f61d687bfbf0df259b198afe64cc07b4f0c3 Mon Sep 17 00:00:00 2001 From: Max Bohomolov Date: Tue, 21 Oct 2025 00:46:38 +0000 Subject: [PATCH 1/2] update `impit` to 0.7.3 --- pyproject.toml | 2 +- src/apify_client/_utils.py | 2 +- .../clients/base/actor_job_base_client.py | 9 ++-- .../clients/base/resource_client.py | 10 ++--- .../base/resource_collection_client.py | 13 +++--- .../clients/resource_clients/actor.py | 13 +++--- .../clients/resource_clients/build.py | 5 +-- .../clients/resource_clients/dataset.py | 9 ++-- .../resource_clients/key_value_store.py | 5 +-- .../clients/resource_clients/request_queue.py | 41 +++++++++---------- .../clients/resource_clients/run.py | 13 +++--- .../clients/resource_clients/schedule.py | 5 +-- .../clients/resource_clients/task.py | 13 +++--- .../clients/resource_clients/user.py | 9 ++-- .../clients/resource_clients/webhook.py | 5 +-- src/apify_client/errors.py | 3 +- uv.lock | 2 +- 17 files changed, 72 insertions(+), 87 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fc76c348..faf640c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ keywords = ["apify", "api", "client", "automation", "crawling", "scraping"] dependencies = [ "apify-shared>=2.1.0,<3.0.0", "colorama>=0.4.0", - "impit>=0.5.3", + "impit>=0.7.3", "more_itertools>=10.0.0", ] diff --git a/src/apify_client/_utils.py b/src/apify_client/_utils.py index 04f1fdf0..e33b76d1 100644 --- a/src/apify_client/_utils.py +++ b/src/apify_client/_utils.py @@ -262,7 +262,7 @@ def maybe_parse_response(response: Response) -> Any: try: if is_content_type_json(content_type): - response_data = jsonlib.loads(response.text) + response_data = response.json() elif is_content_type_xml(content_type) or is_content_type_text(content_type): response_data = response.text else: diff --git a/src/apify_client/clients/base/actor_job_base_client.py b/src/apify_client/clients/base/actor_job_base_client.py index aed80855..abf7e274 100644 --- a/src/apify_client/clients/base/actor_job_base_client.py +++ b/src/apify_client/clients/base/actor_job_base_client.py @@ -1,7 +1,6 @@ from __future__ import annotations import asyncio -import json as jsonlib import math import time from datetime import datetime, timezone @@ -38,7 +37,7 @@ def _wait_for_finish(self, wait_secs: int | None = None) -> dict | None: method='GET', params=self._params(waitForFinish=wait_for_finish), ) - job = parse_date_fields(pluck_data(jsonlib.loads(response.text))) + job = parse_date_fields(pluck_data(response.json())) seconds_elapsed = math.floor((datetime.now(timezone.utc) - started_at).total_seconds()) if ActorJobStatus(job['status']).is_terminal or ( @@ -69,7 +68,7 @@ def _abort(self, *, gracefully: bool | None = None) -> dict: method='POST', params=self._params(gracefully=gracefully), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) class ActorJobBaseClientAsync(ResourceClientAsync): @@ -92,7 +91,7 @@ async def _wait_for_finish(self, wait_secs: int | None = None) -> dict | None: method='GET', params=self._params(waitForFinish=wait_for_finish), ) - job = parse_date_fields(pluck_data(jsonlib.loads(response.text))) + job = parse_date_fields(pluck_data(response.json())) seconds_elapsed = math.floor((datetime.now(timezone.utc) - started_at).total_seconds()) if ActorJobStatus(job['status']).is_terminal or ( @@ -123,4 +122,4 @@ async def _abort(self, *, gracefully: bool | None = None) -> dict: method='POST', params=self._params(gracefully=gracefully), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) diff --git a/src/apify_client/clients/base/resource_client.py b/src/apify_client/clients/base/resource_client.py index 10cf7755..ddf30adf 100644 --- a/src/apify_client/clients/base/resource_client.py +++ b/src/apify_client/clients/base/resource_client.py @@ -1,7 +1,5 @@ from __future__ import annotations -import json as jsonlib - from apify_client._utils import catch_not_found_or_throw, parse_date_fields, pluck_data from apify_client.clients.base.base_client import BaseClient, BaseClientAsync from apify_client.errors import ApifyApiError @@ -19,7 +17,7 @@ def _get(self, timeout_secs: int | None = None) -> dict | None: timeout_secs=timeout_secs, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -35,7 +33,7 @@ def _update(self, updated_fields: dict, timeout_secs: int | None = None) -> dict timeout_secs=timeout_secs, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def _delete(self, timeout_secs: int | None = None) -> None: try: @@ -62,7 +60,7 @@ async def _get(self, timeout_secs: int | None = None) -> dict | None: timeout_secs=timeout_secs, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -78,7 +76,7 @@ async def _update(self, updated_fields: dict, timeout_secs: int | None = None) - timeout_secs=timeout_secs, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def _delete(self, timeout_secs: int | None = None) -> None: try: diff --git a/src/apify_client/clients/base/resource_collection_client.py b/src/apify_client/clients/base/resource_collection_client.py index d8a7e76b..2e9c6063 100644 --- a/src/apify_client/clients/base/resource_collection_client.py +++ b/src/apify_client/clients/base/resource_collection_client.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import Any, Generic, TypeVar from apify_client._utils import parse_date_fields, pluck_data @@ -50,7 +49,7 @@ def _list(self, **kwargs: Any) -> ListPage: params=self._params(**kwargs), ) - return ListPage(parse_date_fields(pluck_data(jsonlib.loads(response.text)))) + return ListPage(parse_date_fields(pluck_data(response.json()))) def _create(self, resource: dict) -> dict: response = self.http_client.call( @@ -60,7 +59,7 @@ def _create(self, resource: dict) -> dict: json=resource, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def _get_or_create(self, name: str | None = None, resource: dict | None = None) -> dict: response = self.http_client.call( @@ -70,7 +69,7 @@ def _get_or_create(self, name: str | None = None, resource: dict | None = None) json=resource, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) class ResourceCollectionClientAsync(BaseClientAsync): @@ -83,7 +82,7 @@ async def _list(self, **kwargs: Any) -> ListPage: params=self._params(**kwargs), ) - return ListPage(parse_date_fields(pluck_data(jsonlib.loads(response.text)))) + return ListPage(parse_date_fields(pluck_data(response.json()))) async def _create(self, resource: dict) -> dict: response = await self.http_client.call( @@ -93,7 +92,7 @@ async def _create(self, resource: dict) -> dict: json=resource, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def _get_or_create( self, @@ -107,4 +106,4 @@ async def _get_or_create( json=resource, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) diff --git a/src/apify_client/clients/resource_clients/actor.py b/src/apify_client/clients/resource_clients/actor.py index a55307b9..28dd62db 100644 --- a/src/apify_client/clients/resource_clients/actor.py +++ b/src/apify_client/clients/resource_clients/actor.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import TYPE_CHECKING, Any, Literal from apify_client._utils import ( @@ -286,7 +285,7 @@ def start( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def call( self, @@ -404,7 +403,7 @@ def build( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def builds(self) -> BuildCollectionClient: """Retrieve a client for the builds of this Actor.""" @@ -435,7 +434,7 @@ async def default_build( ) response = self.http_client.call(url=self._url('builds/default'), method='GET', params=request_params) - data = pluck_data(jsonlib.loads(response.text)) + data = pluck_data(response.json()) return BuildClient( base_url=self.base_url, @@ -706,7 +705,7 @@ async def start( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def call( self, @@ -828,7 +827,7 @@ async def build( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def builds(self) -> BuildCollectionClientAsync: """Retrieve a client for the builds of this Actor.""" @@ -863,7 +862,7 @@ async def default_build( method='GET', params=request_params, ) - data = pluck_data(jsonlib.loads(response.text)) + data = pluck_data(response.json()) return BuildClientAsync( base_url=self.base_url, diff --git a/src/apify_client/clients/resource_clients/build.py b/src/apify_client/clients/resource_clients/build.py index 0c12d5b4..95901c93 100644 --- a/src/apify_client/clients/resource_clients/build.py +++ b/src/apify_client/clients/resource_clients/build.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import Any from apify_client.clients.base import ActorJobBaseClient, ActorJobBaseClientAsync @@ -54,7 +53,7 @@ def get_open_api_definition(self) -> dict | None: method='GET', ) - response_data: dict = jsonlib.loads(response.text) + response_data: dict = response.json() return response_data @@ -130,7 +129,7 @@ async def get_open_api_definition(self) -> dict | None: method='GET', ) - response_data: dict = jsonlib.loads(response.text) + response_data: dict = response.json() return response_data diff --git a/src/apify_client/clients/resource_clients/dataset.py b/src/apify_client/clients/resource_clients/dataset.py index aadf592d..078e568a 100644 --- a/src/apify_client/clients/resource_clients/dataset.py +++ b/src/apify_client/clients/resource_clients/dataset.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib import warnings from contextlib import asynccontextmanager, contextmanager from typing import TYPE_CHECKING, Any @@ -141,7 +140,7 @@ def list_items( params=request_params, ) - data = jsonlib.loads(response.text) + data = response.json() return ListPage( { @@ -559,7 +558,7 @@ def get_statistics(self) -> dict | None: params=self._params(), timeout_secs=_SMALL_TIMEOUT, ) - return pluck_data(jsonlib.loads(response.text)) + return pluck_data(response.json()) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -739,7 +738,7 @@ async def list_items( params=request_params, ) - data = jsonlib.loads(response.text) + data = response.json() return ListPage( { @@ -1066,7 +1065,7 @@ async def get_statistics(self) -> dict | None: params=self._params(), timeout_secs=_SMALL_TIMEOUT, ) - return pluck_data(jsonlib.loads(response.text)) + return pluck_data(response.json()) except ApifyApiError as exc: catch_not_found_or_throw(exc) diff --git a/src/apify_client/clients/resource_clients/key_value_store.py b/src/apify_client/clients/resource_clients/key_value_store.py index 7f74b903..f1d03e96 100644 --- a/src/apify_client/clients/resource_clients/key_value_store.py +++ b/src/apify_client/clients/resource_clients/key_value_store.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from contextlib import asynccontextmanager, contextmanager from http import HTTPStatus from typing import TYPE_CHECKING, Any @@ -106,7 +105,7 @@ def list_keys( timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def get_record(self, key: str) -> dict | None: """Retrieve the given record from the key-value store. @@ -424,7 +423,7 @@ async def list_keys( timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def get_record(self, key: str) -> dict | None: """Retrieve the given record from the key-value store. diff --git a/src/apify_client/clients/resource_clients/request_queue.py b/src/apify_client/clients/resource_clients/request_queue.py index 7d1b8974..c3ee1bf6 100644 --- a/src/apify_client/clients/resource_clients/request_queue.py +++ b/src/apify_client/clients/resource_clients/request_queue.py @@ -1,7 +1,6 @@ from __future__ import annotations import asyncio -import json as jsonlib import logging import math from collections.abc import Iterable @@ -120,7 +119,7 @@ def list_head(self, *, limit: int | None = None) -> dict: timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def list_and_lock_head(self, *, lock_secs: int, limit: int | None = None) -> dict: """Retrieve a given number of unlocked requests from the beginning of the queue and lock them for a given time. @@ -143,7 +142,7 @@ def list_and_lock_head(self, *, lock_secs: int, limit: int | None = None) -> dic timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def add_request(self, request: dict, *, forefront: bool | None = None) -> dict: """Add a request to the queue. @@ -167,7 +166,7 @@ def add_request(self, request: dict, *, forefront: bool | None = None) -> dict: timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def get_request(self, request_id: str) -> dict | None: """Retrieve a request from the queue. @@ -187,7 +186,7 @@ def get_request(self, request_id: str) -> dict | None: params=self._params(), timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -218,7 +217,7 @@ def update_request(self, request: dict, *, forefront: bool | None = None) -> dic timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def delete_request(self, request_id: str) -> None: """Delete a request from the queue. @@ -264,7 +263,7 @@ def prolong_request_lock( timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def delete_request_lock(self, request_id: str, *, forefront: bool | None = None) -> None: """Delete the lock on a request. @@ -353,7 +352,7 @@ def batch_add_requests( timeout_secs=_MEDIUM_TIMEOUT, ) - response_parsed = parse_date_fields(pluck_data(jsonlib.loads(response.text))) + response_parsed = parse_date_fields(pluck_data(response.json())) processed_requests.extend(response_parsed.get('processedRequests', [])) unprocessed_requests.extend(response_parsed.get('unprocessedRequests', [])) @@ -380,7 +379,7 @@ def batch_delete_requests(self, requests: list[dict]) -> dict: timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def list_requests( self, @@ -405,7 +404,7 @@ def list_requests( timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def unlock_requests(self: RequestQueueClient) -> dict: """Unlock all requests in the queue, which were locked by the same clientKey or from the same Actor run. @@ -423,7 +422,7 @@ def unlock_requests(self: RequestQueueClient) -> dict: params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) class RequestQueueClientAsync(ResourceClientAsync): @@ -500,7 +499,7 @@ async def list_head(self, *, limit: int | None = None) -> dict: timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def list_and_lock_head(self, *, lock_secs: int, limit: int | None = None) -> dict: """Retrieve a given number of unlocked requests from the beginning of the queue and lock them for a given time. @@ -523,7 +522,7 @@ async def list_and_lock_head(self, *, lock_secs: int, limit: int | None = None) timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def add_request(self, request: dict, *, forefront: bool | None = None) -> dict: """Add a request to the queue. @@ -547,7 +546,7 @@ async def add_request(self, request: dict, *, forefront: bool | None = None) -> timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def get_request(self, request_id: str) -> dict | None: """Retrieve a request from the queue. @@ -567,7 +566,7 @@ async def get_request(self, request_id: str) -> dict | None: params=self._params(), timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -598,7 +597,7 @@ async def update_request(self, request: dict, *, forefront: bool | None = None) timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def delete_request(self, request_id: str) -> None: """Delete a request from the queue. @@ -642,7 +641,7 @@ async def prolong_request_lock( timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def delete_request_lock( self, @@ -698,7 +697,7 @@ async def _batch_add_requests_worker( timeout_secs=_MEDIUM_TIMEOUT, ) - response_parsed = parse_date_fields(pluck_data(jsonlib.loads(response.text))) + response_parsed = parse_date_fields(pluck_data(response.json())) processed_requests.extend(response_parsed.get('processedRequests', [])) unprocessed_requests.extend(response_parsed.get('unprocessedRequests', [])) @@ -808,7 +807,7 @@ async def batch_delete_requests(self, requests: list[dict]) -> dict: json=requests, timeout_secs=_SMALL_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def list_requests( self, @@ -833,7 +832,7 @@ async def list_requests( timeout_secs=_MEDIUM_TIMEOUT, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def unlock_requests(self: RequestQueueClientAsync) -> dict: """Unlock all requests in the queue, which were locked by the same clientKey or from the same Actor run. @@ -851,4 +850,4 @@ async def unlock_requests(self: RequestQueueClientAsync) -> dict: params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) diff --git a/src/apify_client/clients/resource_clients/run.py b/src/apify_client/clients/resource_clients/run.py index 22f4ac02..d934c01b 100644 --- a/src/apify_client/clients/resource_clients/run.py +++ b/src/apify_client/clients/resource_clients/run.py @@ -1,7 +1,6 @@ from __future__ import annotations import json -import json as jsonlib import logging import random import string @@ -152,7 +151,7 @@ def metamorph( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def resurrect( self, @@ -203,7 +202,7 @@ def resurrect( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def reboot(self) -> dict: """Reboot an Actor run. Only runs that are running, i.e. runs with status RUNNING can be rebooted. @@ -217,7 +216,7 @@ def reboot(self) -> dict: url=self._url('reboot'), method='POST', ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def dataset(self) -> DatasetClient: """Get the client for the default dataset of the Actor run. @@ -477,7 +476,7 @@ async def metamorph( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def resurrect( self, @@ -528,7 +527,7 @@ async def resurrect( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def reboot(self) -> dict: """Reboot an Actor run. Only runs that are running, i.e. runs with status RUNNING can be rebooted. @@ -542,7 +541,7 @@ async def reboot(self) -> dict: url=self._url('reboot'), method='POST', ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def dataset(self) -> DatasetClientAsync: """Get the client for the default dataset of the Actor run. diff --git a/src/apify_client/clients/resource_clients/schedule.py b/src/apify_client/clients/resource_clients/schedule.py index 8aed0ace..b8908853 100644 --- a/src/apify_client/clients/resource_clients/schedule.py +++ b/src/apify_client/clients/resource_clients/schedule.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import Any from apify_client._utils import catch_not_found_or_throw, filter_out_none_values_recursively, pluck_data_as_list @@ -113,7 +112,7 @@ def get_log(self) -> list | None: method='GET', params=self._params(), ) - return pluck_data_as_list(jsonlib.loads(response.text)) + return pluck_data_as_list(response.json()) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -202,7 +201,7 @@ async def get_log(self) -> list | None: method='GET', params=self._params(), ) - return pluck_data_as_list(jsonlib.loads(response.text)) + return pluck_data_as_list(response.json()) except ApifyApiError as exc: catch_not_found_or_throw(exc) diff --git a/src/apify_client/clients/resource_clients/task.py b/src/apify_client/clients/resource_clients/task.py index 4f53fb6b..da0837d2 100644 --- a/src/apify_client/clients/resource_clients/task.py +++ b/src/apify_client/clients/resource_clients/task.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import TYPE_CHECKING, Any, cast from apify_client._utils import ( @@ -212,7 +211,7 @@ def start( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) def call( self, @@ -279,7 +278,7 @@ def get_input(self) -> dict | None: method='GET', params=self._params(), ) - return cast('dict', jsonlib.loads(response.text)) + return cast('dict', response.json()) except ApifyApiError as exc: catch_not_found_or_throw(exc) return None @@ -298,7 +297,7 @@ def update_input(self, *, task_input: dict) -> dict: params=self._params(), json=task_input, ) - return cast('dict', jsonlib.loads(response.text)) + return cast('dict', response.json()) def runs(self) -> RunCollectionClient: """Retrieve a client for the runs of this task.""" @@ -480,7 +479,7 @@ async def start( params=request_params, ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) async def call( self, @@ -547,7 +546,7 @@ async def get_input(self) -> dict | None: method='GET', params=self._params(), ) - return cast('dict', jsonlib.loads(response.text)) + return cast('dict', response.json()) except ApifyApiError as exc: catch_not_found_or_throw(exc) return None @@ -566,7 +565,7 @@ async def update_input(self, *, task_input: dict) -> dict: params=self._params(), json=task_input, ) - return cast('dict', jsonlib.loads(response.text)) + return cast('dict', response.json()) def runs(self) -> RunCollectionClientAsync: """Retrieve a client for the runs of this task.""" diff --git a/src/apify_client/clients/resource_clients/user.py b/src/apify_client/clients/resource_clients/user.py index b3984b0b..86a81c07 100644 --- a/src/apify_client/clients/resource_clients/user.py +++ b/src/apify_client/clients/resource_clients/user.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import Any from apify_client._utils import ( @@ -53,7 +52,7 @@ def monthly_usage(self) -> dict | None: method='GET', params=self._params(), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -77,7 +76,7 @@ def limits(self) -> dict | None: method='GET', params=self._params(), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -144,7 +143,7 @@ async def monthly_usage(self) -> dict | None: method='GET', params=self._params(), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -168,7 +167,7 @@ async def limits(self) -> dict | None: method='GET', params=self._params(), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) diff --git a/src/apify_client/clients/resource_clients/webhook.py b/src/apify_client/clients/resource_clients/webhook.py index 06544719..559485a6 100644 --- a/src/apify_client/clients/resource_clients/webhook.py +++ b/src/apify_client/clients/resource_clients/webhook.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import TYPE_CHECKING, Any from apify_client._utils import ( @@ -150,7 +149,7 @@ def test(self) -> dict | None: params=self._params(), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) @@ -260,7 +259,7 @@ async def test(self) -> dict | None: params=self._params(), ) - return parse_date_fields(pluck_data(jsonlib.loads(response.text))) + return parse_date_fields(pluck_data(response.json())) except ApifyApiError as exc: catch_not_found_or_throw(exc) diff --git a/src/apify_client/errors.py b/src/apify_client/errors.py index d34552fe..1b83003c 100644 --- a/src/apify_client/errors.py +++ b/src/apify_client/errors.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json as jsonlib from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -33,7 +32,7 @@ def __init__(self, response: impit.Response, attempt: int, method: str = 'GET') self.message = f'Unexpected error: {response.text}' try: - response_data = jsonlib.loads(response.text) + response_data = response.json() if 'error' in response_data: self.message = response_data['error']['message'] self.type = response_data['error']['type'] diff --git a/uv.lock b/uv.lock index ffec5f87..ffc966c6 100644 --- a/uv.lock +++ b/uv.lock @@ -37,7 +37,7 @@ dev = [ requires-dist = [ { name = "apify-shared", specifier = ">=2.1.0,<3.0.0" }, { name = "colorama", specifier = ">=0.4.0" }, - { name = "impit", specifier = ">=0.5.3" }, + { name = "impit", specifier = ">=0.7.3" }, { name = "more-itertools", specifier = ">=10.0.0" }, ] From b580461ea44e08eb2365556832ba107d48e1bdb0 Mon Sep 17 00:00:00 2001 From: Max Bohomolov Date: Wed, 22 Oct 2025 12:50:38 +0000 Subject: [PATCH 2/2] use 0.8.0 --- pyproject.toml | 2 +- uv.lock | 99 ++++++++++++++++++++++++++------------------------ 2 files changed, 53 insertions(+), 48 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index faf640c8..43d71432 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ keywords = ["apify", "api", "client", "automation", "crawling", "scraping"] dependencies = [ "apify-shared>=2.1.0,<3.0.0", "colorama>=0.4.0", - "impit>=0.7.3", + "impit>=0.8.0", "more_itertools>=10.0.0", ] diff --git a/uv.lock b/uv.lock index ffc966c6..c4a74053 100644 --- a/uv.lock +++ b/uv.lock @@ -37,7 +37,7 @@ dev = [ requires-dist = [ { name = "apify-shared", specifier = ">=2.1.0,<3.0.0" }, { name = "colorama", specifier = ">=0.4.0" }, - { name = "impit", specifier = ">=0.7.3" }, + { name = "impit", specifier = ">=0.8.0" }, { name = "more-itertools", specifier = ">=10.0.0" }, ] @@ -531,52 +531,57 @@ wheels = [ [[package]] name = "impit" -version = "0.7.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/b4/b3c6da88ee061dbd24e428c0527585d19982c54edf7f195ceba1da89445a/impit-0.7.3.tar.gz", hash = "sha256:c3ec302480a7cf2ceeec439391f5e903c6d113e935750150c1a4b7fb93dc2e37", size = 128658, upload-time = "2025-10-17T12:00:00.531Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/65/d1/6736d5d46d00b9fab72cd62b51bd997e43840ccff35a8fa3e2e495095d71/impit-0.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:021fb34ffef657886aebaccce0e0a5a32d9fa6a8995accb7a1f4c132cf8c52da", size = 3866117, upload-time = "2025-10-17T11:58:34.739Z" }, - { url = "https://files.pythonhosted.org/packages/c2/f1/b0295d9bd470c7cf7f577daa9e89228d5264ead515ed98a056b94a347a63/impit-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2ca58fdc2da8a4c81f5a008dc31f3e2720c95820851a0d07c4975f5f7cc14d6", size = 3688198, upload-time = "2025-10-17T11:58:37.551Z" }, - { url = "https://files.pythonhosted.org/packages/c9/50/2a4392282b5e289db24b9a0648342f2b7252ef045ffd0ee7d78bdd10c4d5/impit-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67cb9464e120151a32b27ca46778d7d78356ed30d3bf962a93f972f8f02f2fbf", size = 6033906, upload-time = "2025-10-17T11:58:38.943Z" }, - { url = "https://files.pythonhosted.org/packages/4d/54/85868ae9680cef42f6fdef4c5ed865e3663c1d5f1ee1de9e4a9512f2323b/impit-0.7.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:519fcaf2f6cb218bcba870ba0cdc6015b754c0924fc66929dd9f415f389c129d", size = 6042923, upload-time = "2025-10-17T11:58:40.685Z" }, - { url = "https://files.pythonhosted.org/packages/21/33/244862e7888837884ca4537d2508fa3cb209834fd22269e31a75be937613/impit-0.7.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ad101eeac79501b3074ccb12f53438a68c02ac54d903a0d411de4b7e878253b1", size = 6399213, upload-time = "2025-10-17T11:58:42.256Z" }, - { url = "https://files.pythonhosted.org/packages/59/1f/e815325343605c6d61fe3f1a81564a49dd8dcb27535b66910daa2b1c07a3/impit-0.7.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7d150c27e8e40ba00fca1769ec07fc4a6d79213941cc6d971002c21a6d4b98e7", size = 6256361, upload-time = "2025-10-17T11:58:44.359Z" }, - { url = "https://files.pythonhosted.org/packages/c0/68/9a66d5d48fec989f6ca24281ef5f2f09b6d4a15ecb40478a8c5f5420ae1c/impit-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4639df0bf7051569826b8fd684d7897be879cb05d7f679182e3faa3b61c3128d", size = 3871585, upload-time = "2025-10-17T11:58:46.178Z" }, - { url = "https://files.pythonhosted.org/packages/e1/52/973ef4a442bdaf355232b72adb851034fbd6ea6e9737a4932a727ea08781/impit-0.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:457d70c1ebb4de48f781e0eae877fb7123abd55e7f592b24449244d7427bc334", size = 3865898, upload-time = "2025-10-17T11:58:47.653Z" }, - { url = "https://files.pythonhosted.org/packages/40/f7/459e9fdb3199e9d0c8474222a01fb460f1cb7afa6044272aa255edafc94f/impit-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdc5e463c3ed7fafe514b0714e910f6acbbf23b38cd2ebc5a9799f405827981f", size = 3688330, upload-time = "2025-10-17T11:58:49.242Z" }, - { url = "https://files.pythonhosted.org/packages/bf/9b/8f1d489220b1252250828d6cb6946e7914a7f43552a375986fdb4a125db8/impit-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e959bdb13eb83ac46550f2571b9b6d9ec9e746af37df084a1f5d44570bb3ab5", size = 6033621, upload-time = "2025-10-17T11:58:50.658Z" }, - { url = "https://files.pythonhosted.org/packages/b9/1f/2da6f580e5515ef586ad8f761276f00668ac1dd95734e4dec99af575cd53/impit-0.7.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f71931d966172eae2aea93093a6bd4bdc037823532c5cb8a9638d76ab51000e0", size = 6042797, upload-time = "2025-10-17T11:58:52.378Z" }, - { url = "https://files.pythonhosted.org/packages/14/67/1a0421e58e1cafa6dbefee0dea39853c88d80fef20727da01e4508d6b4ec/impit-0.7.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:482bdb2bb1678570ee3fdb195bcc663ad58d1a6f16a2c15aa2d8dcff99347771", size = 6399025, upload-time = "2025-10-17T11:58:53.825Z" }, - { url = "https://files.pythonhosted.org/packages/7a/96/1de73f63ea21f4f896c41a483292207ca0912a924cce66ab62c1d68ff932/impit-0.7.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6a8d61ca738d9f4b3325d971d1a9a32be436feabe873c095bb5bd2f2a272fcf", size = 6255940, upload-time = "2025-10-17T11:58:56.183Z" }, - { url = "https://files.pythonhosted.org/packages/4e/28/a86a8db5791953fe8a40053a1937d81b0adfc3d8092553aa5c4a88a17fcc/impit-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:385053afd702650c72e1fb195a3e5f285adf4eb0a33b526c6db1bb724d0f035d", size = 3871494, upload-time = "2025-10-17T11:58:57.736Z" }, - { url = "https://files.pythonhosted.org/packages/d6/8f/4267bc44984ca2e3450e443906b2c25d307c6bd3d0dfdb6368488b45a2c6/impit-0.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8ca6bdc23e596deab95f2dd062b434cb580bfc3c7c464cb187bfb6b6b8d7c602", size = 3865883, upload-time = "2025-10-17T11:58:59.053Z" }, - { url = "https://files.pythonhosted.org/packages/44/87/8400fa00a0307dd10c841cf62f02725ca9478ff694e86999caa3f773060f/impit-0.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:91316a90cdb37d91f2a9f3ff7b9f1695b8a7c9963f8bb63a66dfd3aca88d40e1", size = 3687549, upload-time = "2025-10-17T11:59:00.472Z" }, - { url = "https://files.pythonhosted.org/packages/23/17/bb0680e47135acc09f74b8deddc17fe591c0ca1ffd0d9320874f477beb59/impit-0.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bf5b74b3eb3687f6506dede52747c4271b01ce55ccc4217575a0d13265855cf", size = 6032133, upload-time = "2025-10-17T11:59:01.939Z" }, - { url = "https://files.pythonhosted.org/packages/8e/7b/e80b704c68127bec9b7879dfa0d0251495db102aab09066714a7cf11edd1/impit-0.7.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9e6beb157eaa5f096e9b7d1db44eb0d52102547f4f3a5013b54e22979b366b9d", size = 6041573, upload-time = "2025-10-17T11:59:03.908Z" }, - { url = "https://files.pythonhosted.org/packages/5a/da/76c7acc15d75fecf6a951c7d99af45c319e5e7500f277d6c6f9ca832a217/impit-0.7.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e241f791dbb327d6d1ee8ad18f38dda6033c68cbeb47f596b631a014beedfdac", size = 6397799, upload-time = "2025-10-17T11:59:05.569Z" }, - { url = "https://files.pythonhosted.org/packages/43/e5/86dd91cb2427e439e691566a44df3680e1eff6c391a22cdf3d8c8997fe58/impit-0.7.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d7ffd74d14f6d67e622862b963ac9e724e80202d5012337237fb54574da278", size = 6253896, upload-time = "2025-10-17T11:59:07.053Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ad/131e14152ff171090165dc7b6a860ebe0b7db9182b668d3ce434c6f5b80c/impit-0.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:4e396f24ce21437b3ac1452269d0db1a2d5d2024f1358101587019a50f04c35a", size = 3870962, upload-time = "2025-10-17T11:59:08.493Z" }, - { url = "https://files.pythonhosted.org/packages/0e/23/72c79850271a3d170395249c256a3f735c31b414915f5a0d54a407e84e00/impit-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:13692606df77fabc0c5874327cdd7c0665bd9c2f13fec4a5b28684012e84c20d", size = 3866009, upload-time = "2025-10-17T11:59:10.065Z" }, - { url = "https://files.pythonhosted.org/packages/30/65/74fdd805cc561b2d033fee5e3c88239e1892b5b34f26aad55034179ca717/impit-0.7.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d0b2853409311f79dfbfd1beca10b4a120d0f9495ef6ef44205ded0836f8f88", size = 3687765, upload-time = "2025-10-17T11:59:11.469Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4d/8b800e4f2a90bf25eb7dbda153bb9a495b11724aa568339768b79a441290/impit-0.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1585c022409fffeae866159a983485a4768454489814e888c2f792c05fe8b18", size = 6032026, upload-time = "2025-10-17T11:59:13.166Z" }, - { url = "https://files.pythonhosted.org/packages/68/40/835903467cfb6a38cf32e841fd4e90b612b886cd9d8a47c9297721b9b4a2/impit-0.7.3-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f0276ff3d607f2807c1a6ca9de1a8e43540634ee37f11423443771f6af48e514", size = 6041109, upload-time = "2025-10-17T11:59:14.662Z" }, - { url = "https://files.pythonhosted.org/packages/5e/01/9755634aa5f4449ed31bc9c226448baeda036870a275a03d8763048a0b70/impit-0.7.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:80af53fe8302aa3aa5a3715cda4d21850e6f86b46c475538d09717c007a3fdad", size = 6397974, upload-time = "2025-10-17T11:59:16.115Z" }, - { url = "https://files.pythonhosted.org/packages/b3/4f/553a0030c2d8a5107d38c061ae84980809bded7b98397d80b56412f3ae25/impit-0.7.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9b4700c30918e8a5a25e4d7083825bbe6e35231b342e9c1661af61d055ff5db4", size = 6253870, upload-time = "2025-10-17T11:59:17.589Z" }, - { url = "https://files.pythonhosted.org/packages/a5/d1/61b4075a648401f10db091a893952296f8fea4384c1fdf5c8faf7f085739/impit-0.7.3-cp313-cp313-win_amd64.whl", hash = "sha256:1dbe66b0e2592995489c6ae1f26bbd84d22ad78a794bd9730fefcbe3a7ed7024", size = 3870856, upload-time = "2025-10-17T11:59:19.028Z" }, - { url = "https://files.pythonhosted.org/packages/81/5c/963fe4763ad58d036edec53ce829379160c7070fcdd8655a6d743cc5b8e3/impit-0.7.3-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:13b599172458d8d83f6d6d5fb237739c24cc05c5861ec0c5053fb4876322e3c4", size = 6041072, upload-time = "2025-10-17T11:59:20.554Z" }, - { url = "https://files.pythonhosted.org/packages/94/39/027add475676927440a950212261c28bea0660a2f250d7b7b7f494722198/impit-0.7.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3cb17c6657334a8491ee53d8b79a105d348cf98fea3b6f21cbf2184d558c3ef4", size = 6397790, upload-time = "2025-10-17T11:59:22.476Z" }, - { url = "https://files.pythonhosted.org/packages/2e/c4/d3c5f1a8e6acf03ede86ac71bc61b23d19f27888dd049453f9aa41dc8677/impit-0.7.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:327db35707fdd84642a7a94ecdc5128a37d5eb2ea97cd7e6639db2f2278f306a", size = 6254792, upload-time = "2025-10-17T11:59:26.454Z" }, - { url = "https://files.pythonhosted.org/packages/5b/65/386a8dce4427253127d3a54549a55315a4637c56defc40776ea796058f47/impit-0.7.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:4e77364fb42ef1c23a08b91788f7afc253156f60c3be5b8b444c8c61e07668d3", size = 3866195, upload-time = "2025-10-17T11:59:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/41/5a/5457eff03a62839da8830f06ded5c6a3628bda6b140f84c15b4b436c2774/impit-0.7.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:75ecd3e9db3d0f24e3a948f67908f5ec3a4a7c8dd0b5b917415b74216ba6b8e5", size = 3688410, upload-time = "2025-10-17T11:59:29.618Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3e/78f102e51bc11a30a942a9dd49b87763e6036c50ebc1633b48ad2a7621d9/impit-0.7.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad047198fe65db05764539154e8d0a2c38e93c8d67fbc6212237e8fefa98ede1", size = 6032557, upload-time = "2025-10-17T11:59:30.983Z" }, - { url = "https://files.pythonhosted.org/packages/ae/ca/c01fa91a5067303ccf3b4a3f5593a492d24b504ba9ae0beee1eddfdb86a1/impit-0.7.3-cp314-cp314-win_amd64.whl", hash = "sha256:6f719135ed83631c9950679112b1fc8b65372013c1e5c504653a6e808af1b36d", size = 3871045, upload-time = "2025-10-17T11:59:32.498Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b0/b211d8d45c37f5df0ebb5ab3972eead3f6b00c561e3dc0b16f783523c87f/impit-0.7.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b1160644cc148398ef296b05f9048a6eb2ea81c2dd22e1318b9b585a262917ea", size = 6044368, upload-time = "2025-10-17T11:59:44.177Z" }, - { url = "https://files.pythonhosted.org/packages/2a/99/6fcf56f92f91c0551cdcfc1b93235d028a9ef7501a5bb1db4661676356df/impit-0.7.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:02956b9d7aca966986dd5e7a90d9201349c3308d8fde52b6fad9abd8fc7f4243", size = 6395898, upload-time = "2025-10-17T11:59:45.692Z" }, - { url = "https://files.pythonhosted.org/packages/74/23/c3eb3bde876ad5d5142bd4e6a0f22ef8e5946049ce1e1ca2b17a9fd7623a/impit-0.7.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e7ca1d034cdfd19c0c8b6e193544863a7323868213077dd72d106aad12bcbdff", size = 6257471, upload-time = "2025-10-17T11:59:47.097Z" }, - { url = "https://files.pythonhosted.org/packages/37/ec/2690c960533834323b5a606bf7abd26fcfbe63d7d3ce67d2c730ef9edc54/impit-0.7.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915e5036e213e96138a4273a1e894486b0be19dabf75e8858b756e876ccfedbf", size = 6034236, upload-time = "2025-10-17T11:59:48.645Z" }, - { url = "https://files.pythonhosted.org/packages/69/55/c1fbc407d285406b69f9f90d247c810f580e746b28612df515a0e76aa9cb/impit-0.7.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:36b7e6dceb2089d795366723bea6407ffd1f69410846d2599913faa4ea9c1df1", size = 6043625, upload-time = "2025-10-17T11:59:50.032Z" }, - { url = "https://files.pythonhosted.org/packages/aa/25/f2d60d57e7bd31e01673b27501cf7b5fec13482c8b45e06a3791c92d2242/impit-0.7.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dacf2b4186f3f1f9efca3c882c07af3703e8dd0b80759ef65874b7535d690163", size = 6399221, upload-time = "2025-10-17T11:59:52.382Z" }, - { url = "https://files.pythonhosted.org/packages/11/e9/254cce6562fa9956b82416a4ee68efb43922f808bc746cf40cbbe535390c/impit-0.7.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:a17fce94ec6b44e67485340e11715c13dd14d2453d9a3d78c82a3f51a976b63d", size = 6256688, upload-time = "2025-10-17T11:59:53.818Z" }, +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/0e/86ba7c4d4093cf332d69b09053bf9211c58a6d8ac198c2370c502b1abbd7/impit-0.8.0.tar.gz", hash = "sha256:a6786af6fb3a32a4e87fe35ab96cec9388818c92608b9e79fa4ce77fcd67edfb", size = 122274, upload-time = "2025-10-22T11:17:52.534Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/03/96e747e7a1bfcb12f69d3052098a6bf2dfb17f7a96ce1a31208c8e277754/impit-0.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2924ecd6502528275ed61c8be32153abb2e1c84c2f95457e1ef1decf773fde51", size = 3874233, upload-time = "2025-10-22T11:16:31.317Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9d/8c49ddcb5426e8bc7de69472372af358e60b066040b1ec13d9fb8c8bfd1d/impit-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fe69a665893dbd14412732ab72461a8d13a5098fa507f08ddea5196f51c439d", size = 3693149, upload-time = "2025-10-22T11:16:33.403Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d4/bc66ef11208dc3c5edc667cd81e605acf9487f0e6d3cd537bef9ff23310d/impit-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:802b5dd3cb488ebc158e9dd63515c9607dfd12719a125a5f0b7245b97a1375eb", size = 6040839, upload-time = "2025-10-22T11:16:35.136Z" }, + { url = "https://files.pythonhosted.org/packages/76/7c/ce4e46b46f4faecfd1c81ebf3e17f8692b31c4e8076751d62b688e352bbb/impit-0.8.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:03e0b338911f12dc8c795b33f9b0f80ec3be01165ec3163ed46a3bab850b4155", size = 6054400, upload-time = "2025-10-22T11:16:37.698Z" }, + { url = "https://files.pythonhosted.org/packages/d6/61/ddb4b8c516bc38266c4b61b62dde62e3c0205e0b665302a5460a2f287a90/impit-0.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:02bcae5d6f376935a580dd2a6209305f91aa37cd5c329a38d79aa473d2b4058b", size = 6406734, upload-time = "2025-10-22T11:16:39.521Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c9/e957542675e651f2f1c255c1acf85a69dc2bd4e0650792a63a3630db711d/impit-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d5b6ea71938bc6304a2715940fdeddbbea0731574abebbda8445afdfd041f54", size = 6263688, upload-time = "2025-10-22T11:16:41.263Z" }, + { url = "https://files.pythonhosted.org/packages/85/71/4200544ae05af813481ac74374207d3ef64a513acf37c8839786c2ad4ffe/impit-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:87a28c15eb999cbf2db1ebb62c09897b53f01644e07de6d88a13450d1c801b36", size = 3878944, upload-time = "2025-10-22T11:16:43.05Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/775f233e1056674704895eac455fa22ee11c3e00d4d345faa399116c2412/impit-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:beea0560d34e4e72fcf9f23e2dcd9db74f07fbfe570312076d95d6f090c5f475", size = 3874354, upload-time = "2025-10-22T11:16:44.851Z" }, + { url = "https://files.pythonhosted.org/packages/2a/6c/d726bf8529f131217e7375b128257046fcb09728163e13e7fda735177689/impit-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b8e0d6ed98edc2b8f604997f8d252791786b7f5d54c77cc5959307583296818d", size = 3693107, upload-time = "2025-10-22T11:16:46.231Z" }, + { url = "https://files.pythonhosted.org/packages/51/31/ebafaf1b0aca56c4875b5060f381d378bea67d4a8c3f6e4580595e85715b/impit-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cc75c4c2adf1f0ee024005cbdd788ba33524734a8dfc4730e581eb63a0ce0e", size = 6041952, upload-time = "2025-10-22T11:16:47.716Z" }, + { url = "https://files.pythonhosted.org/packages/db/d5/e38abfa2e37725af43c43d87cdfd06f0bd2abada7b2424bdc562883b07e0/impit-0.8.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:eec209be31425571691a5bceba4ab42507313b51f23daae9f0813be15e8db991", size = 6049903, upload-time = "2025-10-22T11:16:49.28Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4f/631a38b7053281ef5a2b24fd109be6f11545ae260872d8a0ce3173bbab7f/impit-0.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d363c6a9eb4bc576b53bc30dbf5f6a833b64c14bb8cded8c19cc3ae19ca035e", size = 6406674, upload-time = "2025-10-22T11:16:50.764Z" }, + { url = "https://files.pythonhosted.org/packages/24/34/07b08ba65fec53a48a8c87529cbb96f2919b37eaa9315851ccd27ebff04b/impit-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7f49d59c7ce6e63dfdf98c1befc4a9ba5df3400b3fbefb5b99c0d8568a145481", size = 6263861, upload-time = "2025-10-22T11:16:52.168Z" }, + { url = "https://files.pythonhosted.org/packages/88/dc/84078931a7bb71d67f4f42a3b19c84922c096c39b87c621bfb9150b562a8/impit-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:1f84997b6fcf3f7059b5bc0ead3f7a6ac88766cc0fac37f0ff0e64e1433cf7c3", size = 3878824, upload-time = "2025-10-22T11:16:54.308Z" }, + { url = "https://files.pythonhosted.org/packages/57/97/f3154c6c937ea723aa780616cf65c21e17335eb7bee8c85be3b97afbf50e/impit-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:132babfcf0e2d9a17992a004a4b1ebb6516a73d1456384f9a6d79466c3e71c54", size = 3874061, upload-time = "2025-10-22T11:16:55.655Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f4/ec5321f8692c9df6ba45202412fd71800e9e8f564922faf1dfa2efc952b4/impit-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba0d1c74a120ac509f83fd50ec2534fd1a48f8bb03c4095b2e7dc0107a7eb05c", size = 3692534, upload-time = "2025-10-22T11:16:57.253Z" }, + { url = "https://files.pythonhosted.org/packages/a9/67/80f6d347d3659bf88bbb21ebd98fef56e93be23f10b80e5f18c5e612655a/impit-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8885fb771542002fd85c51ef01a1aca3c7fc202fd34eaf94f85252500c369078", size = 6041385, upload-time = "2025-10-22T11:16:58.716Z" }, + { url = "https://files.pythonhosted.org/packages/13/d2/64b9323db3161fa6ffedd1c11113ccce27c06acae55f6c2f29fbcad3de43/impit-0.8.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e177472fc2601e8ecfe73fd217f1b918a3694ddd3699a27b75a3ab4e382b3db3", size = 6052905, upload-time = "2025-10-22T11:17:00.223Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d0/f6f64aeea1f80044789c7dd8db95c318602c82346da126ce57587abe4a7c/impit-0.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d7d5651aa6af05aedbabf987edfa4a98e0cbb8d0c1b4680e51c5e9e76f509e2", size = 6405519, upload-time = "2025-10-22T11:17:01.731Z" }, + { url = "https://files.pythonhosted.org/packages/15/52/df39c64da572ecfad2dd72a96f6514d7b70a170f5731d0875c0203c2a6f0/impit-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:19a2e0ea596799782ca5cfa9682345c2d8b24c574738ef345d7b30d7b906ac9f", size = 6263209, upload-time = "2025-10-22T11:17:03.562Z" }, + { url = "https://files.pythonhosted.org/packages/71/6a/7c8c08e1d32533073ba7c1353144cc14c06fcd30bced266616f74b465a8c/impit-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c3867abe5684cdffca5756cefb830724f127865dac532722892508fa64d8307", size = 3877702, upload-time = "2025-10-22T11:17:05.267Z" }, + { url = "https://files.pythonhosted.org/packages/df/90/988bc72e96aaa328ab618e981369028a4de81e8e6f0606269c4f7a33ca3a/impit-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e594d5f90bb7620b4b6efd0c1c0ff25d36af349f8867d8a6c538273eb715b805", size = 3874307, upload-time = "2025-10-22T11:17:06.651Z" }, + { url = "https://files.pythonhosted.org/packages/6b/aa/3fac076b91238fb168664744427123d9fbb3751cc00fb41a372c2950c0d0/impit-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a5b7324fb7fd134a36fda126f9afe1a83f3cae6cd0b1e50015cb943c9a51a474", size = 3692583, upload-time = "2025-10-22T11:17:10.961Z" }, + { url = "https://files.pythonhosted.org/packages/11/f7/ad7a1abdf06d256d188fe4a8d0ac88cdfa0d43d89a6f55a67a2b1fcb5f3d/impit-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1dfcb47b7c30952d10a18b1b316371ff746c871092756c6b501e85b067565a2", size = 6041341, upload-time = "2025-10-22T11:17:12.697Z" }, + { url = "https://files.pythonhosted.org/packages/3f/43/1ad3b4447b9395d5e11d30e641971c4db3a276d971df4c52edab212abcf7/impit-0.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:4d6ad5c220bbb7e9a56972e52a8398bc9dfa9535ed25724c4f0ca64a4483ebd9", size = 6052948, upload-time = "2025-10-22T11:17:14.566Z" }, + { url = "https://files.pythonhosted.org/packages/87/eb/bc0b8cd8a85dc540c98f503efbd24927784d3eb4147354e70b3eeba2de58/impit-0.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:acb0c93271976f36b26ad061a18262b82becb7f0be5a44a8284d6a5396da211b", size = 6405573, upload-time = "2025-10-22T11:17:16.039Z" }, + { url = "https://files.pythonhosted.org/packages/25/f1/30c2028f588e5abcbdf63eb7f06bcadc43b05df878ee209573512f70118a/impit-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:38e7796dbdf51cda16bc7188cde15e0d3474670077ec95843a05d1dfeff78834", size = 6263299, upload-time = "2025-10-22T11:17:18.406Z" }, + { url = "https://files.pythonhosted.org/packages/8e/47/1cc5698ae1620049938ee99422b16a49695ca14de51e5389bfc6379ccaba/impit-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:736cef35c308db97dd5bf89b2fde64c0466895c24f26e0be90df525fec41b119", size = 3877934, upload-time = "2025-10-22T11:17:19.857Z" }, + { url = "https://files.pythonhosted.org/packages/20/b3/06ee60bae27d539346ce85b497662a0649266e3dca3fa13e1039c80f66ea/impit-0.8.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a357ee9a5a2ff00a70e70d7af625bfae8e37b82ba6042428a57267aa39c8b24b", size = 3874970, upload-time = "2025-10-22T11:17:21.676Z" }, + { url = "https://files.pythonhosted.org/packages/17/66/a797050d9aa08239cf95f7fa2822350f81a5e5c734b670b9b1a15b1ee685/impit-0.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d39b26233bffe8c8d6655a9a4fc71f56456b02951322c15c6e3911517ea8f1dd", size = 3692498, upload-time = "2025-10-22T11:17:23.412Z" }, + { url = "https://files.pythonhosted.org/packages/de/2b/266a8fc7baf8c1e5e76869694cef28a4aa8656601f4b0dd577da060b51fb/impit-0.8.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af53a51000c8421cec6840b63bd3f39096d27d35f1d1bfa34f5a58a357c0e188", size = 6041055, upload-time = "2025-10-22T11:17:25.522Z" }, + { url = "https://files.pythonhosted.org/packages/74/9a/e8da4929061c88054bdbb6ac9eb5e529159be79cecfc827e4d5eeaa776c6/impit-0.8.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:b49931d3796ddc212d079e5759063e1cfa9199150f36bd582753ac7840e55328", size = 6052927, upload-time = "2025-10-22T11:17:27.234Z" }, + { url = "https://files.pythonhosted.org/packages/c0/e0/513bc7a7396507b98057e605a96dc854ca85eca109595dcf95d47c571510/impit-0.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e347da23762b8004ef37abd6d9bc38f84704605eb6991803dd4b7f664adce683", size = 6405688, upload-time = "2025-10-22T11:17:28.819Z" }, + { url = "https://files.pythonhosted.org/packages/be/e6/c942d1a101f27094649d39533ac7ba24e3341d3b5ff9b4132d73aa55fc37/impit-0.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7fe38938d27bca09692a67ddc74b82b2746bb7ac5517daf94885eec77dbebd4b", size = 6263322, upload-time = "2025-10-22T11:17:30.292Z" }, + { url = "https://files.pythonhosted.org/packages/0a/43/3845fabae51f7257a166b07ed62b71b4193208bdbbad287e832cbe9afd11/impit-0.8.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:45e0bf3d3b40a91945cb36ee3cb12af61d7cb0866680c2c9d1e5164628f1b935", size = 3874375, upload-time = "2025-10-22T11:17:31.782Z" }, + { url = "https://files.pythonhosted.org/packages/87/9c/0564a5b27622539764cdef7be2880152812ecffce142fb51613474db6950/impit-0.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d22b8cd3ebce486d00073ea33d8f46f3a030d2cac7d58265193f3f960ae82d97", size = 3693003, upload-time = "2025-10-22T11:17:33.166Z" }, + { url = "https://files.pythonhosted.org/packages/04/36/6fae62752619efe0f66d88bcc98665d947f9f7a26de9a7ca5c0857d072d8/impit-0.8.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eeece454cf70e13c8a4cb50b93e5aa8c821dabbf1582f72025f699d2ab4df51f", size = 6041771, upload-time = "2025-10-22T11:17:34.504Z" }, + { url = "https://files.pythonhosted.org/packages/7a/36/cd80a8f14f11c522b8a651473005f24512f365bed9eebc88e2ce34de8853/impit-0.8.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0a92eb0cc1e9191b38cadcd894b8fa241a6ecb0f72547c65ac5e2a1e01bc164e", size = 6052985, upload-time = "2025-10-22T11:17:36.325Z" }, + { url = "https://files.pythonhosted.org/packages/38/dc/50c3b482e0860e037bba284560488dea411fe3b745599c8ac8b2fdab020b/impit-0.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:496eddb6f760c63a7d10828f53fdd2fd49a399b06663f6d9bd91899a3b78a286", size = 6405982, upload-time = "2025-10-22T11:17:37.754Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e0/1d88a213f64d1d27c847c40bcf5c7be26b4d5ae8e0d1455a8e5c1607e5fa/impit-0.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e5c783b70f4eb65c681e5e22f4d276b7d284a9b3e65fbe3452f44159137540b", size = 6263210, upload-time = "2025-10-22T11:17:39.388Z" }, + { url = "https://files.pythonhosted.org/packages/29/f7/f53ad29b3898fedf2a9f47634a1acd49264da6252c89816cd0cce35055c7/impit-0.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f9d2350dd7451e408e767c8bce2f88f74a62d01a3ce73e694272a3f9f2d325c", size = 3878017, upload-time = "2025-10-22T11:17:40.903Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3d/bcea59ba21a8b6aaafe154fa7781946701fbbb1d5f92146c0bc48aad1001/impit-0.8.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:e4a87e3905c5d2311f1841ab85c614fb14b505f4114304368c7336848d31fa60", size = 3874828, upload-time = "2025-10-22T11:17:42.507Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3f/b8f99992089d5095e89d5f6be68de7cf13566628653b09c3e2772eb24a89/impit-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:82f0273fad1baa22d8c8727cb8182048367a14c64eeb4199a0cd35e2fd5e6969", size = 3692644, upload-time = "2025-10-22T11:17:43.949Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f6/32cf64ff6ca8f3ef528dec737f3f55721e5ad3e5962d9c4812eae711b6db/impit-0.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:172f32a9905fd9f0a9ddb0f49e94c71189510b448601d54497c9aab25f542f54", size = 6040939, upload-time = "2025-10-22T11:17:46.011Z" }, + { url = "https://files.pythonhosted.org/packages/35/bb/e51e7eb86f54ea6493f904fc7b83410ac8f795196942f37860702f30dc45/impit-0.8.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:bac034b7902970e2ed0088666cd5aa54a88a201d2dc5f9aea7493d4b96df21fb", size = 6053022, upload-time = "2025-10-22T11:17:47.567Z" }, + { url = "https://files.pythonhosted.org/packages/5f/07/3818938e3a95116783cf4df57c0708d76156fa11c5ab72b8ce544993085e/impit-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b3d867ead3941e3324f9785138b9c07d3c1a658e04eed1b63988139eca7ff114", size = 6405561, upload-time = "2025-10-22T11:17:49.328Z" }, + { url = "https://files.pythonhosted.org/packages/9f/5d/42308ffb62657228a819e3683d59a0c831f07ae278ed8854382ceabbfb97/impit-0.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:36a877a7194ae0ffb732a007a0b0d7b67b9610ad68379841a8ecaa258aae9c64", size = 6263546, upload-time = "2025-10-22T11:17:50.798Z" }, ] [[package]]