scrapely-python 0.1.27__tar.gz → 0.1.30__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.
Files changed (76) hide show
  1. scrapely_python-0.1.30/CHANGELOG.md +12 -0
  2. scrapely_python-0.1.30/MANIFEST.in +2 -0
  3. scrapely_python-0.1.30/NOTICE +16 -0
  4. {scrapely_python-0.1.27/src/scrapely_python.egg-info → scrapely_python-0.1.30}/PKG-INFO +10 -9
  5. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/README.md +4 -5
  6. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/pyproject.toml +6 -4
  7. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/__init__.py +2 -2
  8. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/actor.py +22 -22
  9. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/charging.py +274 -50
  10. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/configuration.py +7 -8
  11. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/errors.py +1 -2
  12. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/events/__init__.py +1 -1
  13. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/log.py +8 -4
  14. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/pricing_types.py +1 -6
  15. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/proxy_configuration.py +36 -42
  16. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/request_loaders/_scrapely_request_list.py +2 -2
  17. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/solver.py +1 -1
  18. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/__init__.py +1 -1
  19. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/_file_system/__init__.py +1 -1
  20. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/_file_system/_key_value_store_client.py +5 -1
  21. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/_file_system/_storage_client.py +5 -1
  22. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/api_client.py +2 -2
  23. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/client.py +4 -4
  24. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/patch_storage.py +4 -4
  25. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/scrapely_rq_client.py +1 -1
  26. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/scrapely_storage_client.py +3 -3
  27. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/smart_scrapely_storage_client.py +5 -1
  28. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/types.py +2 -2
  29. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/utils.py +4 -0
  30. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage_clients/__init__.py +2 -2
  31. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storages/__init__.py +1 -1
  32. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/types.py +2 -3
  33. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/webhook.py +1 -1
  34. {scrapely_python-0.1.27 → scrapely_python-0.1.30/src/scrapely_python.egg-info}/PKG-INFO +10 -9
  35. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely_python.egg-info/SOURCES.txt +3 -21
  36. scrapely_python-0.1.27/NOTICE +0 -27
  37. scrapely_python-0.1.27/tests/test_api_client_retries.py +0 -241
  38. scrapely_python-0.1.27/tests/test_apify_parity.py +0 -135
  39. scrapely_python-0.1.27/tests/test_browser_configuration.py +0 -93
  40. scrapely_python-0.1.27/tests/test_cdp_retry.py +0 -169
  41. scrapely_python-0.1.27/tests/test_charge_limit_guard.py +0 -825
  42. scrapely_python-0.1.27/tests/test_charge_retries.py +0 -195
  43. scrapely_python-0.1.27/tests/test_charging_parity.py +0 -378
  44. scrapely_python-0.1.27/tests/test_charging_pending.py +0 -745
  45. scrapely_python-0.1.27/tests/test_debug_capture.py +0 -54
  46. scrapely_python-0.1.27/tests/test_input_proxy_aliases.py +0 -98
  47. scrapely_python-0.1.27/tests/test_lazy_crawlee.py +0 -311
  48. scrapely_python-0.1.27/tests/test_parity.py +0 -381
  49. scrapely_python-0.1.27/tests/test_patch_browser_pool.py +0 -1212
  50. scrapely_python-0.1.27/tests/test_proxy_configuration.py +0 -755
  51. scrapely_python-0.1.27/tests/test_push_idempotency.py +0 -242
  52. scrapely_python-0.1.27/tests/test_run_control.py +0 -499
  53. scrapely_python-0.1.27/tests/test_secrets.py +0 -134
  54. scrapely_python-0.1.27/tests/test_solver.py +0 -327
  55. scrapely_python-0.1.27/tests/test_storage.py +0 -477
  56. scrapely_python-0.1.27/tests/test_terminal_status_message.py +0 -149
  57. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/LICENSE +0 -0
  58. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/LICENSE-APACHE +0 -0
  59. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/setup.cfg +0 -0
  60. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/_browser_locations.py +0 -0
  61. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/browser_configuration.py +0 -0
  62. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/cdp_retry.py +0 -0
  63. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/charging_client.py +0 -0
  64. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/crypto/__init__.py +0 -0
  65. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/crypto/_secrets.py +0 -0
  66. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/events/_types.py +0 -0
  67. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/events/event_manager.py +0 -0
  68. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/patch_browser_pool.py +0 -0
  69. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/py.typed +0 -0
  70. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/request_loaders/__init__.py +0 -0
  71. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/_metadata.py +0 -0
  72. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/scrapely_dataset_client.py +0 -0
  73. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely/storage/scrapely_kvs_client.py +0 -0
  74. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely_python.egg-info/dependency_links.txt +0 -0
  75. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely_python.egg-info/requires.txt +0 -0
  76. {scrapely_python-0.1.27 → scrapely_python-0.1.30}/src/scrapely_python.egg-info/top_level.txt +0 -0
@@ -0,0 +1,12 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [0.1.30] - 2026-10-20
6
+
7
+ - Removed `apify_margin_percentage` from the pricing info models; the API no longer returns it.
8
+ - Added Apache-2.0 change notices to the storage clients, storage utils and log module derived from apify-sdk-python, and listed them in NOTICE.
9
+
10
+ ## [0.1.29] - 2026-10-19
11
+
12
+ - Initial public release.
@@ -0,0 +1,2 @@
1
+ include CHANGELOG.md
2
+ prune tests
@@ -0,0 +1,16 @@
1
+ scrapely-python
2
+ Copyright (c) 2025-2026 TeraShift GmbH (Scrape.ly)
3
+
4
+ Licensed under the MIT License (see LICENSE), except for the files below,
5
+ which are derived from apify-sdk-python (https://github.com/apify/apify-sdk-python),
6
+ Copyright Apify Technologies s.r.o., and remain under the Apache License,
7
+ Version 2.0 (see LICENSE-APACHE). They have been modified by TeraShift GmbH:
8
+
9
+ - src/scrapely/events/_types.py
10
+ - src/scrapely/events/event_manager.py
11
+ - src/scrapely/log.py
12
+ - src/scrapely/request_loaders/_scrapely_request_list.py
13
+ - src/scrapely/storage/_file_system/_key_value_store_client.py
14
+ - src/scrapely/storage/_file_system/_storage_client.py
15
+ - src/scrapely/storage/smart_scrapely_storage_client.py
16
+ - src/scrapely/storage/utils.py
@@ -1,13 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scrapely-python
3
- Version: 0.1.27
3
+ Version: 0.1.30
4
4
  Summary: Scrapely Python SDK - A toolkit for building Actors on the Scrapely platform
5
5
  Author-email: Scrapely <support@scrape.ly>
6
6
  License-Expression: MIT AND Apache-2.0
7
7
  Project-URL: Homepage, https://scrape.ly
8
- Project-URL: Documentation, https://docs.scrape.ly
9
- Project-URL: Repository, https://github.com/SandeepDev1/scrapely
10
- Keywords: scraping,actor,serverless,apify,scrapely
8
+ Project-URL: Documentation, https://scrape.ly/docs/sdk-python
9
+ Project-URL: Repository, https://github.com/scrapely-app/scrapely-python
10
+ Project-URL: Issues, https://github.com/scrapely-app/scrapely-python/issues
11
+ Project-URL: Changelog, https://github.com/scrapely-app/scrapely-python/blob/main/CHANGELOG.md
12
+ Keywords: scraping,actor,serverless,scrapely
11
13
  Classifier: Development Status :: 3 - Alpha
12
14
  Classifier: Intended Audience :: Developers
13
15
  Classifier: Operating System :: OS Independent
@@ -43,7 +45,7 @@ Build Python Actors for the [Scrapely](https://scrape.ly) platform with lifecycl
43
45
 
44
46
  ## Install
45
47
 
46
- Scrapely requires Python 3.9 or newer.
48
+ Scrapely requires Python 3.11 or newer.
47
49
 
48
50
  ```bash
49
51
  python -m pip install scrapely-python
@@ -81,12 +83,11 @@ if __name__ == "__main__":
81
83
  - Automatic remote Chromium CDP wiring through `CDP_URL`
82
84
  - Actor start, call, abort, reboot, and metamorph operations
83
85
  - Ad-hoc webhooks, proxy configuration, and charging/pricing types
84
- - Apify-compatible environment aliases and asynchronous client access
86
+ - Legacy environment variable aliases and asynchronous client access
85
87
 
86
- See the [complete Python SDK guide](../docs/sdk-python.md) for lifecycle details, option objects, storage selection, events, CDP behavior, run control, environment variables, errors, and the full public export list.
88
+ See the [complete Python SDK guide](https://scrape.ly/docs/sdk-python) for lifecycle details, option objects, storage selection, events, CDP behavior, run control, environment variables, errors, and the full public export list.
87
89
 
88
90
  ## License
89
91
 
90
- MIT (see [LICENSE](./LICENSE)), except for three files derived from the Apache-2.0 licensed
91
- [apify-sdk-python](https://github.com/apify/apify-sdk-python), which stay under the Apache License 2.0
92
+ MIT (see [LICENSE](./LICENSE)), except for three files that stay under the Apache License 2.0
92
93
  (see [LICENSE-APACHE](./LICENSE-APACHE) and [NOTICE](./NOTICE)).
@@ -4,7 +4,7 @@ Build Python Actors for the [Scrapely](https://scrape.ly) platform with lifecycl
4
4
 
5
5
  ## Install
6
6
 
7
- Scrapely requires Python 3.9 or newer.
7
+ Scrapely requires Python 3.11 or newer.
8
8
 
9
9
  ```bash
10
10
  python -m pip install scrapely-python
@@ -42,12 +42,11 @@ if __name__ == "__main__":
42
42
  - Automatic remote Chromium CDP wiring through `CDP_URL`
43
43
  - Actor start, call, abort, reboot, and metamorph operations
44
44
  - Ad-hoc webhooks, proxy configuration, and charging/pricing types
45
- - Apify-compatible environment aliases and asynchronous client access
45
+ - Legacy environment variable aliases and asynchronous client access
46
46
 
47
- See the [complete Python SDK guide](../docs/sdk-python.md) for lifecycle details, option objects, storage selection, events, CDP behavior, run control, environment variables, errors, and the full public export list.
47
+ See the [complete Python SDK guide](https://scrape.ly/docs/sdk-python) for lifecycle details, option objects, storage selection, events, CDP behavior, run control, environment variables, errors, and the full public export list.
48
48
 
49
49
  ## License
50
50
 
51
- MIT (see [LICENSE](./LICENSE)), except for three files derived from the Apache-2.0 licensed
52
- [apify-sdk-python](https://github.com/apify/apify-sdk-python), which stay under the Apache License 2.0
51
+ MIT (see [LICENSE](./LICENSE)), except for three files that stay under the Apache License 2.0
53
52
  (see [LICENSE-APACHE](./LICENSE-APACHE) and [NOTICE](./NOTICE)).
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "scrapely-python"
7
- version = "0.1.27"
7
+ version = "0.1.30"
8
8
  description = "Scrapely Python SDK - A toolkit for building Actors on the Scrapely platform"
9
9
  readme = "README.md"
10
10
  license = "MIT AND Apache-2.0"
@@ -22,7 +22,7 @@ classifiers = [
22
22
  "Topic :: Software Development :: Libraries :: Python Modules",
23
23
  "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
24
24
  ]
25
- keywords = ["scraping", "actor", "serverless", "apify", "scrapely"]
25
+ keywords = ["scraping", "actor", "serverless", "scrapely"]
26
26
  requires-python = ">=3.11"
27
27
  dependencies = [
28
28
  "httpx>=0.25.0",
@@ -47,8 +47,10 @@ dev = [
47
47
 
48
48
  [project.urls]
49
49
  Homepage = "https://scrape.ly"
50
- Documentation = "https://docs.scrape.ly"
51
- Repository = "https://github.com/SandeepDev1/scrapely"
50
+ Documentation = "https://scrape.ly/docs/sdk-python"
51
+ Repository = "https://github.com/scrapely-app/scrapely-python"
52
+ Issues = "https://github.com/scrapely-app/scrapely-python/issues"
53
+ Changelog = "https://github.com/scrapely-app/scrapely-python/blob/main/CHANGELOG.md"
52
54
 
53
55
  [tool.setuptools.packages.find]
54
56
  where = ["src"]
@@ -227,13 +227,13 @@ if TYPE_CHECKING: # Static analysers and IDEs see the lazy names as plain impor
227
227
  set_api_storage,
228
228
  )
229
229
 
230
- __version__ = '0.1.27'
230
+ __version__ = '0.1.30'
231
231
  __all__ = [
232
232
  # Core
233
233
  'Actor',
234
234
  'Configuration',
235
235
  'set_cdp_url',
236
- # ApifyClient
236
+ # Charging client
237
237
  'create_charging_client',
238
238
  'USES_PUSH_DATA_INTERCEPTION',
239
239
  'push_data_charging_context',
@@ -204,7 +204,7 @@ def _run_options_params(
204
204
  force_permission_level: Optional[Any] = None,
205
205
  webhooks: Optional[List[Any]] = None,
206
206
  ) -> Dict[str, Any]:
207
- """Build the Apify-style run-option query parameters for run-start requests.
207
+ """Build the run-option query parameters for run-start requests.
208
208
 
209
209
  Server wire contract: the POST body of a run-start request is the run
210
210
  input itself; run options (build/timeout/memory/maxTotalChargeUsd/
@@ -319,9 +319,9 @@ class Actor(metaclass=_ActorMeta):
319
319
  exit_process: Optional[bool] = None,
320
320
  event_listeners_timeout: Optional[timedelta] = None,
321
321
  ):
322
- """Apify parity: ``async with Actor(configure_logging=False):`` as well as ``async with Actor:``.
322
+ """Support ``async with Actor(configure_logging=False):`` as well as ``async with Actor:``.
323
323
 
324
- ``options`` is a configuration dict (Apify passes a Configuration here). The context
324
+ ``options`` is a configuration dict. The context
325
325
  manager never calls ``sys.exit`` (``exit_process`` is accepted for signature parity),
326
326
  and ``event_listeners_timeout`` is accepted but not applied.
327
327
  """
@@ -422,7 +422,7 @@ class Actor(metaclass=_ActorMeta):
422
422
  'run_id': run_id,
423
423
  })
424
424
  elif not cls._config.get('is_at_home'):
425
- # Local development without credentials: Smart → FS (Apify docs shape)
425
+ # Local development without credentials: Smart → FS
426
426
  logger.info('[Scrapely] Initializing local file-system storage')
427
427
  smart = _lazy('set_api_storage')()
428
428
  else:
@@ -635,7 +635,7 @@ class Actor(metaclass=_ActorMeta):
635
635
  ) -> None:
636
636
  """Exit the Actor with an optional terminal status message.
637
637
 
638
- Apify-Python parity: supports keyword-only ``status_message`` and
638
+ Supports keyword-only ``status_message`` and
639
639
  ``exit_code`` arguments (``await Actor.exit(status_message="Done")``).
640
640
  The pre-existing positional forms (``Actor.exit("message")`` /
641
641
  ``Actor.exit(ExitOptions(...))``) remain supported; explicit keyword
@@ -678,7 +678,7 @@ class Actor(metaclass=_ActorMeta):
678
678
  ) -> None:
679
679
  """Fail the Actor run (exit code defaults to ``1``).
680
680
 
681
- Apify-Python parity: supports keyword-only ``status_message``,
681
+ Supports keyword-only ``status_message``,
682
682
  ``exit_code`` and ``exception`` arguments
683
683
  (``await Actor.fail(status_message="Boom", exception=e)``). When
684
684
  ``exception`` is given its traceback is logged.
@@ -724,7 +724,7 @@ class Actor(metaclass=_ActorMeta):
724
724
  def is_paying(cls) -> bool:
725
725
  """Whether the user who started this Actor run is a paying user.
726
726
 
727
- Mirrors the Node SDK's ``Actor.isPaying`` (``APIFY_USER_IS_PAYING`` /
727
+ Reads ``APIFY_USER_IS_PAYING`` (config key
728
728
  ``user_is_paying``). Note the platform currently sets this from the
729
729
  subscription plan only — PAYG balance alone does not flip it.
730
730
  """
@@ -833,8 +833,8 @@ class Actor(metaclass=_ActorMeta):
833
833
  ) -> ChargeResult:
834
834
  """Push data to the default dataset, charging pay-per-event items.
835
835
 
836
- Matches the Apify Python SDK's ``Actor.push_data(data, charged_event_name=...)``:
837
- when the Actor uses pay-per-event pricing, each pushed item is charged for the
836
+ Usage: ``Actor.push_data(data, charged_event_name=...)``.
837
+ When the Actor uses pay-per-event pricing, each pushed item is charged for the
838
838
  default-dataset-item event (if priced) and, when ``charged_event_name`` is
839
839
  provided, for that explicit event as well. Actors without pay-per-event
840
840
  pricing push without charging and receive an empty result.
@@ -842,7 +842,7 @@ class Actor(metaclass=_ActorMeta):
842
842
  Args:
843
843
  data: Item or list of items to push to the default dataset.
844
844
  charged_event_name: Optional pricing event to charge for each pushed item
845
- (Apify Python SDK name; also accepted positionally).
845
+ (also accepted positionally).
846
846
  event_name: Deprecated alias of ``charged_event_name`` (JS ``eventName``),
847
847
  kept so existing callers keep working.
848
848
  charges: Several events per row, charged atomically: ``{'result': 1, 'page': 3}``
@@ -872,7 +872,7 @@ class Actor(metaclass=_ActorMeta):
872
872
  raise ValueError('Pass only one of charged_event_name / event_name')
873
873
  event_name = charged_event_name if charged_event_name is not None else event_name
874
874
  # Exact synthetic names only (JS parity) — a prefix heuristic would block
875
- # real priced events like 'apify-foo'.
875
+ # real priced events.
876
876
  if event_name and is_default_dataset_item_event(event_name):
877
877
  raise ValueError(f"Cannot charge for synthetic event '{event_name}' manually")
878
878
 
@@ -1168,7 +1168,7 @@ class Actor(metaclass=_ActorMeta):
1168
1168
  Args:
1169
1169
  message: The status message to set.
1170
1170
  options: Optional settings (``is_status_message_terminal``, ``level``).
1171
- is_terminal: Apify Python SDK-style terminal flag. When given, it
1171
+ is_terminal: Terminal flag. When given, it
1172
1172
  overrides ``options.is_status_message_terminal``.
1173
1173
 
1174
1174
  Returns:
@@ -1276,7 +1276,7 @@ class Actor(metaclass=_ActorMeta):
1276
1276
 
1277
1277
  @classmethod
1278
1278
  async def _persist_terminal_status_message(cls, message: Optional[str], timeout_secs: float = 10.0) -> None:
1279
- """Store the exit/fail status message on the run as terminal (Apify parity).
1279
+ """Store the exit/fail status message on the run as terminal.
1280
1280
 
1281
1281
  Runs before teardown so it lands while the run still exists and the
1282
1282
  process is alive, on success and failure alike. Best effort: a failed
@@ -1322,7 +1322,7 @@ class Actor(metaclass=_ActorMeta):
1322
1322
 
1323
1323
  @classmethod
1324
1324
  def _env_config(cls) -> Configuration:
1325
- # Apify parity: is_at_home() and friends read the environment even
1325
+ # is_at_home() and friends read the environment even
1326
1326
  # before init(). Doesn't set cls._config, so init() state is unchanged.
1327
1327
  return cls._config if cls._config is not None else Configuration.get_global_config()
1328
1328
 
@@ -1335,14 +1335,14 @@ class Actor(metaclass=_ActorMeta):
1335
1335
  return ApiClient(api_url=api_url, token=api_token, run_id=run_id)
1336
1336
 
1337
1337
  # -------------------------------------------------------------------------
1338
- # Properties for Apify SDK compatibility
1338
+ # Client and configuration properties
1339
1339
  # -------------------------------------------------------------------------
1340
1340
 
1341
1341
  @classmethod
1342
1342
  def _get_apify_client(cls) -> 'ApifyClientAsync':
1343
1343
  """Get or create a cached charging-configured ``ApifyClientAsync`` instance.
1344
1344
 
1345
- This client provides full ApifyClient compatibility including
1345
+ This client provides the full ApifyClient API including
1346
1346
  actor(), dataset(), key_value_store(), etc. methods.
1347
1347
  """
1348
1348
  if cls._apify_client_instance is None:
@@ -1372,9 +1372,9 @@ class Actor(metaclass=_ActorMeta):
1372
1372
 
1373
1373
  @_ClassProperty
1374
1374
  def apify_client(cls) -> 'ApifyClientAsync':
1375
- """Get a charging-configured ``ApifyClientAsync`` for Apify SDK compatibility.
1375
+ """Get a charging-configured ``ApifyClientAsync``.
1376
1376
 
1377
- This provides full ApifyClient compatibility including:
1377
+ This provides the full ApifyClient API including:
1378
1378
  - client.actor('id').call()
1379
1379
  - client.dataset('id').list_items()
1380
1380
  - client.key_value_store('id').get_record('key')
@@ -1390,7 +1390,7 @@ class Actor(metaclass=_ActorMeta):
1390
1390
 
1391
1391
  @_ClassProperty
1392
1392
  def config(cls) -> Configuration:
1393
- """Return the Configuration instance (Apify SDK ``Actor.config`` parity)."""
1393
+ """Return the Configuration instance."""
1394
1394
  return cls.get_config()
1395
1395
 
1396
1396
  @_ClassProperty
@@ -1530,7 +1530,7 @@ class Actor(metaclass=_ActorMeta):
1530
1530
  client = cls.new_client(token=opts.token) if opts.token else cls.new_client()
1531
1531
 
1532
1532
  # Wire format (server contract): the POST body is the run input itself;
1533
- # run options are Apify-style query parameters. Inline webhooks ride
1533
+ # run options are query parameters. Inline webhooks ride
1534
1534
  # along base64-encoded in the `webhooks` query param.
1535
1535
  params = _run_options_params(
1536
1536
  build=opts.build,
@@ -1615,7 +1615,7 @@ class Actor(metaclass=_ActorMeta):
1615
1615
  """Poll ``GET /v2/actor-runs/:runId`` until the run reaches a terminal status.
1616
1616
 
1617
1617
  When ``timeout_seconds`` elapses first, the run is aborted (best-effort)
1618
- and ``TimeoutError`` is raised — Node SDK (apify-client) parity.
1618
+ and ``TimeoutError`` is raised.
1619
1619
  """
1620
1620
  deadline = time.monotonic() + timeout_seconds if timeout_seconds is not None else None
1621
1621
 
@@ -1693,7 +1693,7 @@ class Actor(metaclass=_ActorMeta):
1693
1693
 
1694
1694
  # Wire format (server contract): the POST body is the task input
1695
1695
  # override (merged over the task's saved input by the server); run
1696
- # options are Apify-style query parameters. The task-run endpoint is
1696
+ # options are query parameters. The task-run endpoint is
1697
1697
  # /v2/actor-tasks/:taskId/runs (there is no /v2/tasks/:taskId/runs).
1698
1698
  params = _run_options_params(
1699
1699
  build=opts.build,