Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: aborting of last Actor/task run (#192)
## Problem description ### Aborting the last Actor run does not work - Resulting in: ``` apify_client._errors.ApifyApiError: We have bad news: there is no API endpoint at this URL. Did you specify it correctly? ``` - Code to reproduce it: ```python # sync version from apify_client import ApifyClient TOKEN = '...' ACTOR_ID = '...' def actor_run_abort(apify_client: ApifyClient, actor_id: str) -> None: actor_client = apify_client.actor(actor_id) actor_client.call(wait_secs=1) last_run = actor_client.last_run(status='RUNNING', origin='API') aborted_info = last_run.abort() print(f'aborted_info: {aborted_info}') if __name__ == '__main__': apify_client = ApifyClient(TOKEN) actor_run_abort(apify_client, ACTOR_ID) ``` ```python # async version import asyncio from apify_client import ApifyClientAsync TOKEN = '...' ACTOR_ID = '...' async def actor_run_abort_async(apify_client: ApifyClientAsync, actor_id: str) -> None: actor_client = apify_client.actor(actor_id) await actor_client.call(wait_secs=1) last_run = await actor_client.last_run(status='RUNNING', origin='API') aborted_info = await last_run.abort() print(f'aborted_info: {aborted_info}') if __name__ == '__main__': apify_client = ApifyClientAsync(TOKEN) asyncio.run(actor_run_abort_async(apify_client, ACTOR_ID)) ``` ### Aborting of the last task run does not work - Resulting in: ``` apify_client._errors.ApifyApiError: We have bad news: there is no API endpoint at this URL. Did you specify it correctly? ``` - Code to reproduce it: ```python # sync version from apify_client import ApifyClient TOKEN = '...' TASK_ID = '...' def task_run_abort(apify_client: ApifyClient, task_id: str) -> None: task_client = apify_client.task(task_id) task_client.call(wait_secs=1) last_run = task_client.last_run(status='RUNNING', origin='API') aborted_info = last_run.abort() print(f'aborted_info: {aborted_info}') if __name__ == '__main__': apify_client = ApifyClient(TOKEN) task_run_abort(apify_client, TASK_ID) ``` ```python # async version import asyncio from apify_client import ApifyClientAsync TOKEN = '...' TASK_ID = '...' async def task_run_abort_async(apify_client: ApifyClientAsync, task_id: str) -> None: task_client = apify_client.task(task_id) await task_client.call(wait_secs=1) last_run = await task_client.last_run(status='RUNNING', origin='API') aborted_info = await last_run.abort() print(f'aborted_info: {aborted_info}') if __name__ == '__main__': apify_client = ApifyClientAsync(TOKEN) asyncio.run(task_run_abort_async(apify_client, TASK_ID)) ``` ### Related issues - The aborting of the last task run was reported in #190. The aborting of the last Actor run does not work as well as was described above. ### Solution - Using additional API call to be able to call `https://api.apify.com/v2/acts/{actorId}/runs/{runId}/abort` in both cases. - In the async version it results in `last_run` method being `async` (should not be released as patch version). - Copied from source code (Actor run): ```python # Note: # The API does not provide a direct endpoint for aborting the last Actor run using a URL like: # https://api.apify.com/v2/acts/{actor_id}/runs/last/abort # To achieve this, we need to implement a workaround using the following URL format: # https://api.apify.com/v2/acts/{actorId}/runs/{runId}/abort ``` - Copied from source code (task run): ```python # Note: # The API does not provide a direct endpoint for aborting the last task run using a URL like: # https://api.apify.com/v2/actor-tasks/{task_id}/runs/last/abort # To achieve this, we need to implement a workaround using the following URL format: # https://api.apify.com/v2/acts/{actorId}/runs/{runId}/abort ``` ### Testing - As we do not have a proper testing framework here, it was tested just manually with the code examples provided at the beginning.
- Loading branch information