scrapely-client-python 1.0.0__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of scrapely-client-python might be problematic. Click here for more details.

Files changed (69) hide show
  1. scrapely_client_python-1.0.2/CHANGELOG.md +14 -0
  2. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/PKG-INFO +1 -1
  3. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/pyproject.toml +1 -1
  4. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/pyproject.toml.orig +1 -2
  5. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_models.py +5 -5
  6. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/actor.py +24 -10
  7. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/dataset.py +4 -4
  8. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_clients/_impit.py +4 -4
  9. scrapely_client_python-1.0.0/CHANGELOG.md +0 -9
  10. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/CONTRIBUTING.md +0 -0
  11. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/LICENSE +0 -0
  12. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/README.md +0 -0
  13. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/__init__.py +0 -0
  14. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_charging.py +0 -0
  15. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_client_registry.py +0 -0
  16. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_consts.py +0 -0
  17. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_docs.py +0 -0
  18. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_literals.py +0 -0
  19. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_logging.py +0 -0
  20. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_pagination.py +0 -0
  21. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/__init__.py +0 -0
  22. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/_resource_client.py +0 -0
  23. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/actor_collection.py +0 -0
  24. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/actor_env_var.py +0 -0
  25. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/actor_env_var_collection.py +0 -0
  26. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/actor_version.py +0 -0
  27. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/actor_version_collection.py +0 -0
  28. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/build.py +0 -0
  29. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/build_collection.py +0 -0
  30. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/dataset_collection.py +0 -0
  31. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/key_value_store.py +0 -0
  32. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/key_value_store_collection.py +0 -0
  33. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/log.py +0 -0
  34. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/request_queue.py +0 -0
  35. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/request_queue_collection.py +0 -0
  36. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/run.py +0 -0
  37. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/run_collection.py +0 -0
  38. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/schedule.py +0 -0
  39. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/schedule_collection.py +0 -0
  40. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/store_collection.py +0 -0
  41. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/task.py +0 -0
  42. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/task_collection.py +0 -0
  43. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/user.py +0 -0
  44. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/webhook.py +0 -0
  45. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/webhook_collection.py +0 -0
  46. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/webhook_dispatch.py +0 -0
  47. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_resource_clients/webhook_dispatch_collection.py +0 -0
  48. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_scrapely_client.py +0 -0
  49. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_statistics.py +0 -0
  50. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_status_message_watcher.py +0 -0
  51. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_streamed_log.py +0 -0
  52. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_typeddicts.py +0 -0
  53. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/__init__.py +0 -0
  54. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/crypto.py +0 -0
  55. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/encoding.py +0 -0
  56. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/errors.py +0 -0
  57. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/http.py +0 -0
  58. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/time.py +0 -0
  59. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/_utils/try_import.py +0 -0
  60. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/errors.py +0 -0
  61. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_clients/__init__.py +0 -0
  62. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_clients/_base.py +0 -0
  63. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_compressors/__init__.py +0 -0
  64. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_compressors/_base.py +0 -0
  65. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_compressors/_brotli.py +0 -0
  66. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_compressors/_gzip.py +0 -0
  67. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/http_compressors/_resolve.py +0 -0
  68. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/py.typed +0 -0
  69. {scrapely_client_python-1.0.0 → scrapely_client_python-1.0.2}/src/scrapely_client/types.py +0 -0
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [1.0.2] - 2026-10-13
6
+
7
+ - Builds are owner-only: `build_id` on runs and metamorphs and `build` in run options are optional, since runs of someone else's Actor carry no build info. Older versions raise a validation error on those runs.
8
+ - `actor().update(default_non_owner_build=...)` sets the User Build (the build everyone else runs); `''` clears it.
9
+
10
+ ## [1.0.0] - 2026-09-08
11
+
12
+ Initial release.
13
+
14
+ - Python client for the Scrapely API: Actors, runs, datasets, key-value stores, request queues, task management, and webhooks
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scrapely-client-python
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Scrapely API client for Python
5
5
  Keywords: scrapely,api,client,automation,crawling,scraping
6
6
  Author: Scrapely
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "scrapely-client-python"
7
- version = "1.0.0"
7
+ version = "1.0.2"
8
8
  description = "Scrapely API client for Python"
9
9
  license = "Apache-2.0"
10
10
  license-files = ["LICENSE"]
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "scrapely-client-python"
7
- version = "1.0.0"
7
+ version = "1.0.2"
8
8
  description = "Scrapely API client for Python"
9
9
  authors = [{ name = "Scrapely" }]
10
10
  license = "Apache-2.0"
@@ -46,7 +46,6 @@ brotli = ["brotli>=1.0.9"]
46
46
  dev = [
47
47
  # TODO: Remove this constraint once pydoc-markdown updates its dependencies.
48
48
  # Package pydoc-markdown is unmaintained and pins old docspec-python with vulnerable black.
49
- # See https://github.com/apify/apify-client-python/pull/582/ for more details.
50
49
  # We explicitly constrain black>=24.3.0 to override the transitive dependency.
51
50
  "black>=24.3.0",
52
51
  "datamodel-code-generator[http,ruff]>=0.64.1,<1.0.0",
@@ -50,7 +50,7 @@ class ActVersion(BaseModel):
50
50
  str | None, Field(examples=['0.0'], pattern='^([0-9]|[1-9][0-9])\\.([0-9]|[1-9][0-9])(\\.[0-9]+)?$')
51
51
  ] = None
52
52
  git_repo_url: Annotated[
53
- str | None, Field(examples=['https://github.com/apifytech/actor-crawler.git#experimental:web-scraper'])
53
+ str | None, Field(examples=['https://github.com/example/my-actor.git#main:src'])
54
54
  ] = None
55
55
  """
56
56
  URL of the git repository, present when sourceType is GIT_REPO.
@@ -1964,7 +1964,7 @@ class Metamorph(BaseModel):
1964
1964
  """
1965
1965
  ID of the Actor that the run was metamorphed to.
1966
1966
  """
1967
- build_id: Annotated[str, Field(examples=['ME6oKecqy5kXDS4KQ'])]
1967
+ build_id: Annotated[str | None, Field(examples=['ME6oKecqy5kXDS4KQ'])] = None
1968
1968
  """
1969
1969
  ID of the build used for the metamorphed Actor.
1970
1970
  """
@@ -2915,7 +2915,7 @@ class Run(BaseModel):
2915
2915
  """
2916
2916
  Configuration options for the Actor run.
2917
2917
  """
2918
- build_id: Annotated[str, Field(examples=['7sT5jcggjjA9fNcxF'])]
2918
+ build_id: Annotated[str | None, Field(examples=['7sT5jcggjjA9fNcxF'])] = None
2919
2919
  """
2920
2920
  ID of the Actor build used for this run.
2921
2921
  """
@@ -3017,7 +3017,7 @@ class RunOptions(BaseModel):
3017
3017
  populate_by_name=True,
3018
3018
  alias_generator=to_camel,
3019
3019
  )
3020
- build: Annotated[str, Field(examples=['latest'])]
3020
+ build: Annotated[str | None, Field(examples=['latest'])] = None
3021
3021
  timeout_secs: Annotated[int, Field(examples=[300], ge=0)]
3022
3022
  memory_mbytes: Annotated[int, Field(examples=[1024], ge=128, le=32768)]
3023
3023
  disk_mbytes: Annotated[int | None, Field(examples=[2048], ge=0)] = None
@@ -3049,7 +3049,7 @@ class RunShort(BaseModel):
3049
3049
  status: ActorJobStatus
3050
3050
  started_at: Annotated[AwareDatetime, Field(examples=['2019-11-30T07:34:24.202Z'])]
3051
3051
  finished_at: Annotated[AwareDatetime | None, Field(examples=['2019-12-12T09:30:12.202Z'])] = None
3052
- build_id: Annotated[str, Field(examples=['HG7ML7M8z78YcAPEB'])]
3052
+ build_id: Annotated[str | None, Field(examples=['HG7ML7M8z78YcAPEB'])] = None
3053
3053
  build_number: Annotated[
3054
3054
  str | None, Field(examples=['0.0.2'], pattern='^([0-9]|[1-9][0-9])\\.([0-9]|[1-9][0-9])(\\.[1-9][0-9]{0,4})$')
3055
3055
  ] = None
@@ -124,6 +124,7 @@ class ActorClient(ResourceClient):
124
124
  pricing_infos: list[dict[str, Any]] | None = None,
125
125
  actor_permission_level: ActorPermissionLevel | None = None,
126
126
  tagged_builds: dict[str, dict[str, str] | None] | None = None,
127
+ default_non_owner_build: str | None = None,
127
128
  timeout: Timeout = 'short',
128
129
  ) -> Actor:
129
130
  """Update the Actor with the specified fields.
@@ -162,6 +163,9 @@ class ActorClient(ResourceClient):
162
163
  tagged_builds: A dictionary mapping build tag names to their settings. Use it to create, update,
163
164
  or remove build tags. To assign a tag, provide a dict with 'buildId' key. To remove a tag,
164
165
  set its value to None. Example: {'latest': {'buildId': 'abc'}, 'beta': None}.
166
+ default_non_owner_build: The User Build: tag or number of the successful build that other users
167
+ of the public Actor run (they can't pick builds). Editable after publishing. Pass an empty
168
+ string to fall back to the default build.
165
169
  timeout: Timeout for the API HTTP request.
166
170
 
167
171
  Returns:
@@ -200,7 +204,10 @@ class ActorClient(ResourceClient):
200
204
  ),
201
205
  tagged_builds=tagged_builds,
202
206
  )
203
- result = self._update(timeout=timeout, **actor_fields.model_dump(by_alias=True, exclude_none=True))
207
+ payload = actor_fields.model_dump(by_alias=True, exclude_none=True)
208
+ if default_non_owner_build is not None:
209
+ payload['defaultNonOwnerBuild'] = default_non_owner_build
210
+ result = self._update(timeout=timeout, **payload)
204
211
  return ActorResponse.model_validate(result).data
205
212
 
206
213
  def delete(self, *, timeout: Timeout = 'short') -> None:
@@ -417,7 +424,7 @@ class ActorClient(ResourceClient):
417
424
  return BuildResponse.model_validate(result).data
418
425
 
419
426
  def builds(self) -> BuildCollectionClient:
420
- """Retrieve a client for the builds of this Actor."""
427
+ """Retrieve a client for the builds of this Actor (owner only; other users get 403)."""
421
428
  return self._client_registry.build_collection_client(
422
429
  resource_path='builds',
423
430
  **self._base_client_kwargs,
@@ -436,7 +443,7 @@ class ActorClient(ResourceClient):
436
443
  wait_for_finish: int | None = None,
437
444
  timeout: Timeout = 'short',
438
445
  ) -> BuildClient:
439
- """Retrieve Actor's default build.
446
+ """Retrieve Actor's default build (owner only; other users get 403).
440
447
 
441
448
 
442
449
  Args:
@@ -495,11 +502,11 @@ class ActorClient(ResourceClient):
495
502
  )
496
503
 
497
504
  def versions(self) -> ActorVersionCollectionClient:
498
- """Retrieve a client for the versions of this Actor."""
505
+ """Retrieve a client for the versions of this Actor (owner only; other users get 403)."""
499
506
  return self._client_registry.actor_version_collection_client(**self._base_client_kwargs)
500
507
 
501
508
  def version(self, version_number: str) -> ActorVersionClient:
502
- """Retrieve the client for the specified version of this Actor.
509
+ """Retrieve the client for the specified version of this Actor (owner only).
503
510
 
504
511
  Args:
505
512
  version_number: The version number for which to retrieve the resource client.
@@ -613,6 +620,7 @@ class ActorClientAsync(ResourceClientAsync):
613
620
  pricing_infos: list[dict[str, Any]] | None = None,
614
621
  actor_permission_level: ActorPermissionLevel | None = None,
615
622
  tagged_builds: dict[str, dict[str, str] | None] | None = None,
623
+ default_non_owner_build: str | None = None,
616
624
  timeout: Timeout = 'short',
617
625
  ) -> Actor:
618
626
  """Update the Actor with the specified fields.
@@ -651,6 +659,9 @@ class ActorClientAsync(ResourceClientAsync):
651
659
  tagged_builds: A dictionary mapping build tag names to their settings. Use it to create, update,
652
660
  or remove build tags. To assign a tag, provide a dict with 'buildId' key. To remove a tag,
653
661
  set its value to None. Example: {'latest': {'buildId': 'abc'}, 'beta': None}.
662
+ default_non_owner_build: The User Build: tag or number of the successful build that other users
663
+ of the public Actor run (they can't pick builds). Editable after publishing. Pass an empty
664
+ string to fall back to the default build.
654
665
  timeout: Timeout for the API HTTP request.
655
666
 
656
667
  Returns:
@@ -689,7 +700,10 @@ class ActorClientAsync(ResourceClientAsync):
689
700
  ),
690
701
  tagged_builds=tagged_builds,
691
702
  )
692
- result = await self._update(timeout=timeout, **actor_fields.model_dump(by_alias=True, exclude_none=True))
703
+ payload = actor_fields.model_dump(by_alias=True, exclude_none=True)
704
+ if default_non_owner_build is not None:
705
+ payload['defaultNonOwnerBuild'] = default_non_owner_build
706
+ result = await self._update(timeout=timeout, **payload)
693
707
  return ActorResponse.model_validate(result).data
694
708
 
695
709
  async def delete(self, *, timeout: Timeout = 'short') -> None:
@@ -910,7 +924,7 @@ class ActorClientAsync(ResourceClientAsync):
910
924
  return BuildResponse.model_validate(result).data
911
925
 
912
926
  def builds(self) -> BuildCollectionClientAsync:
913
- """Retrieve a client for the builds of this Actor."""
927
+ """Retrieve a client for the builds of this Actor (owner only; other users get 403)."""
914
928
  return self._client_registry.build_collection_client(
915
929
  resource_path='builds',
916
930
  **self._base_client_kwargs,
@@ -929,7 +943,7 @@ class ActorClientAsync(ResourceClientAsync):
929
943
  wait_for_finish: int | None = None,
930
944
  timeout: Timeout = 'short',
931
945
  ) -> BuildClientAsync:
932
- """Retrieve Actor's default build.
946
+ """Retrieve Actor's default build (owner only; other users get 403).
933
947
 
934
948
 
935
949
  Args:
@@ -988,11 +1002,11 @@ class ActorClientAsync(ResourceClientAsync):
988
1002
  )
989
1003
 
990
1004
  def versions(self) -> ActorVersionCollectionClientAsync:
991
- """Retrieve a client for the versions of this Actor."""
1005
+ """Retrieve a client for the versions of this Actor (owner only; other users get 403)."""
992
1006
  return self._client_registry.actor_version_collection_client(**self._base_client_kwargs)
993
1007
 
994
1008
  def version(self, version_number: str) -> ActorVersionClientAsync:
995
- """Retrieve the client for the specified version of this Actor.
1009
+ """Retrieve the client for the specified version of this Actor (owner only).
996
1010
 
997
1011
  Args:
998
1012
  version_number: The version number for which to retrieve the resource client.
@@ -305,7 +305,7 @@ class DatasetClient(ResourceClient):
305
305
 
306
306
 
307
307
  Args:
308
- item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml and rss.
308
+ item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml, rss and pdf.
309
309
  The default value is json.
310
310
  offset: Number of items that should be skipped at the start. The default value is 0.
311
311
  limit: Maximum number of items to return. By default there is no limit.
@@ -402,7 +402,7 @@ class DatasetClient(ResourceClient):
402
402
 
403
403
 
404
404
  Args:
405
- item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml and rss.
405
+ item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml, rss and pdf.
406
406
  The default value is json.
407
407
  offset: Number of items that should be skipped at the start. The default value is 0.
408
408
  limit: Maximum number of items to return. By default there is no limit.
@@ -857,7 +857,7 @@ class DatasetClientAsync(ResourceClientAsync):
857
857
 
858
858
 
859
859
  Args:
860
- item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml and rss.
860
+ item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml, rss and pdf.
861
861
  The default value is json.
862
862
  offset: Number of items that should be skipped at the start. The default value is 0.
863
863
  limit: Maximum number of items to return. By default there is no limit.
@@ -954,7 +954,7 @@ class DatasetClientAsync(ResourceClientAsync):
954
954
 
955
955
 
956
956
  Args:
957
- item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml and rss.
957
+ item_format: Format of the results, possible values are: json, jsonl, csv, html, xlsx, xml, rss and pdf.
958
958
  The default value is json.
959
959
  offset: Number of items that should be skipped at the start. The default value is 0.
960
960
  limit: Maximum number of items to return. By default there is no limit.
@@ -67,7 +67,7 @@ def _is_retryable_error(exc: Exception) -> bool:
67
67
 
68
68
  @docs_group('HTTP clients')
69
69
  class ImpitHttpClient(HttpClient):
70
- """Synchronous HTTP client for the Scrapely API built on top of [Impit](https://github.com/apify/impit).
70
+ """Synchronous HTTP client for the Scrapely API built on top of Impit.
71
71
 
72
72
  Impit is a high-performance HTTP client written in Rust that provides browser-like TLS fingerprints,
73
73
  automatic header ordering, and HTTP/2 support. This client wraps `impit.Client` and adds automatic retries
@@ -222,7 +222,7 @@ class ImpitHttpClient(HttpClient):
222
222
 
223
223
  # Impit treats timeout=None as "use client default (30s)", not "no timeout".
224
224
  # Use a large value (24 hours) to effectively disable the timeout.
225
- # This can be removed once impit updates its behaviour: https://github.com/apify/impit/issues/401
225
+ # This can be removed once impit updates its behaviour.
226
226
  computed_timeout = self._compute_timeout(timeout, attempt=attempt)
227
227
  impit_timeout = 86_400 if computed_timeout is None else computed_timeout
228
228
 
@@ -327,7 +327,7 @@ class ImpitHttpClient(HttpClient):
327
327
 
328
328
  @docs_group('HTTP clients')
329
329
  class ImpitHttpClientAsync(HttpClientAsync):
330
- """Asynchronous HTTP client for the Scrapely API built on top of [Impit](https://github.com/apify/impit).
330
+ """Asynchronous HTTP client for the Scrapely API built on top of Impit.
331
331
 
332
332
  Impit is a high-performance HTTP client written in Rust that provides browser-like TLS fingerprints,
333
333
  automatic header ordering, and HTTP/2 support. This client wraps `impit.AsyncClient` and adds automatic retries
@@ -495,7 +495,7 @@ class ImpitHttpClientAsync(HttpClientAsync):
495
495
 
496
496
  # Impit treats timeout=None as "use client default (30s)", not "no timeout".
497
497
  # Use a large value (24 hours) to effectively disable the timeout.
498
- # This can be removed once impit updates its behaviour: https://github.com/apify/impit/issues/401
498
+ # This can be removed once impit updates its behaviour.
499
499
  computed_timeout = self._compute_timeout(timeout, attempt=attempt)
500
500
  impit_timeout = 86_400 if computed_timeout is None else computed_timeout
501
501
 
@@ -1,9 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- ## [1.0.0] - 2026-09-08
6
-
7
- Initial release.
8
-
9
- - Python client for the Scrapely API: Actors, runs, datasets, key-value stores, request queues, task management, and webhooks